大数据全系列 教程
1869个小节阅读:467.2k
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
##2.6 远程服务模式安装
思考:hive是如何连接到hdfs的?
答案:通过环境变量。
规划:node3为服务器端 node4为客户端
具体安装配置步骤:
从node2上将/opt/hive-3.1.2拷贝到node3和node4上
xxxxxxxxxx
[root@node2 ~]# scp -r /opt/hive-3.1.2/ node3:/opt
[root@node2 ~]# scp -r /opt/hive-3.1.2/ node4:/opt
配置node3上hive的环境变量:
xxxxxxxxxx
[root@node3 conf]# vim /etc/profile
#在文件的最下位置添加如下内容
# hive环境变量配置
export HIVE_HOME=/opt/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin
[root@node3 conf]# source /etc/profile
配置node4上hive的环境变量:
xxxxxxxxxx
[root@node4 conf]# vim /etc/profile
#在文件的最下位置添加如下内容
# hive环境变量配置
export HIVE_HOME=/opt/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin
[root@node3 conf]# source /etc/profile
修改node3上的hive_site.xml文件
xxxxxxxxxx
<configuration>
<!-- jdbc连接的URL设置 将hive改为hive_remote-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hive_remote?useSSL=false</value>
</property>
<!-- jdbc连接的Driver类设置-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- 指定jdbc连接的username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- 指定jdbc连接mysql的password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<!-- Hive默认在HDFS的工作目录 将hive改为hive_remote -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<!-- Hive元数据存储的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!-- 元数据存储授权 -->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
</configuration>
在node1的mysql中创建一个数据库实例:hive_remote
xxxxxxxxxx
[root@node1 ~]# mysql -uroot -p123456
mysql> create database hive_remote;
Query OK, 1 row affected (0.00 sec)
mysql> use hive_remote;
Database changed
mysql> show tables;
Empty set (0.00 sec) # 神马表都没有,根本没有hive的元数据
mysql> quit;
Bye
在node3上初始化hive的元数据到mysql数据库的hive_remote实例下
xxxxxxxxxx
[root@node2 conf]# schematool -initSchema -dbType mysql -verbose
在node1的mysql数据库中查看hive_remote实例下表,会发现多了74张表。到目前位置这个和直连数据的方式是一样,hive的服务器和客户端都在node3上,没有启动Metastore或hiveserver2,通过jdbc也无法访问。
在node3上查看被占用的端口号:
xxxxxxxxxx
[root@node3 conf]# netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8042 0.0.0.0:* LISTEN 15641/java
经过观察发现9083端口没有被占用。
在node3上启动metastore服务
xxxxxxxxxx
[root@node3 ~]# hive --service metastore
2021-11-08 22:43:50: Starting Hive Metastore Server
该命令为阻塞命令,如上所示执行命令后无法继续输入命令了。
复制一个node3连接的窗口
xxxxxxxxxx
[root@node3 ~]# netstat -nlpt
tcp6 0 0 :::9083 :::* LISTEN 22358/java
9083端口便被metastore占用了。
如果在9步骤不需要窗口的命令被阻塞,也可以通过如下方式:
xxxxxxxxxx
[root@node3 ~]# hive --service metastore &
[1] 23017
[root@node3 ~]# 2021-11-08 22:50:08: Starting Hive Metastore Server
# 查看是否有hive的服务进程
[root@node3 ~]# ps aux|grep hive
root 23017 126 15.8 1986692 157732 pts/0 Sl 22:50 0:16 /usr/java/default/bin/java -Dproc_jar -Dproc_metastore -Dlog4j.configurationFile=hive-log4j2.properties -Djava.util.logging.config.file=/opt/hive-3.1.2/conf/parquet-logging.properties -Dyarn.log.dir=/opt/hadoop-3.1.3/logs -Dyarn.log.file=hadoop.log -Dyarn.home.dir=/opt/hadoop-3.1.3 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/hadoop-3.1.3/lib/native -Xmx256m -Dhadoop.log.dir=/opt/hadoop-3.1.3/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/hadoop-3.1.3 -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,console -Dhadoop.policy.file=hadoop-policy.xml -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /opt/hive-3.1.2/lib/hive-metastore-3.1.2.jar org.apache.hadoop.hive.metastore.HiveMetaStore
这样操作的话,步骤10就不再需要新复制一个xshell连接窗口了。
修改node4上的hive-site.xml配置文件:
xxxxxxxxxx
[root@node4 ~]# cd /opt/hive-3.1.2/conf/
[root@node4 conf]# vim hive-site.xml
文件中配置如下:
xxxxxxxxxx
<configuration>
<!-- Hive默认在HDFS的工作目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<!-- 指定hive服务器端连接地址 -->
<property>
<name>metastore.thrift.uris</name>
<value>thrift://node3:9083</value>
</property>
<!-- Hive元数据存储的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!-- 元数据存储授权 -->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
</configuration>
node4上hive客户端启动hive:
xxxxxxxxxx
[root@node4 conf]# hive
hive>