一、背景
系統(tǒng):CentOS7 Linux 64位
目的:在Hadoop系統(tǒng)上安裝Hive,終結(jié)Hive安裝亂象
版本:apache-hive-1.2.2-bin.tar.gz
路徑:/opt #放置到Linux的/opt/路徑下,若更改路徑,下方相關(guān)配置也需要更改!??!
排版:簡(jiǎn)單
二、Hive 介紹
Hive 是構(gòu)架在 hadoop 之上的 數(shù)據(jù)倉(cāng)庫(kù)工具,提供簡(jiǎn)單的 sql 查詢功能,被稱為HiveQL 或 HQL,然后將 sql 語(yǔ)句轉(zhuǎn)換為 MapReduce 任務(wù)進(jìn)行運(yùn)行,來(lái)處理結(jié)構(gòu)化數(shù)據(jù)
優(yōu)點(diǎn):
1)操作接口采用類SQL語(yǔ)法,容易上手
2)避免了用 Java 寫 MapReduce,降低開(kāi)發(fā)人員的學(xué)習(xí)成本;通過(guò)SQL可輕松訪問(wèn)數(shù)據(jù),從而實(shí)現(xiàn)數(shù)據(jù)倉(cāng)庫(kù)任務(wù),如提取-轉(zhuǎn)換-加載(ETL),報(bào)告和數(shù)據(jù)分析
3)統(tǒng)一的元數(shù)據(jù)管理,可與 impala/spark 等共享元數(shù)據(jù)
4)數(shù)據(jù)的離線處理,如日志分析,海量結(jié)構(gòu)化數(shù)據(jù)離線分析
缺點(diǎn):
1)Hive執(zhí)行延遲比較高,因此 hive 常用于數(shù)據(jù)分析的,不適合實(shí)時(shí)性要求高的場(chǎng)景
2)因?yàn)镠ive的執(zhí)行延遲比較高,對(duì)于處理小數(shù)據(jù)沒(méi)有優(yōu)勢(shì),適合處理大數(shù)據(jù)
三、準(zhǔn)備工作
1. 檢查Java JDK 是否安裝
輸入 ** java -version**

若顯示以上信息,則說(shuō)明有安裝;若沒(méi)有安裝,先進(jìn)行 jdk 的安裝
Java JDK 下載和安裝過(guò)程鏈接文章的步驟3:原創(chuàng)|Linux|CentOS|Inst Hadoop
2. 檢查 Hadoop 是否安裝
輸入 ** hadoop version**

若沒(méi)有安裝hadoop,則安裝以下步驟進(jìn)行 hadoop 的下載和部署: 原創(chuàng)|Linux|CentOS|Inst Hadoop
3. 檢查 Mysql 是否安裝
輸入 **find / -name 'mysql' **
安裝Mysql鏈接:原創(chuàng)|Linux|Inst Mysql
4.安裝vim
yum -y install vim
三、Hive下載
1. 官網(wǎng)下載 Hive
Hive官網(wǎng)鏈接:http://hive.apache.org/downloads.html
step1:在DOWNLOADS下點(diǎn)擊 Download a release now! 進(jìn)入

step2:在 HTTP 下可看到多個(gè)下載 Hive 的鏈接,選擇一個(gè)進(jìn)入

step3:點(diǎn)擊需要下載的版本,進(jìn)入

step4:選擇 apache-hive-bin.tac.gz 下載到本地

注:
xx-bin.tac.gz 是 class 文件,java 已編譯過(guò)
xx-src.tac.gz 是 java 文件,是 java源代碼
.tac.gz 是 linux 下的安裝包
2. 將本地下載的 Hive 安裝包上傳到 Linux 上
通過(guò) Xshell 的Xftp軟件上傳文件
將文件上傳到 /opt/ 目錄下

四、Hive 安裝
1. 安裝Hive
step1:進(jìn)入到opt目錄
cd /opt
step2:解壓 hive 安裝包到 hive目錄下
tar -zxf /opt/apache-hive-1.2.2-bin.tar.gz
mv apache-hive-1.2.2-bin hive #重命名文件夾
將存放在 /opt/目錄下的安裝包 apache-hive-1.2.2-bin.tar.gz 解壓到 當(dāng)前目錄下
2. 加載 mysql 驅(qū)動(dòng)包
鏈接:mysql-connector-java驅(qū)動(dòng)包下載地址
step3: 下載 mysql 驅(qū)動(dòng)包后,放入到 hive安裝目錄的 lib 目錄下
cd /hive/lib #進(jìn)入到 lib 目錄
rz
彈出一個(gè)文件選擇窗口,從本地選擇mysql 驅(qū)動(dòng)包上傳到服務(wù)器

