當前位置:
首頁 > 最新 > hive on spark 安裝配置

hive on spark 安裝配置

需求介紹

最近發現集群上hive的mapreduce計算特別慢,尤其用kettle抽取mysql數據到hive中時候 。儘管用了調優,但是因為硬體資源的限制,效果不明顯。於是想把hive的計算引擎換成spark,畢竟總體上來說spark要比MR快得多。今天抽空過來處理一下。

前置條件

在配置之前,先確保安裝了Hadoop集群,JDK,Hive,MySQL,Scala。

我的集群配置信息如下:

類型 機器名 IP

主節點 master 196.128.18.20

從節點 slave1 196.128.18.21

從節點 slave2 196.128.18.22

從節點 slave3 196.128.18.23

從節點 slave4 196.128.18.24

說明

Hive on Spark 在官網的介紹是:「Hive on Spark provides Hive with the ability to utilizeApache Sparkas its execution engine.」 ,也就是用Spark作為hive的執行引擎。

Hive默認是用MR(MapReduce)做計算引擎的,它也可以用Tez和Spark做計算引擎,與MR把中間結果存入文件系統不同,Spark全部在內存執行,所以總體上Spark要比MR開很多。

Spark集群需要用到hdfs系統,所以安裝Spark需要先安裝好hadoop集群,同時hive用MySQL作為元數據存儲資料庫,所以需要先安裝好MySQL。另外編譯spark需要安裝maven和Scala。

一、環境說明

本機器軟體環境如下:

操作系統:CentOS 6.6

Hadoop 2.6.5

Hive 2.3.3

Spark 2.1.0

MySQL 5.6

JDK 1.7

Maven 3.5.3

Scala 2.10

二、編譯和安裝Spark(Spark on YARN)

2.1 編譯Spark源碼

Hive 和 Spark 是有兼容行問題,所以需要用對應的Hive和Spark,下面是官網提供的兼容版本:

在Spark官網上下載編譯過的版本是帶了hive的jar包的,而要用 spark on hive , 官網介紹是:

「Note that you must have a version of Spark which does not include the Hive jars」

也就是要不包含 Hive jars包的,所以我們需要下載源碼重新編譯,並且編譯的時候不能指定hive。

我們去官網https://spark.apache.org/downloads.html下載 spark2.1.0的源碼:

下載解壓到 /home/hadoop 下:

hadoop 用戶執行:sudo tar -zxf spark-2.1.0.tgz -C /home/hadoop

注意:編譯前請確保已經安裝JDK、Maven和Scala,並在/etc/profile里配置環境變數。

開始編譯

cd /home/hadoop/spark-2.1.0/dev

執行:

./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.6,parquet-provided"

編譯過程需要在線下載Maven依賴的jar包,所以需要確保能聯網,這個步驟時間可能比較長,取決於你的網速本次是大約花費二三十分鐘。看網上說可能需要好幾個小時。剛開始列印信息如下:

[hadoop@master dev]$ ./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.6,parquet-provided"

-bash: ./dev/make-distribution.sh: No such file or directory

[hadoop@mini1 dev]$ ./make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.6,parquet-provided" +++ dirname ./make-distribution.sh

++ cd ./..

++ pwd

+ SPARK_HOME=/home/hadoop/instSoft/spark-2.1.0

+ DISTDIR=/home/hadoop/instSoft/spark-2.1.0/dist

+ MAKE_TGZ=false

+ MAKE_PIP=false

+ MAKE_R=false

+ NAME=none

+ MVN=/home/hadoop/instSoft/spark-2.1.0/build/mvn

+ (( 4 ))

+ case $1 in

+ NAME=hadoop2-without-hive

+ shift

+ shift

+ (( 2 ))

+ case $1 in

+ MAKE_TGZ=true

+ shift

+ (( 1 ))

+ case $1 in

+ break

+ "[" -z /usr/lib/jvm/jre-1.7.0-openjdk.x86_64 "]"

+ "[" -z /usr/lib/jvm/jre-1.7.0-openjdk.x86_64 "]"

++ command -v git

過程會看到很多下載信息,如:

Downloaded from central: https://repo1.maven.org/maven2/junit/junit/4.12/junit-4.12.jar (315 kB at 135 kB/s)

Downloading from central: https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar

Downloaded from central: https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar (45 kB at 16 kB/s)

Downloading from central: https://repo1.maven.org/maven2/com/novocode/junit-interface/0.11/junit-interface-0.11.jar

Downloaded from central: https://repo1.maven.org/maven2/com/novocode/junit-interface/0.11/junit-interface-0.11.jar (30 kB at 9.0 kB/s)

Downloading from central: https://repo1.maven.org/maven2/org/scala-sbt/test-interface/1.0/test-interface-1.0.jar

Downloaded from central: https://repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.11/1.0.2/scala-xml_2.11-1.0.2.jar (649 kB at 177 kB/s)

Downloaded from central: https://repo1.maven.org/maven2/org/scala-sbt/test-interface/1.0/test-interface-1.0.jar (15 kB at 3.8 kB/s)

編譯完成如下圖:

編譯成功後,在spark-2.1.0目錄下會多一個文件:spark-1.5.0-cdh5.5.1-bin-hadoop2-without-hive.tgz , 如下圖(紅色):

把改文件解壓到 /usr/local 目錄下:

sudo tar -zxfspark-1.5.0-cdh5.5.1-bin-hadoop2-without-hive.tgz -C /usr/local

修改許可權並重命名:

cd /usr/local

sudo chown -R hadoop:hadoop spark-2.1.0

sudo mv spark-2.1.0 spark

2.2 配置Spark

配置環境變數

sudo vi /etc/profile

在最後添加:

export SPARK_HOME=/usr/local/spark

export PATH=$PATH:$SPARK_HOME/bin

配置spark變數

cd /usr/local/spark/conf

vi spark-env.sh

添加以下代碼:

export SPARK_DIST_CLASSPATH=$(/opt/hadoop/bin/hadoop classpath)

保存退出

三、下載安裝配置HIVE

官網下載 hive 2.3.3

2. 解壓並重命名

hadoop用戶執行:

sudo tar -zxf apache-hive-2.3.3-bin.tar.gz -C /usr/local

sudo chown -R hadoop:hadoop hive-2.3.3

sudo mv hive-2.3.3 hive

3. 把spark的必要jar放入hive

cp /usr/local/spark/jars/scala-library-2.11.8.jar/usr/local/hive/lib

cp /usr/local/spark/jars/spark-network-common_2.11-2.1.1.jar/usr/local/hive/lib

cp /usr/local/spark/jars/spark-core_2.11-2.1.1.jar/usr/local/hive/lib

4. 下載MySQL的jdbc驅動並放到hive中

注意該驅動需要另外下載:

cpmysql-connector-java-5.1.44-bin.jar/usr/local/hive/lib

5. 配置 hive-site.xml

cd /usr/local/hive/conf

新建hive-site.xml文件:

vi hive-site.xml

添加以下內容:

jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8

root

password

password to use against metastore database

spark

true

spark.master

yarn-cluster

spark.serializer

3

4

2048m

2

1024m

default

spark.app.name

myInceptor

true

true

nonstrict

true

1

-XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"

false

保存退出。

說明一下,文件開始是hive連接MySQL元資料庫hive的信息:

用戶名為 root ,密碼為 password,資料庫名稱是 hive ,驅動為jdbc,埠是3306 , 連接串如下:

mysql -plocalhost -uroot -ppassword

對於不熟悉MySQL的同學,需要注意一下連接許可權。

第二部分是把hive的執行引擎配置為spar

第三部分是一些spark的性能參數配置以及其他一些配置,需要根據系統自身硬體配置。

6. 配置 hive-env.xml

vi hive-env.xml

在最後加入一下內容:

export HADOOP_OPTS="$HADOOP_OPTS -XX:NewRatio=12 -Xms1024m -Xms10m -XX:MaxPermSize=256m -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=15 -XX:-UseGCOverheadLimit"

export HADOOP_HEAPSIZE=4096

export HADOOP_HOME=/usr/local/hadoop

export HIVE_CONF_DIR=/usr/local/hive/conf

export HIVE_AUX_JARS_PATH=/usr/local/hive/lib

保存退出。

五、HIVE初始化

執行:

/usr/local/hive/bin/schematool -initSchema -dbType mysql

我剛開始報錯:

原因是我原來安裝了hive,在mysql中已經創建了hive資料庫並保存了元數據,所以我先drop掉hive資料庫,再次初始化,成功!

五、驗證是否安裝配置成功

1.準備數據

(1)進入hive,創建外表用戶信息表

hive>use default;

hive>CREATE EXTERNAL TABLE user_info (id int,name string,age int,salary decimal(8,2))

ROW FORMAT DELIMITED FIELDS TERMINATED BY ","

LOCATION "/data/logdata/";

(2)手工造10萬條記錄,分隔符是逗號,並傳到hdfs的/data/logdata下面(該目錄下面只有這個

文件)

hadoop fs -put ./user_info.txt /data/logdata/

(3) 檢查能否讀到數據

hive>select * from user_info;

(4)創建另一張目標表

hive>create table user_info_t(id int, name string, age int, salary decimal(8,2));

(5)把user_info中的10萬條記錄插入到user_info_t表中

hive>insert into user_info_t select id,name,age,salary from user_info;

(6)查看是否用spark計算和時間:

可以看到任務確實用spark作為計算引擎,耗時45秒,因為受硬體設備限制,較之前用mapreduce耗時數分鐘設置十幾分鐘已經是大大提升了效率!

結論:配置成功!

總結:以上是今天花了半天時間弄出來的,看似簡單,實際是踩坑無數,邊踩邊填,總算磕磕碰碰弄出來了,還算順利,花一大晚上整理總結一些小經驗,希望能給大家一點參考意義。時間匆忙,以及經驗不足,這裡面肯定還有不少遺漏甚至錯誤的地方,歡迎大家指出批評,謝謝!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 金融科技探索 的精彩文章:

TAG:金融科技探索 |