hive3.1.2的保姆级安装教程,使用MariaDB作为元数据库
本次安装的操作系统是Kylin X86。
需要JDK环境,本文是在已经装好Hadoop3.2.2伪分布式的基础上在部署hive服务,Hadoop3.2.2伪分布式的搭建可以去看博主写的这篇文,写的很细,无脑跟着操作就行https://blog.ZEEKLOG.net/ash_77/article/details/157763889?spm=1011.2124.3001.6209
1. 下载hive3.1.2安装包
下载地址:http://archive.apache.org/dist/hive/
并把安装包上传到目录/data/hadoop/
2. 安装hive并配置
#解压cd /data/hadoop/ tar-zvxf apache-hive-3.1.2-bin.tar.gz mv apache-hive-3.1.2-bin hive-3.1.2 #修改文件夹名称chown-R hadoop:hadoop hive-3.1.2 #修改权限vim /etc/profile #配置环境变量# 新增以下内容exportHIVE_HOME=/data/hadoop/hive-3.1.2 exportPATH=$PATH:$HIVE_HOME/bin #切换hadoop用户su - hadoop #修改hive配置文件cd conf/ cp hive-env.sh.template hive-env.sh vim hive-env.sh 新增以下内容 exportJAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-8.ky10.x86_64 exportHADOOP_HOME=/data/hadoop/hive-3.1.2 exportHIVE_CONF_DIR=/data/hadoop/hive-3.1.2/conf cp hive-default.xml.template hive-site.xml vim hive-site.xml 先清空内容,只需要保留以下内容 <?xml version="1.0"?><?xml-stylesheet type="text/xsl"href="configuration.xsl"?><configuration><!-- hive元数据库MySQL的URL --><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://ck02:3306/hive?useSSL=false</value></property><!-- hive元数据库的Driver--><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property><!-- 元数据库使用的username--><property><name>javax.jdo.option.ConnectionUserName</name><value>hive</value></property><!-- 元数据库jdbc连接的password --><property><name>javax.jdo.option.ConnectionPassword</name><value>XXXX</value></property><!-- Hive默认在HDFS的工作目录 --><property><name>hive.metastore.warehouse.dir</name><value>/usr/hive/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><!-- 指定存储元数据要连接的地址 --><property><name>hive.metastore.uris</name><value>thrift://ck02:9083</value></property><!-- 指定hiveserver2连接的host --><property><name>hive.server2.thrift.bind.host</name><value>ck02</value></property><!-- 指定hiveserver2连接的端口号 --><property><name>hive.server2.thrift.port</name><value>10000</value></property></configuration>在Hadoop中创建hive数据存储的目录
hdfs dfs -mkdir-p /usr/hive/warehouse hdfs dfs -chmod g+w /usr/hive/warehouse 剩下还需要配置hive的元数据库,默认使用的是Derby,但是Derby不支持多会话,在生产环境中都会配置成MySQL数据库
3. 配置MySQL数据库
因为RPM的仓库中只提供了MariaDB,所以安装MariaDB来存储hive的元数据。
先安装MariaDB:
yum install-y mariadb-server #启动服务 systemctl start mariadb systemctl status mariadb #初始化数据库,包括设置root用户的密码等 mysql_secure_installation #连接数据库,创建hive用户 mysql -u root -p#库名和用户名跟hive-site.xml配置文件中一致 CREATE DATABASE hive CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER'hive'@'%' IDENTIFIED BY 'XXX'; GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%'; FLUSH PRIVILEGES;exit;上传MySQL驱动:
scp mysql-connector-java-5.1.47.jar root@ck02:/data/hadoop/hive-3.1.2/lib/ 然后需要初始化hive元数据库,使用root用户执行以下命令,
[root@ck02 conf]# schematool -dbType mysql -initSchema如果有遇到以下报错,是因为Hive和Hadoop自带的Guava版本不一致导致的,需要统一Guava版本。
rm /data/hadoop/hive-3.1.2/lib/guava-19.0.jar cp /data/hadoop/hadoop-3.2.2/share/hadoop/common/lib/guava-27.0-jre.jar /data/hadoop/hive-3.1.2/lib/ SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found
binding in
[jar:file:/data/hadoop/hive-3.1.2/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in
[jar:file:/data/hadoop/hadoop-3.2.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an
explanation. SLF4J: Actual binding is of type
[org.apache.logging.slf4j.Log4jLoggerFactory] Exception in thread
“main” java.lang.NoSuchMethodError:
com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1338)
at org.apache.hadoop.mapred.JobConf.setJar(JobConf.java:536)
at org.apache.hadoop.mapred.JobConf.setJarByClass(JobConf.java:554)
at org.apache.hadoop.mapred.JobConf.(JobConf.java:448)
at org.apache.hadoop.hive.conf.HiveConf.initialize(HiveConf.java:5141)
at org.apache.hadoop.hive.conf.HiveConf.(HiveConf.java:5104)
at org.apache.hive.beeline.HiveSchemaTool.(HiveSchemaTool.java:96)
at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:1473)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:323)
at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
然后初始化hive元数据库 # 执行[root@ck02 hive-3.1.2]# schematool -dbType mysql -initSchema[root@ck02 hive-3.1.2]# su - hadoop[hadoop@ck02 hive-3.1.2]$ mysql -u hive -p MariaDB [(none)]> use hive; MariaDB [hive]>source /data/hive-3.1.2/scripts/metastore/upgrade/mysql/hive-schema-3.1.0.mysql.sql; MariaDB [hive]>exit;4. 启动hive元数据服务
[hadoop@ck02 hive-3.1.2]$ nohup hive --service metastore > /dev/null 2>&1&# 验证[hadoop@ck02 hive-3.1.2]$ hive hive> show databases; OK default Time taken: 0.557 seconds, Fetched: 1 row(s) hive> create database test; OK Time taken: 0.751 seconds hive>exit;在Hadoop UI(http://ck02:9870)中可以看到对应的数据库目录