上傳完畢后,可在 lib 目錄下,看到上傳的 mysql-connector-java-8.0.15.jar包
3. 配置 Hive 環(huán)境變量
step4:進(jìn)入 /etc/profile 文件,配置環(huán)境變量
sudo vim /etc/profile #進(jìn)入到 profile 配置文件
輸入 i 鍵 進(jìn)入編輯模式
輸入 export HIVE_HOME=/opt/hive
export PATH=HIVE_HOME/conf
/opt/hive 是hive目錄路徑

輸入 Esc 鍵,輸入 **:wq ** 保存并退出
step5:重新執(zhí)行 profile 文件
輸入 source /etc/profile 刷新配置,生效配置
4. 修改 Hive 的 hive-env.sh 、hive-site.xml 和 hive-log4j2.properties 配置文件
step6:進(jìn)入到 hive安裝目錄的 /conf 目錄下
cd /opt/hive/conf
問(wèn)題一:/conf 目錄下木有hive-env.sh 、 hive-site.xml 和 hive-log4j2.properties,但是看到 hive-env.sh.template 、 hive-default.xml.template 和 hive-log4j2.properties.template 文件
解決方法:可直接復(fù)制,并分別重命名為 hive-env.sh 、 hive-site.xml 和 hive-log4j2.properties
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml
cp hive-log4j2.properties.template hive-log4j2.properties
step7:修改 hive-env.sh 文件
vim hive-env.sh #編輯 hive-env.sh文件
輸入 i 鍵 進(jìn)入編輯模式
末尾輸入(可在 /etc/profile查詢,適當(dāng)修改得到如下信息)
#hadoop_home路徑
HADOOP_HOME=/opt/hadoop-3.1.2
#hive配置文件存放路徑
export HIVE_CONF_DIR=/opt/hive/conf
#hive相關(guān)jar存放路徑
export HIVE_AUX_JARS_PATH=/opt/hive/lib
分別添加你安裝的 java jdk 路徑、hadoop路徑和hive路徑
輸入 Esc 鍵,輸入 :wq 保存并退出
輸入 **source hive-env.sh ** 重新執(zhí)行 hive-env.sh 文件使其生效
step8:在修改 hive-site.xml 前,先創(chuàng)建warehouse、tmp、log目錄
cd /opt/hive
mkdir warehouse #存儲(chǔ)表數(shù)據(jù)
mkdir tmp # 存儲(chǔ)臨時(shí)文件
mkdir log # 存儲(chǔ)日志文件
step9:修改 hive-site.xml 文件
cd /opt/hive/conf #進(jìn)入到 conf 目錄下
vim hive-site.xml #編輯 hive-site.xml 文件
輸入 i 鍵 進(jìn)入編輯模式
1)首先添加以下信息,配置 mysql 數(shù)據(jù)庫(kù)相關(guān)內(nèi)容(在末尾</configuration>之前)
> <property>
>
> <name>javax.jdo.option.ConnectionURL</name>
>
> <value>jdbc:mysql://localhost:3306/test?3useUnicode=true;characterEncoding=utf8;
>
> </value>
>
> <description>JDBC connect string for a JDBC metastore</description>
>
> </property>
>
> <property>
>
> <name>javax.jdo.option.ConnectionDriverName</name>
>
> <value>com.mysql.cj.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>mysql數(shù)據(jù)庫(kù)登錄密碼(需要修改成密碼)</value>
>
> <description>password to use against metastore database</description>
>
> </property>
2)修改 hive.metastore.warehouse.dir 配置
搜索hive.metastore.warehouse.dir
先按 Esc 鍵退出編輯模式,然后輸入** /hive.metastore.warehouse.dir**
定位到 hive.metastore.warehouse.dir 位置,按 i 鍵進(jìn)入編輯
修改 value 值,填寫你所創(chuàng)建的 warehouse 的路徑,配置數(shù)據(jù)目錄

3)修改 hive.exec.scratchdir 配置
按 2)的修改步驟,修改臨時(shí)文件路徑

4)修改 hive.querylog.location 配置
按 2)修改步驟,修改日志路徑

5)修改 system:java.io.tmpdir 的路徑
搜索 system:java.io.tmpdir ,定位到多處含有 system:java.io.tmpdir 的地方(搜索功能按小寫 n可切換到下一處;按大寫 N 可切換到上一處)
全部替換成 /opt/hive/tmp(這個(gè)是我存放臨時(shí)文件的路徑,替換成你所創(chuàng)建的)

