原創(chuàng)|Linux|CentOS|Hive|安裝詳解

一、背景

系統(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)入

image

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

image

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

image

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

image

注:

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/bin:\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)刪除&#8;異常值
Esc / &#8 定位到&#8; 刪除即可,注意有;號(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/start-dfs.sh 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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容