实时数仓、基于Flink1.11的SQL构建实时数仓 之hive集群
目录
实时数仓、基于Flink1.11的SQL构建实时数仓 之hive集群
一.准备环境
jdk1.8
hadoop环境
zookeeper环境
mysql
集群规划
192.168.137.121 m1
192.168.137.122 m2
详见:实时数仓、基于Flink1.11的SQL构建实时数仓 环境说明
二.下载安装包及配置
2.1 下载:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.2/
安装包:apache-hive-3.1.2-bin.tar.gz
上传到 其中一个主节点 m1:/opt/hadoop/
解压:tar -zvxf apache-hive-3.1.2-bin.tar.gz
2.2 配置环境变量 /etc/profile 两个节点m1 m2 都要配置
export HIVE_HOME=/opt/hadoop/apache-hive-3.1.2-bin
export PATH=$PATH:$HIVE_HOME/bin
2.3 修改配置文件:hive-env.sh
从template模板中复制配置文件:cp hive-env.sh.template hive-env.sh
HADOOP_HOME=/opt/hadoop/hadoop-3.2.1
export HIVE_CONF_DIR=/opt/hadoop/apache-hive-3.1.2-bin/conf
export HIVE_AUX_JARS_PATH=/opt/hadoop/apache-hive-3.1.2-bin/lib
2.4 修改配置文件 hive-site.xml hive-default.xml
从 hive-default.xml.template 模板中复制配置文件:cp hive-default.xml.template hive-default.xml
创建 hive-default.xml 配置文件 下文完全拷贝
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<!-- 查询数据时 显示出列的名字 -->
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<!-- 在命令行中显示当前所使用的数据库 -->
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<!-- 默认数据仓库存储的位置,该位置为HDFS上的路径 -->
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!-- 8.x -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://dbmaster:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false</value>
</property>
<!-- 8.x -->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value> <!-- 注意修改数据库用户名密码 -->
</property>
<!-- hiveserver2服务的端口号以及绑定的主机名 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>hive.zookeeper.quorum</name>
<value> s1:2181,s2:2181,s3:2181</value>
</property>
<property>
<name>hive.server2.support.dynamic.service.discovery</name>
<value>true</value>
</property>
<property>
<name>hive.server2.zookeeper.namespace</name>
<value>hiveserver2_zk</value>
</property>
<property>
<name>hive.zookeeper.client.port</name>
<value>2181</value>
</property>
</configuration>
2.5 初始化: 在bin目录下执行
schematool -dbType mysql -initSchema
高可用配置成功 在zookeeper中注册 hiveserver2 如下:
高可用连接地址: !connect jdbc:hive2://s1:2181,s2:2181,s3:2181/default;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk
注:hiveserver2_zk 是 hive.server2.zookeeper.namespace的配置 default 是登陆数据库名称。
2.6 其它配置文件
根据需要都可以从template 复制而来 去掉template 后缀即可。
2.7 上传mysql驱动包到 lib
mysql-connector-java-5.1.41.jar
2.8 在bin目录下创建启动脚本
[root@m1 bin]# cat start_hiveserver2.sh
#!/usr/bin/env bash
cd $HIVE_HOME/bin
nohup hiveserver2 start &
nohup hive --service metastore &
2.9 配置第二节点m2
注意:检查hive的 guava版本是否跟你的hadoop 的guava 版本匹配,否则会报错:
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)
可以从hadoop的lib目录下拷贝过来:cp /opt/hadoop/hadoop-3.2.1/share/hadoop/common/lib/guava-27.0-jre.jar ./
scp -r /opt/hadoop/apache-hive-3.1.2-bin m2:/opt/hadoop/
2.10 启动hive集群 m1 m2 都执行
执行:start_hiveserver2.sh
测试连接hive
beeline> !connect jdbc:hive2://m1:10000
Connecting to jdbc:hive2://m1:10000
Enter username for jdbc:hive2://m1:10000:
Enter password for jdbc:hive2://m1:10000:
20/12/22 16:31:46 [main]: WARN jdbc.HiveConnection: Failed to connect to m1:10000
Error: Could not open client transport with JDBC Uri: jdbc:hive2://m1:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous (state=08S01,code=0)
登陆错误:错误引用链接
Error: User: root is not allowed to impersonate root
Stack trace for the error was (for debug purposes):
--------------------------------------
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: xx is not allowed to impersonate xx
Hadoop配置文件 core-site.xml错误
<!-- Oozie Server的Hostname -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!-- 允许被Oozie代理的用户组 -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
解决方案:将root改为xx。
PS:集群所有节点都需要配置,配置完成后需要重启节点,否则不生效。
至此hive ha集群已经搭建完成
三. hive客户端
在所有flink节点配置hive客户端。