修改完以上全部?jī)?nèi)容后,輸入 Esc 鍵,輸入 **:wq ** 保存并退出
**6)刪除;異常值
Esc /  定位到; 刪除即可,注意有;號(hào)。
step10:修改 hive-log4j.proprties 文件
輸入 ** vim hive-log4j2.properties**
修改 log.dir 屬性,配置存放log文件路徑,其他屬性默認(rèn)即可
hive.log.dir=/opt/hive/log/${username}
step11:在hdfs中創(chuàng)建文件并授權(quán)
hive中存儲(chǔ)的數(shù)據(jù)和產(chǎn)生的臨時(shí)文件需要存儲(chǔ)在hdfs中,因此需要再hdfs中創(chuàng)建相應(yīng)文件
存放hive中具體數(shù)據(jù)目錄
hadoop fs -mkdir /opt/hive/warehouse
存放hive運(yùn)行產(chǎn)生的臨時(shí)文件
hadoop fs -mkdir /opt/hive/tmp
存放hive日志文件
hadoop fs -mkdir /opt/hive/log
修改文件權(quán)限
hadoop fs -R -chmod 777 /opt/hive/warehouse
hadoop fs -R -chmod 777 /opt/hive/tmp
hadoop fs -R -chmod 777 /opt/hive/log
五、Hive 啟動(dòng)
step11: 啟動(dòng) hadoop
cd
start-all.sh
jps #查看是否啟動(dòng)成功
step12: 啟動(dòng) mysql
service mysql start #若不行,使用service mysqld start
若碰到問(wèn)題:mysqld_safe A mysqld process already exists
參考方法:1、ps aux |grep mysqld 2、kill -9 [PID]

step13:初始化mysql數(shù)據(jù)庫(kù)
schematool -initSchema -dbType mysql
若碰到問(wèn)題,參考:https://jyao.iteye.com/blog/1915561
step14: 啟動(dòng) hive
cd
hive
問(wèn)題1:遇到Class path contains multiple SLF4J bindings.該如何解決
方法:https://blog.csdn.net/chuyouyinghe/article/details/79134894
問(wèn)題2:# [在Hadoop 中用 hive 命令啟動(dòng)時(shí)報(bào)錯(cuò):expansion character (code 0x8 at [row,col,system-id]: ]
方法:https://ask.hellobi.com/blog/tianshanbpf/14368
常見(jiàn)問(wèn)題:
1、Failed with exception Java.io.IOException:java.lang.IllegalArgumentException: java.NET.URI
參考:https://blog.csdn.net/wodedipang_/article/details/72720257
2、failed on connection exception: java.net.ConnectException: 拒絕連接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
原因:namenode沒(méi)有啟動(dòng)
方法:
1、hdfs namenode -format
2、stop-all.sh
3、start-all.sh
3、FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask. Unable to move source file:/opt/t_access_times.dat to destination hdfs://bigdata:9000/opt/hive/warehouse/hive.db/t_access/t_access_times.dat
原因:datenode沒(méi)有啟動(dòng)
方法:1、hadoop fs -chmod 777 -R /opt/hive/warehouse
2、hadoop fs -chmod 777 -R /opt/t_access_times.dat
3、cd /opt/hadoop-3.1.2/etc/hadoop
4、vi hdfs-site.xml #增加如下信息
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
5、hdfs --daemon start datanode
6、vi hdfs-site.xml #查看dfs.datanode.data.dir和dfs.namenode.name.dir下version位置,若此處兩位置相同,一定要更改成不同位置,要不啟動(dòng)不了datanode(這是我啟動(dòng)不了datanode原因?。。?/strong>
7、將datanode/current下的VERSION中的clusterID復(fù)制到namenode/current下的VERSION中,覆蓋掉原來(lái)的clusterID。
8、start-all.sh
9、若上法都無(wú)效,如下方法請(qǐng)慎重使用,我是通過(guò)如下方法解決了問(wèn)題,但有關(guān)于數(shù)據(jù)安全,慎用。
10、stop-all.sh
11、刪除dfs.namenode.name.dir/current的data和tmp文件夾
12、hdfs namenode -format
13、start-all.sh
14、可能碰到問(wèn)題4,處理方法如下。
4、Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Cannot create directory /opt/hive/tmp/root/1be8676a-56ac-47aa-ab1c-aa63b21ce1fc. Name node is in safe mode
方法:hdfs dfsadmin -safemode leave
5、could not be cleaned up
參考:
1、第一次在create table 時(shí)沒(méi)有加 STORED AS TEXTFILE 結(jié)果 INSERT OVERWRITE table 命令就只能執(zhí)行一次,后面就報(bào)錯(cuò)。
2、DROP TABLE xxx,重新建立新表。
6、MySQL無(wú)法重啟報(bào)錯(cuò)Warning: World-writable config file ‘/opt/mysql/my.cnf ’ is ignored的解決方法
方法:chmod 644 /opt/mysql/my.cnf #mysql/my.cnf位置
7、WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.錯(cuò)誤。
解決方案,在 vim sbin/stop-dfs.sh 將
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
改為
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
8、其他問(wèn)題
參考:https://blog.csdn.net/sunnyyoona/article/details/51648871
六、文章參考
http://www.itdecent.cn/p/44516adea1bc
https://blog.csdn.net/xiaoqiu_cr/article/details/80906955