sparksql整合hive的環境搭建

    Spark SQL主要目的是使得用戶可以在Spark上使用SQL,其數據源既可以是RDD,也可以是外部的數據源(比如文本、Hive、Json等)。Spark SQL的其中一個分支就是Spark on Hive,也就是使用Hive中HQL的解析、邏輯執行計劃翻譯、執行計劃優化等邏輯,可以近似認爲僅將物理執行計劃從MR作業替換成了Spark作業。SparkSql整合hive就是獲取hive表中的元數據信息,然後通過SparkSql來操作數據.

    spark整合hive之前應先安裝好hadoop,hive,spark集羣環境

整合步驟:

  • 需要將hive-site.xml文件拷貝到Sparkconf目錄下,這樣就可以通過這個配置文件找到Hive的元數據以及數據存放位置。
  • 如果Hive的元數據存放在Mysql中,我們還需要準備好Mysql相關驅動,比如:mysql-connector-java-5.1.35.jar

hive安裝目錄lib文件夾下的Mysql驅動cpsparkjars

  • 將以上兩個文件分發到其他集羣機器上

 

 測試sparksql整合hive是否成功

先啓動hadoop集羣,在啓動spark集羣,確保啓動成功之後執行命令:

/var/local/spark/bin/spark-sql --master spark://node1:7077  --executor-memory 1g  --total-executor-cores 2

指明master地址、每一個executor的內存大小、一共所需要的核數、

mysql數據庫連接驅動。

執行成功後的界面:進入到spark-sql 客戶端命令行界面

接下來就可以通過sql語句來操作數據庫表:

查看當前有哪些數據庫 ---show databases;

 

看到以上結果,說明sparksql整合hive成功!

日誌太多,我們可以修改spark的日誌輸出級別(conf/log4j.properties)

前方高能:

spark2.0版本後由於出現了sparkSession,在初始化sqlContext的時候,會設置默認的spark.sql.warehouse.dir=spark-warehouse,

此時將hivesparksql整合完成之後,在通過spark-sql腳本啓動的時候,還是會在哪裏啓動spark-sql腳本,就會在當前目錄下創建一個spark.sql.warehouse.dirspark-warehouse的目錄,存放由spark-sql創建數據庫和創建表的數據信息,與之前hive的數據信息不是放在同一個路徑下(可以互相訪問)。但是此時spark-sql中表的數據在本地,不利於操作,也不安全。

 

所有在啓動的時候需要加上這樣一個參數:

--conf  spark.sql.warehouse.dir=hdfs://node1:9000/user/hive/warehouse

保證spark-sql啓動時不在產生新的存放數據的目錄,sparksqlhive最終使用的是hive同一存放數據的目錄。

如果使用的是spark2.0之前的版本,由於沒有sparkSession,不會有spark.sql.warehouse.dir配置項,不會出現上述問題。

 

最後的執行腳本;

spark-sql \

--master spark://node1:7077 \

--executor-memory 1g \

--total-executor-cores 2 \

--conf  spark.sql.warehouse.dir=hdfs://node1:9000/user/hive/warehouse

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章