Hive3.1.3-安装和部署_hive3.1.3安装
Hive3.1.3-安装和部署
-
- 背景
- 安装前提
- 安装hive3.1.3
-
- 下载MySQL jdbc驱动
- 安装hive3.1.3
-
- 下载解压hive3.1.3 包
- 修改配置文件
- 复制mysql 驱动包
- 配置日志目录
- 启动hive
- 遇到问题
- 最后
背景
去年写了一篇编译ranger2.4.1 文章。有网友说部署ranger2.4.1 后,在对接hive地方老报错。所以一探究竟,为其搭建ranger 2.4.1环境。ranger 2.4.1对接hive ,需要安装hive
安装前提
(1) 安装JDK1.8
(2) 已经安装MySQL,推荐8。
(3) 已经安装Hadoop。推荐3.3.6
安装hive3.1.3
下载MySQL jdbc驱动
打开网址:https://downloads.mysql.com/archives/c-j/
我是centos7.9 ,所以选择el7
使用rpm 命令安装
sudo rpm -ivh --replacepkgs mysql-connector-java-8.0.27-1.el7.noarch.rpm
执行完后,在/usr/share/java,有个文件:mysql-connector-java.jar,后续复制hive lib目录
安装hive3.1.3
下载解压hive3.1.3 包
tar -zxvf /setup/apache-hive-3.1.3-bin.tar.gz -C /optcd /optmv apache-hive-3.1.3-bin hive chown -R hdfs:hdfs hive
使用hdfs用户启动hive ,所以授权/opt/hive目录给hdfs用户
修改配置文件
1./etc/profile
vi /etc/profile
export HADOOP_HOME=/opt/hadoop-3.3.6export HIVE_HOME=/opt/hiveexport PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$HADOOP_HOME/bin
使得/etc/profile生效
source /etc/profile
2.hive-env.sh
cd $HIVE_HOME/confcp hive-env.sh.template hive-env.sh vi hive-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201export HADOOP_HOME=/opt/hadoop-3.3.6export HIVE_CONF_DIR=/opt/hive/conf
3.hive-site.xml
cd $HIVE_HOME/confcp hive-default.xml.template hive-site.xmlvi hive-site.xml
system:java.io.tmpdir</name> /opt/hive/warehouse</value> </property> system:user.name</name> ${user.name}</value> </property> hive.metastore.db.type</name> mysql</value> </property> javax.jdo.option.ConnectionURL</name> jdbc:mysql://127.0.0.1:3306/hive?createDatabaseIfNotExist=true&useSSL=false&allowPublicKeyRetrieval=true</value> </property> javax.jdo.option.ConnectionDriverName</name> com.mysql.cj.jdbc.Driver</value> </property> javax.jdo.option.ConnectionUserName</name> root</value> </property> javax.jdo.option.ConnectionPassword</name> XXX</value> </property> datanucleus.schema.autoCreateAll</name> true</value> </property> hive.metastore.schema.verification</name> false</value> </property> hive.execution.engine</name> mr</value> </property> hive.server2.active.passive.ha.enable</name> true</value> </property></configuration>
因为使用mysql8,这里有两个地方要注意:
1.jdbc url后面加上&allowPublicKeyRetrieval=true
2.jdbc 驱动类名改成:com.mysql.cj.jdbc.Driver
4.修改hdfs目录
# su - hdfs$ hadoop fs -mkdir -p /tmp$ hadoop fs -chmod g+w /tmp$ hadoop fs -mkdir -p /opt/hive/warehouse$ hadoop fs -chmod g+w /opt/hive/warehouse
复制mysql 驱动包
cp /usr/share/java/mysql-connector-java.jar $HIVE_HOME/lib
配置日志目录
配置日志,复制一个模板
cp hive-log4j2.properties.template hive-log4j2.propertiesvi hive-log4j2.propertiesproperty.hive.log.dir = /opt/hive/logs
创建日志目录
mkdir /opt/hive/logs
启动hive
1.启动hive
1.1 初始化hive数据库
schematool -dbType mysql -initSchema
1.2 开启metastore(&表示后台进程)
nohup hive --service metastore &
1.3 启动hiveserver2服务
nohup hive --service hiveserver2 &
1.4 通过命令:jps可以看到有两个RunJar的进程。
1.5 通过如下命令可以看到下面两个端口有监听进程。
ss -nalp | grep 9083 (metastore进程端口)
ss -nalp | grep 10000(hiveserver2进程端口)
2.beeline客户端连接
2.1 默认配置需要使用用户名和密码连接,需要修改hadoop的配置文件core-site.xml命令:
vi $HADOOP_HOME/etc/hadoop/core-site.xml
修改属性如下:
hadoop.proxyuser.hdfs.hosts</name> *</value></property> hadoop.proxyuser.hdfs.groups</name> *</value></property>
原来是hadoop.proxyuser.root.hosts,hadoop.proxyuser.root.groups
分别改成hadoop.proxyuser.hdfs.hosts,hadoop.proxyuser.hdfs.groups
2.2 然后将该配置文件分发到所有节点。
scp $HADOOP_HOME/etc/hadoop/core-site.xml hdfs@slave2:~scp $HADOOP_HOME/etc/hadoop/core-site.xml hdfs@slave3:~scp $HADOOP_HOME/etc/hadoop/core-site.xml hdfs@slave4:~
然后分别切换到slave2,slave3,slave4 三台机器,使用root用户复制
cp /home/hdfs/core-site.xml $HADOOP_HOME/etc/hadoop/core-site.xml
2.3 重启hadoop后,再进行连接
stop-all.sh && start-all.sh
(2)启动beeline,进行连接测试
3.退出hive
通过kill 进程id的方式停止Hive服务。jps | grep RunJar | awk \'{print $1}\' | xargs kill -9回车后会输出如下:[1]- 已杀死 nohup hive --service metastore[2]+ 已杀死 nohup hive --service hiveserver2
遇到问题
- 启动hive失败,报下面错误
Caused by: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8
at [row,col,system-id]: [3223,96,“file:/opt/hive/conf/hive-site.xml”]
vim +3223 /opt/hive/conf/hive-site.xml
这是xml有非法字符,使用vim 定位到3223行删除即可。需要重启hive
2.beeline 连接失败,报下面错误
hadoop01 (state=08S01,code=0)
beeline> !connect jdbc:hive2://master:10000
Connecting to jdbc:hive2://master:10000
Enter username for jdbc:hive2://master:10000:
Enter password for jdbc:hive2://master:10000:
25/06/11 15:48:24 [main]: WARN jdbc.HiveConnection: Failed to connect to master:10000
Error: Could not open client transport with JDBC Uri: jdbc:hive2://master:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: hdfs is not allowed to impersonate anonymous (state=08S01,code=0)
这个错误表明 HiveServer2 连接失败,原因是 Hadoop 的 用户代理(Impersonation)权限 没有正确配置,导致 hdfs 用户无法以 anonymous(匿名)身份访问 Hive。
把$HADOOP_HOME/etc/hadoop/core-site.xml 中的hadoop.proxyuser.root.hosts,hadoop.proxyuser.root.groups
分别改成hadoop.proxyuser.hdfs.hosts,hadoop.proxyuser.hdfs.groups 即可
最后
hive单机部署,就写到这里。如需沟通:lita2lz