介绍
hive是在Hadoop中非常重要的角色。hive在1.2.0之前可以将编写的SQL翻译为MapReduce程序,在2.0版本后将程序翻译为Spark程序。安装前提
- Hadoop环境(hive不存储实际的业务数据,数据存储在HDFS上)
- mysql(此处hive中元数据存储在mysql)
Hadoop环境
不在赘述,可以参考博文: Hadoop之Hadoop安装
mysql环境准备
- 此处安装mysql版本为5.7
- 允许远程登录,不在赘述,可以参考博文: mysql允许root远程登录
注意: 如果正式环境,在了解真正的风险前,还请不要允许root远程登录。 - 创建数据库
mysql> CREATE DATABASE `hive_db` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_bin';
安装hive
与linux下其他软件一样,下载,解压、配置。
如果不清楚兼容那个版本的Hadoop建议根据CDH提供的版本进行安装。如果资源足够使用,使用CDH安装和管理Hadoop更为简易快捷。
CDH官方版本配置
hive配置
hive-site.xml配置
[gugu@master ~]$ vim ~/application/apache-hive-2.3.6-bin/conf/hive-site.xml
添加以下内容
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive_db?characterEncoding=UTF-8&useSSL=false</value>
<!-- 指定元数据数据库jdbc链接,注意原来链接地址上的&要修改成&否者会提示&后面必须要“;”的错误 -->
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<!-- 初始化的时候设置检查版本,否者有可能初始化错误 -->
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<!-- 指定元数据数据库驱动类型 -->
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<!-- 元数据数据库用户名 -->
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<!-- 元数据数据库密码 -->
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<!-- hive在HDFS存储路径 -->
</property>
</configuration>
mysql驱动复制
在hive-site.xml中指定了驱动是mysql,我们需要将mysql的驱动复制到hive的lib下,hive才能连接mysql
[gugu@master ~]$ cp file/mysql-connector-java-5.1.47.jar ~/application/apache-hive-2.3.6-bin/lib/
环境变量添加
[gugu@master ~]$ vim .bash_profile
添加下面内容
# hive
export HIVE_HOME=/home/gugu/application/apache-hive-2.3.6-bin
export PATH=$PATH:$HIVE_HOME/bin
启动hive
hive的启动可以包含以下方式
- hive直接以交互式启动
[gugu@master ~]$ hive
- 将hive启动为一个服务
可以在任意一台机器上使用beeline客户端连接hive服务,进行交互式查询
# 启动元数据服务
[gugu@master ~] nohup hive --service metastore >> /home/gugu/application/apache-hive-2.3.6-bin/log/metastore/metastore.log 2>&1 &
# 启动hiveserver2
[gugu@master ~] nohup hive --service hiveserver2 >> /home/gugu/application/apache-hive-2.3.6-bin/log/hiveserver/hiveserver.log 2>&1 &
上面命令的介绍
"nohup"可以防止终端的session关闭时,服务退出
“>>” 表示输出重定向,且以追加的方式,后面的路径是标准输出的输出路径,
“2>&1” 2表示的是错误输出,&1指标准输出,合起来就是将错误输出和标准输出到同一个文件
“&”最后面的指这条命令运行在后台
linux输出输入扩展
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stdout | 2 | 错误输出 |
遇见问题
- 启动时因为xml中&转义报错
错误信息如下:
[Fatal Error] hive-site.xml:10:80: The reference to entity "useSSL" must end with the ';' delimiter.
Exception in thread "main" java.lang.RuntimeException: org.xml.sax.SAXParseException; systemId: file:/home/gugu/application/apache-hive-2.3.6-bin/conf/hive-site.xml; lineNumber: 10; columnNumber: 80; The reference to entity "useSSL" must end with the ';' delimiter.
出现原因:xml中&需要转义
解决方法:将hive-site.xml中的"&“改成”&"
- 启动时校验版本报错
错误如下:
MetaException(message:Version information not found in metastore. )
at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:83)
at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:92)
at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:6896)
at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:6891)
at org.apache.hadoop.hive.metastore.HiveMetaStore.startMetaStore(HiveMetaStore.java:7149)
at org.apache.hadoop.hive.metastore.HiveMetaStore.main(HiveMetaStore.java:7076)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:239)
at org.apache.hadoop.util.RunJar.main(RunJar.java:153)
解决方法:
在hive-site.xml中添加
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<!-- 初始化的时候设置检查版本,否者有可能初始化错误 -->
</property>