赞
踩
目录
Hive是一个构建于Hadoop之上的一个数据仓库工具,其底层存储使用的HDFS,能够将结构化的数据映射成表,并提供SQL能力,这些SQL可以转化成MapReduce执行,用户只用写SQL就能够分析大规模数据,大大简化了MapReduce的使用难度,减少了开发周期。
Hive一般只用部署Metastore和HiveServer2进程,Metastore底层依赖关系型数据作为元数据库(一般选择MySQL或者PostgreSQL),本次部署采用Apache Hive 3.1.2版本,默认以root用户进行操作,将Hive的两个进程部署在master机器上。
在master机器上下载或者上传Apache Hive 3.1.2安装包,解压至合适的目录,将解压后得到的目录作为HIVE_HOME目录。
修改${HIVE_HOME}/conf/hive-env.sh文件,修改内容如下:
- # 设置Hive使用的Java
- export JAVA_HOME=/opt/jdk-8u301
-
- # 设置Hive依赖的Hadoop安装目录
- export HADOOP_HOME=/opt/hadoop-3.2.2
-
- # Hive Metastore服务的JVM参数配置
- if [ "$SERVICE" = "metastore" ]; then
- if [ -z "$DEBUG" ]; then
- export HIVE_METASTORE_HADOOP_OPTS=" -XX:+PrintCommandLineFlags -Xms2g -Xmx2g -XX:+UseParNewGC -XX:-UseGCOverheadLimit -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=128M -Xloggc:/data/hive/logs/gc-metastore.log"
- else
- export HIVE_METASTORE_HADOOP_OPTS=" -XX:+PrintCommandLineFlags -Xms2g -Xmx2g -XX:+UseParNewGC -XX:-UseGCOverheadLimit -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=128M -Xloggc:/data/hive/logs/gc-metastore.log"
- fi
- export HADOOP_CLIENT_OPTS=" -Xmx2g -Xss512k $HADOOP_CLIENT_OPTS"
- fi
-
- # Hive HiveServer2服务的JVM参数配置
- if [ "$SERVICE" = "hiveserver2" ]; then
- if [ -z "$DEBUG" ]; then
- export HIVE_SERVER2_HADOOP_OPTS="$HADOOP_OPTS -XX:+PrintCommandLineFlags -Xms2g -Xmx2g -XX:+UseParNewGC -XX:-UseGCOverheadLimit -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=128M -Xloggc:/data/hive/logs/gc-hiveserver2.log"
- else
- export HIVE_SERVER2_HADOOPO_PTS="$HADOOP_OPTS -XX:+PrintCommandLineFlags -Xms2g -Xmx2g -XX:+UseParNewGC -XX:-UseGCOverheadLimit -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=128M -Xloggc:/data/hive/logs/gc-hiveserver2.log"
- fi
- export HADOOP_CLIENT_OPTS=" -Xmx2g -Xss512k $HADOOP_CLIENT_OPTS"
- fi
修改${HIVE_HOME}/conf/hive-site.xml文件,修改内容如下:
- <configuration>
- <property>
- <name>hive.metastore.uris</name>
- <value>thrift://master:9083</value>
- <description>Hive元数据服务uri配置</description>
- </property>
- <property>
- <name>hive.server2.thrift.port</name>
- <value>10000</value>
- <description>Hive thrift服务端口配置</description>
- </property>
- <property>
- <name>hive.server2.thrift.bind.host</name>
- <value>master</value>
- <description>Hive thrift服务绑定机器配置</description>
- </property>
-
- <property>
- <name>hive.exec.scratchdir</name>
- <value>/hive/tmp</value>
- <description>Hive临时文件目录配置,HDFS目录</description>
- </property>
- <property>
- <name>hive.metastore.warehouse.dir</name>
- <value>/hive/data</value>
- <description>Hive数据存储目录配置,HDFS目录</description>
- </property>
- <property>
- <name>hive.querylog.location</name>
- <value>/data/hive/logs</value>
- <description>Hive查询日志目录,本地目录</description>
- </property>
-
- <property>
- <name>javax.jdo.option.ConnectionURL</name>
- <value>jdbc:mysql://master:3306/hivemeta?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false</value>
- <description>Hive元数据库连接串</description>
- </property>
- <property>
- <name>javax.jdo.option.ConnectionDriverName</name>
- <value>com.mysql.cj.jdbc.Driver</value>
- <description>Hive元数据库驱动类</description>
- </property>
- <property>
- <name>javax.jdo.option.ConnectionUserName</name>
- <value>root</value>
- <description>Hive元数据库用户名</description>
- </property>
- <property>
- <name>javax.jdo.option.ConnectionPassword</name>
- <value>123456</value>
- <description>Hive元数据库用户密码</description>
- </property>
- </configuration>
首次安装部署Hive时需要进行元数据库的初始化操作,命令如下:
- # 将MySQL驱动jar文件加入${HIVE_HOME}/lib目录
-
- # 拷贝或软连接${HADOOP_HOME}/etc/hadoop目录下的core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml到${HIVE_HOME}/conf目录下
- # 推荐使用软连接的方式
-
- # 在${HIVE_HOME}/bin目录下执行以下命令
- ./schematool -dbType mysql -initSchema
执行以上命令时,可能会遇到因为Hive和Hadoop使用的guava包不兼容导致初始化失败,异常摘要如下所示:
- Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
-
- # 解决方法
- # 备份${HIVE_HOME}/lib目录下的guava包
- # 拷贝${HADOOP_HOME}/share/hadoop/common/lib目录下的guava包到${HIVE_HOME}/lib目录下
- # 重新执行初始化命令
在master机器上修改/etc/profile文件,追加如下内容:
- export HIVE_HOME=/opt/hive-3.1.2
- export PATH=${HIVE_HOME}/bin:$PATH
-
- # 保存退出后,执行以下命令使环境变量生效
- source /etc/profile
完成元数据库初始化之后,可以启动并简单测试Hive,命令如下:
- # 后台启动Metastore进程
- # 该命令同时指定了Metastore进程的日志文件
- nohup hive --service metastore >> /data/hive/log/metastore.log 2>&1 &
-
- # 后台启动HiveServer2进程
- # 该命令同时指定了HiveServer2进程的日志文件
- nohup hive --service hiveserver2 >> /data/hive/log/hiveserver2.log 2>&1 &
-
- # 上面两个命令所指定的日志文件不会自动回滚,不能删除或重命名日志文件
- # 目前我是通过定时脚本,定期清空日志文件的内容
- # 希望有大佬可以指点一下,该如何去配置Metastore和HiveServer2的日志文件
-
-
-
- # 推荐使用${HIVE_HOME}/bin/beeline工具连接Hive
- # beeline连接上Hive之后,就可以像使用MySQL一样使用Hive了,大部分命令都兼容
- beeline -u jdbc:hive2://master:10000 -n root
-
- # 退出beeline
- !quit
在使用beeline连接Hive时可能会出现报错,异常摘要信息如下:
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: root is not allowed to impersonate anonymous (state=08S01,code=0)
需要在Hadoop的core-site.xml中加入如下内容:
- <property>
- <name>hadoop.proxyuser.root.hosts</name>
- <value>*</value>
- </property>
- <property>
- <name>hadoop.proxyuser.root.groups</name>
- <value>*</value>
- </property>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。