Spark官網(wǎng)提供的原生的安裝包不支持Hive,但是我們可以使用Spark官網(wǎng)提供的Spark源碼包編譯成支持Hive的安裝包來使用。
本節(jié)實驗環(huán)境介紹:
- 操作系統(tǒng):centos7
- JDK:jdk-1.8
- scala:2.11.8
- Hadoop:Hadoop-2.7.3
- Spark源碼包:spark-2.4.0.tgz 提取碼:x5ib
- 本文生成的安裝包下載:spark-2.4.0-bin-hadoop-2.7.3-hive.tgz 提取碼:4786
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
整個編譯過程需要注意幾點:
- spark-2.4.0.tgz需要的JDK版本1.8以上;
- spark-2.4.0.tgz需要的Scala版本2.11以上;
- 第(5)(6)步中的Hadoop版本一定要和你目標(biāo)機器上的Hadoop版本保持一致(我這里是Hadoop-2.7.3),否則即使編譯成功也不能使用;
- 第(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
SPARK_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.HiveContextscala> val hiveContext = new HiveContext(sc)
hiveContext: org.apache.spark.sql.hive.HiveContext = org.apache.spark.sql.hive.HiveContext@634d56ebscala> 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>:26scala> studentRDD.foreach(println)
[Stage 0:> (0 + 1) / 1]
[1,Tom,23]
[2,Mary,24]
[3,Mike,22]