一:介紹
1.在spark編譯時支持hive
2.默認的db
當Spark在編譯的時候給定了hive的支持參數,但是沒有配置和hive的集成,此時默認使用hive自帶的元數據管理:Derby數據庫。
二:具體集成
1.將hive的配合文件hive-site.xml添加到spark應用的classpath中(相當於拷貝)
將hive-site.xml拷貝到${SPARK_HOME}/conf下。
下面使用軟連接:
2.第二步集成
根據hive的配置參數hive.metastore.uris的情況,采用不同的集成方式
分別:
1. hive.metastore.uris沒有給定配置值,為空(默認情況)
SparkSQL通過hive配置的javax.jdo.option.XXX相關配置值直接連接metastore數據庫直接獲取hive表元數據
但是,需要將連接數據庫的驅動添加到Spark應用的classpath中
2. hive.metastore.uris給定了具體的參數值
SparkSQL通過連接hive提供的metastore服務來獲取hive表的元數據
直接啟動hive的metastore服務即可完成SparkSQL和Hive的集成
$ hive --service metastore &
3.使用hive-site.xml配置的方式
配置hive.metastore.uris的方式。
4.啟動hive service metastore服務
如果沒有配置全局hive,就使用bin/hive --service metastore &
三:測試
1.spark-sql
2.使用
四:特殊點(其他在hive中可以使用的sql,在spark-sql中都可以使用)
1.cache
cache是立即執行的,然后使用下面的可以懶加載。
uncache是立即執行的。
五:使用spark-shell
1.啟動
2.使用
可以使用sqlContext . ,然后使用Tab進行補全。
show默認顯示20行。
六:補充說明:Spark應用程序第三方jar文件依賴解決方案
1. 將第三方jar文件打包到最終形成的spark應用程序jar文件中
這種使用的場景是,第三方的jar包不是很大的情況。
2. 使用spark-submit提交命令的參數: --jars
這個使用的場景:使用spark-submit命令的機器上存在對應的jar文件,而且jar包不是太多
至於集群中其他機器上的服務需要該jar文件的時候,通過driver提供的一個http接口來獲取該jar文件的(http://192.168.187.146:50206/jars/mysql-connector-java-5.1.27-bin.jar Added By User)
方式:
$ bin/spark-shell --jars /opt/cdh-5.3.6/hive/lib/mysql-connector-java-5.1.27-bin.jar:這樣就不再需要配置hive.metastore.uris參數配置。
使用“,”分隔多個jar。
3. 使用spark-submit提交命令的參數: --packages
這個場景是:如果找不到jar會自動下載,也可以自己設定源。
作用:
--packages Comma-separated list of maven coordinates of jars to include on the driver and executor classpaths. Will search the local maven repo, then maven central and any additional remote repositories given by --repositories.
The format for the coordinates should be groupId:artifactId:version. 這一個說明是spark-submit后的package參數的說明。
方式:
$ bin/spark-shell --packages mysql:mysql-connector-java:5.1.27 --repositories http://maven.aliyun.com/nexus/content/groups/public/
下載路徑:
# 默認下載的包位於當前用戶根目錄下的.ivy/jars文件夾中,即是home/beifeng/.ivy/jars
根據上面的maven來寫格式。
4.更改Spark的配置信息:SPARK_CLASSPATH, 將第三方的jar文件添加到SPARK_CLASSPATH環境變量中
使用場景:要求Spark應用運行的所有機器上必須存在被添加的第三方jar文件
做法:
-4.1 創建一個保存第三方jar文件的文件夾:
$ mkdir external_jars
-4.2 修改Spark配置信息
$ vim conf/spark-env.sh
SPARK_CLASSPATH=$SPARK_CLASSPATH:/opt/cdh-5.3.6/spark/external_jars/*
-4.3 將依賴的jar文件copy到新建的文件夾中
$ cp /opt/cdh-5.3.6/hive/lib/mysql-connector-java-5.1.27-bin.jar ./external_jars/
-4.4 測試
$ bin/spark-shell
scala> sqlContext.sql("select * from common.emp").show
備注:
如果spark on yarn(cluster),如果應用依賴第三方jar文件,最終解決方案:將第三方的jar文件copy到${HADOOP_HOME}/share/hadoop/common/lib文件夾中(Hadoop集群中所有機器均要求copy)