从零配置hive+案例练习+常见问题解决方法
Posted "Hello World".
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零配置hive+案例练习+常见问题解决方法相关的知识,希望对你有一定的参考价值。
前期准备
上传hive包(已上传资源包)
解压到/opt/module/下
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/
修改解压后的名字
mv apache-hive-3.1.2-bin/ hive
配置
进入到/opt/module/hive/conf
cd /opt/module/hive/conf
修改标注的文件名
mv hive-env.sh.template hive-env.sh
vi hive-env.sh
添加以下这两个配置(Hadoop路径和hive路径,自己灵活改动)
配置好启动HDFS
start-dfs.sh
先查看HDFS文件系统现有目录
hadoop fs -lsr /
在HDFS上创建/tmp和/user/hive/warehouse两个目录并修改他们的同组权限可写
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -mkdir /tmp
修改权限
hadoop fs -chmod 777 /user/hive/warehouse
hadoop fs -chmod 777 /tmp
启动hive
cd /opt/module/hive
bin/hive
启动不成功,这里有个坑,下面是问题描述和解决办法
在Hadoop3.2.2中安装hive3.1.2时,会出现版本不兼容的情况,报错如下:
Exception in thread “main” java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1380)
…
at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
原因:
hadoop和hive的两个guava.jar版本不一致
两个位置分别位于下面两个目录:
- /opt/module/hive/lib
- /opt/module/hadoop-3.2.2/share/hadoop/common/lib
解决办法:
删除低版本的那个,将高版本的复制到低版本目录下
这种情况是Hadoop3.2.2中的guava-27.0-jre.jar版本高于Hive中的19.0版本了,只需删除hive中的19.0版本的guava.jar,让后吧Hadoop中guaca-27.0-jre.jar复制过来即可。
cp guava-27.0-jre.jar /opt/module/hive/lib/
使用过程,还有一个坑,下面是问题描述和解决办法
show databases;
执行以上命令发现出错了
下面解决:
cd /opt/module/hive
rm -rf metastore_db
bin/schematool -initSchema -dbType derby
再次启动hive,正常
bin/hive
mysql存放元数据实现多hive客户端
非mysql存放元数据,如果打开两个hive客户端,会出错,需要用mysql存放hive的元数据,才能启动多个hive,下面配置。
退出hive窗口:exit;或者quit;
注: MySQL按照步骤参考前期文章。
或参考以下链接:
https://www.bilibili.com/video/av90053034?p=13
mysql安装好后,进行hive的相关配置
在/opt/module/hive/conf/下执行下面操作
vi hive-site.xml
添加以下内容
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnetionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
</configuration>
将mysql的驱动jar包复制到/opt/module/hive/lib/下,mysql驱动已上传
在/opt/module/hive/bin/下执行下面命令进行数据库的初始化
./schematool -dbType mysql -initSchema
这里有个小坑
当执行上述命令出现无法获取平台版本号或者无法连接mysql时,一般从以下方面进行排查:
1、 mysql驱动jar包是否和mysql版本号兼容;
2、 mysql中mysql数据库的user表中,修改root的host如下:
再次执行 bin/schematool -dbType mysql -initSchema应该就没问题了。
多窗口启动Hive测试
先启动musql
mysql -uroot -p
再次打开多个窗口,分别启动hive
bin/hive
使用过程,查看数据库操作,还有一个坑
配置后,启动hive,show database出现错误,解决方法如下
cd /opt/module/hive
rm -rf metastore_db
再次启动,正常
bin/schematool -initSchema -dbType mysql
show databases;
这是,再打开一个客户端,启动hive,能正常使用了。
###################################################################
小例子
将本地文件导入到hive:
首先,在本地创建student.txt,并存入几条数据:
启动hive,使用default数据库,创建student表:这里之前我新建了一个student表,所以先把它删除点,然后新建:
-e 从命令行种输入SQl语句:
如:
退出hive,加参数-e也能直接查询
bin/hive -e "select * from student;"
-f 使用文件中的sql语句
创建sql文件
这样就读取sql文件中的sql语句进行查询了。
也可以将查询结果存储到一个文件里面
在hive窗口中查看hdfs文件系统
dfs -lsr /;
加上r表示迭代查询出所有。
dfs -ls /;
不加r,只查询一级
在hive命令窗口中查看本地文件系统,如查看/opt下面的文件
! ls /;
也可以查看本地文件
! cat /opt/module/datas/student.txt;
也就是说,前面加dfs,就是查看HDFS文件系统,加!,就是查本地系统。
查看在hive中输入的所有历史命令:
先退出hive窗口,再执行:
cat ~/.hivehistory
Hive数据仓库位置配置:
(1) default数据仓库的最原始位置是在hdfs上的:/user/hive/warehouse路径下
(2) 在仓库目录下,没有对默认的数据仓库default创建文件夹,如果某张表属于default数据库,直接在数据仓库下创建一个文件夹
(3) 修改default数据仓库原始位置:将hive-default.xml.template如下配置信息拷贝到hive-site.xml文件中
这个是hive-default.xml.template中的内容,默认路径
显示当前数据库,以及查询表的头信息配置:
在hive-site.xml文件中添加如下配置信息,就可以实现显示当前数据库,以及查询表的表头信息配置。
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
未配置之前:
配置后:
Hive运行日志信息配置:
(1) hive的log默认存放在/tmp/hunter/hive.log目录下(当前用户名下)
(2) 修改hive的log存放日志到/opt/module/hive/logs
步骤:
(1) 修改/opt/module/hive/conf/hive-log4j.properties.template文件名称为hive-log4j.properties
(2) 在hive-log4j.properties文件中修改log存放位置
再次运行hive,退出后查看,已经在我们配置的日志目录下面显示hive日志。
参数配置方式
查看当前所有的配置信息hive>set;
附加
终端中hive命令不能删除不能修改解决办法
点击secure CRT选项/会话选项,选择终端/仿真,将终端改为linux即可
以上是关于从零配置hive+案例练习+常见问题解决方法的主要内容,如果未能解决你的问题,请参考以下文章
Spark on Yarn with Hive实战案例与常见问题解决
1.30.Flink SQL案例将Kafka数据写入hive