Hive远程模式搭建

基于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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值