从零配置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&amp;autoReconnect=true&amp;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+案例练习+常见问题解决方法的主要内容,如果未能解决你的问题,请参考以下文章

从零配置hive+案例练习+常见问题解决方法

Spark on Yarn with Hive实战案例与常见问题解决

hive自定义UDTF函数,步骤讲解

线上 hive on spark 作业执行超时问题排查案例分享

线上 hive on spark 作业执行超时问题排查案例分享

Hive 临时表自动删除