一、前期准备
1.1 hadoop集群搭建。详见 Ubuntu16.04下搭建Hadoop分布式集群
1.2 mysql环境安装。详见 ubuntu彻底卸载mysql并且重新安装
1.3 mysql-connector-java-5.1.38.jar 驱动包。 mysql-connector-java-5.1.38.jar
1.4 hive安装包。https://mirrors.tuna.tsinghua.edu.cn/apache/hive/
我下载的是2.3.4版本的,apache-hive-2.3.4-bin.tar.gz
二、hive安装
2.1 将apache-hive-2.3.4-bin.tar.gz解压于某一个位置,然后将文件夹的名字apache-hive-2.3.4-bin改名为hive方便后续操作,最终我解压后的位置为 home/waves/hive 。
然后将mysql-connector-java-5.1.38.jar驱动包放在 home/waves/hive/lib 目录下。
2.2 修改环境变量,在命令行输入 sudo gedit /etc/profile,添加HIVE_HOME:
添加完后,在命令行输入source /etc/profile 使立即生效
2.3 修改配置文件
2.3.1 开启hadoop集群(start.dfs.sh),创建 HDFS 目录并给它们赋相应的权限。在命令行依次输入以下指令:
hadoop fs -mkdir -p /usr/hive/warehouse
hadoop fs -mkdir -p /usr/hive/tmp
hadoop fs -mkdir -p /usr/hive/log
hdfs dfs -chmod -R 777 /usr/hive/warehouse
hdfs dfs -chmod -R 777 /usr/hive/tmp
hdfs dfs -chmod -R 777 /usr/hive/log
查看生成的文件夹:
2.3.2 将当前路径切换到 HIVE_HOME/conf 目录:
cd /home/waves/hive/conf
2.3.3 将hive-default.xml.template重命名为hive-default.xml
mv hive-default.xml.template hive-default.xml
新建一个配置文件hive-site.xml并编辑
gedit hive-site.xml
写入以下信息,注意下面的东西是hive-site.xml的全部内容!
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.exec.scratchdir</name>
<value>/usr/hive/tmp</value>
<description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}.</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
<property>
<name>hive.querylog.location</name>
<value>/usr/hive/log</value>
<description>Location of Hive run time structured log file</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123123</value>
<description>password to use against metastore database</description>
</property>
</configuration>
其中前三项跟之前在HDFS建立的文件夹是对应的。最后的四项根据个人情况更改:
2.3.4 将hive-env.sh.template重命名为hive-env.sh
mv hive-env.sh.template hive-env.sh
修改hive-env.sh,在末尾添加:
# Hadoop的位置:
export HADOOP_HOME=/home/waves/hadoop-2.7
# hive的conf目录位置:
export HIVE_CONF_DIR=/home/waves/hive/conf
# hive的lib目录位置:
export HIVE_AUX_JARS_PATH=/home/waves/hive/lib
2.4 schematool 命令执行初始化操作
从 Hive 2.1 版本开始, 我们需要先运行 schematool 命令来执行初始化操作,在命令行输入:
schematool -dbType mysql -initSchema
2.5 运行Hive
注意:在命令行运行 hive 命令时必须保证以下两点:
- HDFS 已经启动。可以使用 start-dfs.sh 来启动 HDFS。
- mysql-connector-java.jar 添加到 $HIVE_HOME/lib 目录下。
在schematool命令初始化成功后,在命令行直接输入hive运行:
2.6 hive测试
hive下的指令和mysql的一样。
三、遇到的问题
请大家在第2.3步骤修改配置文件时一定要跟着我的来,网上其他的乱七八糟的,搞出一大堆错。
弄的我最长时间的是下面这个错误
在执行命令schematool -initSchema -dbType mysql报错:
Metastore connection URL: jdbc:derby:;databaseName=metastore_db;create=true
Metastore Connection Driver : org.apache.derby.jdbc.EmbeddedDriver
Metastore connection User: APP
Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Error: Syntax error: Encountered "<EOF>" at line 1, column 64. (state=42X01,code=30000)
org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!
Underlying cause: java.io.IOException : Schema script failed, errorcode 2
Use --verbose for detailed stacktrace.
*** schemaTool failed ***
原因就是因为在修改hive-site.xml文件时,有些网址的教程是直接将hive-default.xml.template重命名为hive-site.xml文件,然后直接在这个文件的基础上,在前面添加javax.jdo.option.ConnectionURL,javax.jdo.option.ConnectionDriverName等其他属性。
但原来的hive-default.xml.template文件其实已经包含了这些属性的了,你用ctrl+F搜索javax.jdo.option.ConnectionURL(或javax.jdo.option.ConnectionDriverName等其他的),不出意外的话,能搜索到两个以上同名的属性!!
解决方法就是按着上面的2.3步骤,将hive-default.xml.template重命名为hive-default.xml,然后新建hive-site.xml文件,将要添加的属性加进去就行了,详见2.3步。
参考:
https://my.oschina.net/jackieyeah/blog/735424