基于Hadoop2.8.5的数据仓库Hive远程模式搭建
远程模式分为客户端和服务器端两部分,服务器的配置与本地模式相同,客户端需要单独配置。远程模式是将Metastore分离出来,作为一个单独的进程,并且可以部署多个,运行与不同的计算机上。这样的模式,将数据库层完全置于防火墙后,使客户端访问时不需要数据库凭据(用户名和密码),提高了可管理性和安全性。
将搭建好的本地模式centoshadoop1节点作为Hive的服务器端,centoshadoop2节点作为Hive的客户端,在本地模式基础上继续进行远程模式的配置。
安装Hive客户端
在centoshadoop1节点中执行以下命令,将Hive安装文件复制到centoshadoop2节点:
https://blog.csdn.net/u014635374/article/details/104996985 本地模式参考该博客
scp -r hive/ hadoop@centoshadoop2:~/
免密登录到centoshadoop2机器
ssh centoshadoop2
vi .bash_profile
# hive配置
export HIVE_HOME=/home/hadoop/hive/apache-hive-2.3.6-bin
export PATH=$PATH:$HIVE_HOME/bin
source .bash_profile
修改centoshadoop2上的Hive配置文件hive-site.xml,清除之前的配置属性,添加下面的配置。
完整配置如下:
<!-- warehouse目录,即hive在HDFS上的存储目录,可使用默认值 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/home/hadoop/hive/data</value>
</property>
<!--是否启用本地服务器连接Hive,false为非本地模式,即远程模式 -->
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<!--Hive服务器端Metastore Server连接地址,默认监听端口9083 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.227.140:9083</value> <!-- 之前这里出问题,忘记两个反斜杠,结果一直连接不上服务器,导致show databases;一直报错-->
</property>
启动Metastore Server
在centoshadoop1节点中执行以下命令,启动Metastore Server 并使其在后台启动
[hadoop@centoshadoop1 ~]$ hive --service metastore &
控制台输出的日志部分信息如下:
2020-03-20 20:52:24: Starting Hive Metastore Server
启动成功后,在centoshadoop1节点中执行jps命名查看启动的java进程,除了Hadoop的进程外还多了一个名为RunJar的进程,该进程是Metastore Server的独立进程.
11024 DFSZKFailoverController
14435 NameNode
14899 ResourceManager
34084 Jps
14773 JournalNode
33979 RunJar
14556 DataNode
15021 NodeManager
若此时在centoshadoop1节点中执行hive命令,启动Hive命令模式,则会再次产生一个RunJar进程,该进程为Hive的服务进程(也是Hive CLI的服务进程)
访问Hive
在centoshadoop2节点中进入Hive安装目录执行以下命令,启动远程Hive命令行模式:
bin/hive
测试Hive远程访问
在centoshadoop01节点(Hive服务器端)中进入Hive命令行模式,执行一些命令,创建表student(Hive默认把表创建在default数据库中):
hive>create table student(id INT,name STRING);
Ok
然后在centoshadoop2节点(Hive客户端)中执行以下命令,查看Hive中的所有表:
hive>show tables;
Ok
student
注意:(1)在Hive内嵌模式与本地模式中,当启动Hive CLI时,Hive会在后台自动启动Hive服务与Metastore Server,且这两个服务运行于同一个进程中。Hive远程模式需要手动启动Metastore Server独立进程。
(2)无论是内嵌模式还是本地模式和远程模式,当启动Hive CLI时都需要注意YARN集群ResourceManager的位置,因为大部分HiveQL需要转化为MapReduce任务在YARN中运行,而MapReduce任务首先需要提交到ResourceManager中。由于执行HiveQL时,默认会寻找本地的ResourceManager,因此需要在ResourceManager所在的节点中启动Hive CLI。
向student表中插入三条数据
hive> insert into student(id,name) values (12,'laogao000');
hive> insert into student(id,name) values (13,'laogao000');
hive> insert into student(id,name) values (14,'laogao002');
hive> select * from student;
OK
1201 zhangsan
1321 yanghong
12 laogao000
hive> select * from student where student.id = 12 ;
OK
12 laogao000
5. Hive CLI中显示数据库名称及列名
Hive CLI中默认不显示当前所操作的数据库名称以及结果数据的列名,可以在配置文件hive-site.xml中添加如下属性,使其显示在CLI中,从而看起来更加直观。
<!-- 在hive提示符中包含当前数据库-->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<!-- 在查询输出中打印列的名称-->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
修改完后重新启动Hive CLI,可以看到,在CLI提示符中显示当前数据库的名称,且查询结果中显示出了一列所在的表名与列名。
hive (default)> select * from student;
OK
student.id student.name
1201 zhangsan
1321 yanghong
12 laogao000