035 spark與hive的集成


一:介紹

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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM