Spark從入門到精通33:編譯Spark源碼以支持Hive

Spark官網(wǎng)提供的原生的安裝包不支持Hive,但是我們可以使用Spark官網(wǎng)提供的Spark源碼包編譯成支持Hive的安裝包來使用。

本節(jié)實驗環(huán)境介紹:

1.安裝maven

(1)官網(wǎng)下載Maven最新安裝包:maven-3.6.0-bin.tar.gz

# ls /root/tools/maven-3.6.0-bin.tar.gz

(2)解壓Maven安裝包

# tar -zxvf /root/tools/maven-3.6.0-bin.tar.gz -C /root/trainings

(3)添加環(huán)境變量

# vim /root/.bash_profile
MAVEN_OPTS="-Xms256m -Xmx512m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=64m"
export MAVEN_OPTS
MAVEN_HOME=/root/trainings/apache-maven-3.6.0
export MAVEN_HOME
PATH=$MAVEN_HOME/bin:$PATH
export PATH

使環(huán)境變量生效:

# source /root/.bash_profile

(4)查看Maven是否安裝成功

# mvn -v
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)
Maven home: /root/trainings/apache-maven-3.6.0
Java version: 1.8.0_144, vendor: Oracle Corporation, runtime: /root/trainings/jdk1.8.0_144/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"</pre>

2.使用maven編譯生成spark安裝包

(1)Spark官網(wǎng)下載Spark源碼包:spark-2.4.0.tgz

# ls /root/tools/spark-2.4.0.tgz

(2)解壓Spark源碼包

# tar -xvf /root/tools/spark-2.4.0.tgz

(3)進入Spark源碼包的根目錄

# cd spark-2.4.0

(4)更改mvn默認的scala版本(編譯spark-2.4.0需要scala-2.11以上)

# ./dev/change-scala-version.sh 2.11

(5)搭建maven環(huán)境(下載需要的依賴包,時間較長)

# mvn -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.3 -Phive -Phive-thriftserver -DskipTests clean package

(6)編譯生成安裝包(編譯過程較慢,時間較長)

# ./dev/make-distribution.sh --name hadoop-2.7.3-hive --tgz -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.3 -Phive -Phive-thriftserver -DskipTests

(7)生成的安裝包如下:

# ls spark-2.4.0-bin-hadoop-2.7.3-hive.tgz

整個編譯過程需要注意幾點:

  1. spark-2.4.0.tgz需要的JDK版本1.8以上;
  2. spark-2.4.0.tgz需要的Scala版本2.11以上;
  3. 第(5)(6)步中的Hadoop版本一定要和你目標(biāo)機器上的Hadoop版本保持一致(我這里是Hadoop-2.7.3),否則即使編譯成功也不能使用;
  4. 第(5)(6)步中編譯過程需要較大的JVM空間,需要把MAVEN_OPTS環(huán)境變量的參數(shù)值設(shè)置的適當(dāng)大一些,否則會報錯OOM。

3.安裝Spark(略)

請參考本站spark板塊的安裝相關(guān)的文章。

4.Spark集成hive

(1)修改Hive的配置文件hive-site.xml

# vim hive-site.xml

加入屬性:
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>

修改屬性:
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.126.110:9083</value>
</property>

(2)將hive-site.xml拷貝到Spark的conf目錄下

# cp $HIVE_HOME/conf/hive-site.xml $SPARK_HOME/conf

(3)將hive中的mysql連接器拷貝到Spark的jars目錄下

# cp HIVE_HOME/lib/mysql-connector-java-5.1.46-bin.jarSPARK_HOME/jars

5.spark-sql中使用hive

5.1準(zhǔn)備工作

(1)啟動hive元數(shù)據(jù)服務(wù)

# hive --service metastore &

(2)準(zhǔn)備本地數(shù)據(jù)

# cat /root/input/student.csv
1,Tom,23
2,Mary,24
3,Mike,22

(3)登錄hive,創(chuàng)建一張表,加載本地數(shù)據(jù)

# hive
hive> create table student(sid int,sname string,age int) row format delimited fields terminated by ',';
OK
Time taken: 0.839 seconds
hive> load data local inpath '/root/input/student.csv' into table student;
Loading data to table default.student
OK
Time taken: 0.98 seconds
hive> select * from student;
OK
1 Tom 23
2 Mary 24
3 Mike 22
Time taken: 1.238 seconds, Fetched: 3 row(s)

5.2使用Hive中的數(shù)據(jù)

(1)啟動spark-shell

# spark-shell

(2)在spark-sql中使用Hive

scala> import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.hive.HiveContext

scala> val hiveContext = new HiveContext(sc)
hiveContext: org.apache.spark.sql.hive.HiveContext = org.apache.spark.sql.hive.HiveContext@634d56eb

scala> val studentRDD = hiveContext.sql("select * from default.student").rdd
studentRDD: org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] = MapPartitionsRDD[5] at rdd at <console>:26

scala> studentRDD.foreach(println)
[Stage 0:> (0 + 1) / 1]
[1,Tom,23]
[2,Mary,24]
[3,Mike,22]

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

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

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