1、创建临时目录
[root@bigdata01 ~]# cd /opt/installs/hive/
[root@bigdata01 hive]# mkdir iotmp
[root@bigdata01 hive]# chmod 777 iotmp
2、前期准备工作
hive-site.xml
<!--Hive工作的本地临时存储空间-->
<property>
<name>hive.exec.local.scratchdir</name>
<value>/opt/installs/hive/iotmp/root</value>
</property>
<!--如果启用了日志功能,则存储操作日志的顶级目录-->
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/opt/installs/hive/iotmp/root/operation_logs</value>
</property>
<!--Hive运行时结构化日志文件的位置-->
<property>
<name>hive.querylog.location</name>
<value>/opt/installs/hive/iotmp/root</value>
</property>
<!--用于在远程文件系统中添加资源的临时本地目录-->
<property>
<name>hive.downloaded.resources.dir</name>
<value>/opt/installs/hive/iotmp/${hive.session.id}_resources</value>
</property>
hive.downloaded.resources.dir:
在 hdfs 上下载的一些资源会被存放在这个目录下,hive 一定要小写,否则报:
cause: java.net.URISyntaxException: Illegal character in path at index 26: /opt/installs/hive/iotmp/${Hive.session.id}_resources/json-serde-1.3.8-jar-with-dependencies.jar
修改 core-site.xml【hadoop】的
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 不开启权限检查 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
修改集群的三个core-site.xml,记得修改一个,同步一下,并且重启hdfs
xsync.sh core-site.xml
stop-dfs.sh
start-dfs.sh
3、开始配置远程服务(两个)
1)配置hiveserver2服务
修改hive-site.xml
<property>
<name>hive.server2.thrift.bind.host</name>
<value>bigdata01</value>
<description>Bind host on which to run the HiveServer2 Thrift service.</description>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
<description>Port number of HiveServer2 Thrift interface when hive.server2.transport.mode is 'binary'.</description>
</property>
可以启动:
1. 该服务端口号默认是10000
2. 可以单独启动此服务进程,供远程客户端连接;此服务内置metastore服务。
3. 启动方式:
方法1:
直接调用hiveserver2。会进入监听状态不退出。
方法2:
hive --service hiveserver2 & # 进入后台启动
方法3:
nohup hive --service hiveserver2 >/dev/null 2>&1 & #信息送入黑洞。
演示第一种启动方式:hiveserver2
可以使用beeline进行测试:
连接方式:
方式1:
step1. beeline 回车
step2. !connect jdbc:hive2://bigdata01:10000 回车
step3. 输入用户名 回车 数据库用户名
step4. 输入密码 回车 此处的密码是数据库密码
方法2(直连):
beeline -u jdbc:hive2://bigdata01:10000 -n 用户名
解析:
hive2,是Hive的协议名称
ip: Hiveserver2服务所在的主机IP。
10000,是Hiveserver2的端口号
退出:
Ctrl+ C 可以退出客户端
2) metastore 服务
metastore服务意义:为别人连接mysql元数据提供服务的。
警告:
假如 hive 直接进入的,操作了数据库,其实底层已经帮助创建了一个metastore服务器,可能叫ms01
通过hiveserver2 运行的命令,默认底层帮你创建了一个metastore服务器,可能叫ms02,假如有很多人连接我的mysql,就会有很多个metastore,非常的占用资源。
解决方案就是:配置一个专门的metastore,只有它可以代理mysql服务,别人必须经过它跟mysql进行交互。这样解决内存。
警告:只要配置了metastore以后,必须启动,否则报错!
修改hive-site.xml
修改hive-site.xml的配置
注意:想要连接metastore服务的客户端必须配置如下属性和属性值
<property>
<name>hive.metastore.uris</name>
<value>thrift://bigdata01:9083</value>
</property>
解析:thrift:是协议名称
ip为metastore服务所在的主机ip地址
9083是默认端口号
启动方式:
方法1:
hive --service metastore &
方法2:
nohup hive --service metastore 2>&1 >/dev/null & #信息送入黑洞。
解析:2>&1 >/dev/null 意思就是把错误输出2重定向到标准输出1,也就是屏幕,标准输出进了"黑洞",也就是标准输出进了黑洞,错误输出打印到屏幕。
Linux系统预留可三个文件描述符:0、1和2,他们的意义如下所示:
0------标准输入(stdin)-- System.in
1------标准输出(stdout)--System.out
2------标准错误(stderr) --System.err
测试:
没有启动metastore 服务器之前,hive进入报错!
hive> show databases;
FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
启动之后,直接测试,发现可以使用。
hive> show databases;
OK
default
Time taken: 1.211 seconds, Fetched: 1 row(s)
4、使用客户端连接工具连接hive
常见的Hive连接工具有:IDEA、DBeaver、DataGrap
推荐大家使用DataGrap
请检查你的 metastore和hiveserver2是否启动
ps -ef|grep metastore
ps -ef|grep hiveserver2
假如没有启动:
nohup hive --service metastore 2>&1 >/dev/null &
nohup hive --service hiveserver2 2>&1 >/dev/null &
由于没办法看到4个session ID,等一下。
下载驱动包: