前言
hive提供了三种操作方式,一种是使用hive命令行方式进行操作;一种是使用java的api方式进行操作;还有一种是使用http的rest api进行操作。这里,我们只讲前两种的配置和实现。
在这之前,我们先了解一下hive的客户端,hive提供了两种客户端,一种是胖客户端,一种是瘦客户端。胖客户端显得比较臃肿,它实现的效果是直接启动服务端和客户端集成于一身,我们在操作控制台执行hive
命令会启动hive服务,然后直接显示hive>
命令操作行。可见,这种集成在一起的效果无法满足多台服务器的调用,只能在本机操作,也就是说无法支持并发,而且安全性低,客户端一旦断开,服务端也将失效,客户端与服务端粘合度太高。所以就出现了瘦客户端,瘦客户端支持多台服务器进行并非操作,而且客户端与服务端是分离开来的,显得比较轻量,所以就有肥瘦之分。
hive集群搭建
参考 hive集群安装与搭建
如果hive跑起来了,再继续下面步骤~
文件配置
1.配置hive-site.xml
切换到hive的配置目录下,打开hive-site.xml文件
cd /usr/local/hive/conf
vi hive-site.xml
如图:
添加以下配置
<property>
<name>hive.server2.authentication</name>
<value>NONE</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop1</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
<description>TCP port number to listen on, default 10000</description>
</property>
<property>
<name>hive.server2.thrift.http.port</name>
<value>10001</value>
</property>
<property>
<name>hive.server2.thrift.client.user</name>
<value>root</value>
<description>Username to use against thrift client</description>
</property>
<property>
<name>hive.server2.thrift.client.password</name>
<value>root</value>
<description>Password to use against thrift client</description>
</property>
hive文件配置说明
-
hive.server2.authentication 配置hive用户认证,设置为NONE则跳过认证
-
hive.server2.thrift.bind.host 配置thrift服务绑定的ip,需要在hadoop1启动hive服务,thrift服务才能与hadoop1建立连接,thrift主要用来实现hiveserver2的瘦客户端
-
hive.server2.thrift.port 配置thrift服务绑定的端口,主要用来建立与thrift服务连接
-
hive.server2.thrift.http.port 配置thrift服务绑定的http端口,可以通过http执行hive操作
-
hive.server2.thrift.client.user 配置thrift服务的验证账户
-
hive.server2.thrift.client.password 配置thrift服务的验证密码
原理
瘦客户端提供了一种方式,通过thrift服务去连接hive服务端,实现hive的操作,而客户端通过调用thrift服务,执行操作命令,实现了客户端与服务端的交互。
2. 配置core-site.xml
添加以下配置
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
如图:
hadoop的文件配置说明
- hadoop.proxyuser.root.hosts 配置hadoop的代理用户,主要是用于让hiveserver2客户端访问及操作hadoop文件具备权限
- hadoop.proxyuser.root.groups 配置hadoop的代理用户组,主要是用于让hiveserver2客户端访问及操作hadoop文件具备权限
文件说明
如果不清楚文件的具体位置,请浏览hadoop集群安装与搭建
3.分发文件
上面两个步骤都在一台机器上配置好之后,远程分发文件到其他机器上。
我这里有4台机器,所以分发到另外三台,命令如下:
分发hive文件:
scp -r /usr/local/hive/conf/hive-site.xmt hadoop2:/usr/local/hive/conf/
scp -r /usr/local/hive/conf/hive-site.xml hadoop3:/usr/local/hive/conf/
scp -r /usr/local/hive/conf/hive-site.xml hadoop4:/usr/local/hive/conf/
分发hadoop文件:
scp -r /usr/local/hadoop/etc/hadoop/core-site.xml hadoop2:/usr/local/hadoop/etc/hadoop
scp -r /usr/local/hadoop/etc/hadoop/core-site.xml hadoop3:/usr/local/hadoop/etc/hadoop
scp -r /usr/local/hadoop/etc/hadoop/core-site.xml hadoop4:/usr/local/hadoop/etc/hadoop
4.启动hadoop和hive服务
-
在namenode节点的hadoop1上启动hadoop
start-dfs.sh ssh hadoop2 //远程到hadoop2上,启动yarn,文件配置hadoop2作为任务调度管理 start-yarn.sh
-
启动存放hive元数据的mysql
/etc/init.d/mysqld start
注:我这里是直接进入启动项目录启动的,可以使用其他命令启动,如:
service mysql start
-
在hadoop1上启动hiveserver2服务
瘦客户端服务的启动,这里有两种启动方式,一种是前台启动,即控制台一直打印日志,且不能关掉控制台,关掉即服务挂掉
cd /usr/local/hive/bin
./hiveserver2
另一种是后台启动的方式,后台启动控制台可以关闭,且在进程中运行,执行 jps
,可以看到hive的进程
cd /usr/local/hive/bin
nohup hive --service hiveserver2 &
如图:
等2分钟左右,我们再去启动客户端,这样避免做多次连接操作而连接不上,原因是服务端的程序还没执行完成
4.启动瘦客户端beeline:
cd /usr/local/hive/bin
beeline
!connect jdbc:hive2://hadoop1:10000
命令说明:
- 执行beeline,启动了thirft服务,通过thirft的jdbc命令连接hive。
- hadoop1是启动hive服务的主机名,10000则是hive-site.xml文件配置的端口。
- 执行上面命令之后,需要执行hive-site.xml文件上配置的验证账户和密码,即root,回车之后,就登陆进hive了
客户端界面