1.在hive官網(wǎng)下載hive
tar zxvf apache-hive-1.2.2-bin.tar.gz
mv apache-hive-1.2.2-bin hive
2.修改環(huán)境變量
vim /etc/profile
# Hive environment
export HIVE_HOME=/app/zpy/hive
export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH
source /etc/profile
3.設(shè)置mysql關(guān)聯(lián)hive
[root@zpy11409 conf]# mv hive-default.xml.template hive-site.xml
[root@zpy11409 conf]# mv hive-env.sh.template hive-env.sh
hive-env.sh 添加以下
添加
export JAVA_HOME=/app/zpy/java/jdk1.8.0_51 ##Java路徑
export HADOOP_HOME=/app/zpy/hadoop ##Hadoop安裝路徑
export HIVE_HOME=/app/zpy/hive ##Hive安裝路徑
export HIVE_CONF_DIR=/app/zpy/hive/conf ##Hive配置文件路徑
在 Hive 中創(chuàng)建表之前需要創(chuàng)建以下 HDFS 目錄并給它們賦相應(yīng)的權(quán)限。
ps:su hadoop 一定要切換到hadoop用戶
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -mkdir -p /user/hive/tmp
hdfs dfs -chmod +w /user/hive/warehouse
hdfs dfs -chmod +w /user/hive/tmp
hive-site.xml 修改以下兩項
hive.exec.scratchdir
該參數(shù)指定了 Hive 的數(shù)據(jù)臨時文件目錄,默認(rèn)位置為 HDFS 上面的 /tmp/hive 路徑下,我們修改為/user/hive/tmp(HDFS路徑)
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
hive.metastore.warehouse.dir
該參數(shù)指定了 Hive 的數(shù)據(jù)存儲目錄,默認(rèn)位置在 HDFS 上面的 /user/hive/warehouse 路徑下。
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
Hive Metastore
默認(rèn)情況下, Hive 的元數(shù)據(jù)保存在內(nèi)嵌的 Derby 數(shù)據(jù)庫里, 但一般情況下生產(chǎn)環(huán)境會使用 MySQL 來存放 Hive 元數(shù)據(jù)。
創(chuàng)建數(shù)據(jù)庫和用戶
假定你已經(jīng)安裝好 MySQL。下面創(chuàng)建一個 hive 數(shù)據(jù)庫用來存儲 Hive 元數(shù)據(jù),且數(shù)據(jù)庫訪問的用戶名和密碼都為 hive。
mysql> CREATE DATABASE hive;
mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive';
mysql> GRANT ALL ON hive.* TO 'hive'@'localhost' IDENTIFIED BY 'hive';
mysql> GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive';
mysql> FLUSH PRIVILEGES;
hive-site.xml修改以下
原來使用derby數(shù)據(jù)庫的配置,我們將其刪除即刪除以下內(nèi)容:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=metastore_db;create=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
并添加如下內(nèi)容:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://10.1.14.9:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description> Enforce metastore schema version consistency. True: Verify that version information stored in metastore matches with one from Hive jars. Also disable automatic schema migration attempt. Users are required to manully migrate schema after Hive upgrade which ensures proper metastore schema migration. (Default) False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
</description>
</property>
4.增加mysql_driver:
cp mysql-connector-java-5.1.45-bin.jar /app/zpy/hive/lib/
5.初始化:schematool -initSchema -dbType mysql
從 Hive 2.1 版本開始, 我們需要先運(yùn)行 schematool 命令來執(zhí)行初始化操作。
schematool -dbType mysql -initSchema
初始化成功后會看到如下信息:
[hadoop@zpy11409 bin]$ schematool -dbType mysql -initSchema
Metastore connection URL: jdbc:mysql://10.1.14.9:3306/hive?createDatabaseIfNotExist=true
Metastore Connection Driver : com.mysql.jdbc.Driver
Metastore connection User: hive
Starting metastore schema initialization to 1.2.0
Initialization script hive-schema-1.2.0.mysql.sql
Initialization script completed
schemaTool completed
如果初始化不成功,可能會出現(xiàn)如下報錯:
報錯1:ls: cannot access /app/zpy/spark/lib/spark-assembly-*.jar: No such file or d
解決:spark2以后,原有l(wèi)ib目錄下的大JAR包被分散成多個小JAR包,原來的spark-assembly-*.jar已經(jīng)不存在,所以hive沒有辦法找到這個JAR包。
所以我們需要進(jìn)入hive安裝路徑下的bin目錄下,編輯hive,我的路徑是:/app/zpy/hive/bin
,需要進(jìn)入該路徑,然后vim hive找到下面這行shell腳本
sparkAssemblyPath=`ls ${SPARK_HOME}/lib/spark-assembly-*.jar`
將其修改為:sparkAssemblyPath=`ls ${SPARK_HOME}/jars/*.jar`
報錯2:org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
schematool -initSchema -dbType mysql -verbose 來查看詳細(xì)信息
信息顯示 :Caused by: java.sql.SQLException: Access denied for user 'hive'@'zpy11409.zpy.corp' (using password: YES)
解決:登錄mysql執(zhí)行:GRANT ALL PRIVILEGES ON *.* TO 'hive'@'zpy11409.zpy.corp' IDENTIFIED BY 'hive';
flush privileges ;
報錯3:[ERROR] Terminal initialization failed; falling back to unsupported
Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
解決:版本問題:
hive1.2.2 (hive版本)
hadoop2.6.0(hadoop版本)
cd /app/zpy/hive/lib
cp -r jline-2.12.jar /app/zpy/hadoop/share/hadoop/yarn/lib/
cd /app/zpy/hadoop/share/hadoop/yarn/lib/
mv jline-0.9.94.jar jline-0.9.94.jar.bak
6.修改 io.tmpdir 路徑
mkdir -p /app/zpy/hive/iotmp
chmod 777 /app/zpy/hive/iotmp
把hive-site.xml 中所有${system:Java.io.tmpdir}替換成/app/zpy/hive/iotmp
全局替換命令:%s#${system:java.io.tmpdir}.*#/app/zpy/hive/iotmp/</value>#g
7.Hive客戶端配置
將server端程序分發(fā)到所有client端:
scp -r /app/zpy/hive 10.1.14.10:/app/zpy
修改客戶端hive-site.xml文件,修改內(nèi)容如下:
<property>
<name>hive.metastore.uris</name>
<value>thrift://10.1.14.9:9083</value>
</property>
其中9083為metastore服務(wù)端口
8.修改server端和client端權(quán)限
chown -R hadoop:hadoop /app/zpy/hive
9.server端啟動metastore
server端需要啟動metastore服務(wù)
su hadoop
hive --service metastore &
[hadoop@zpy11409 root]$ jps
18962 NameNode
37993 RunJar # metastore
10.啟動hive
server端及client端啟動hive,觀察庫和表是否相同
su hadoop
hive