秋名山老司機從上車到翻車的悲痛經歷,帶你深刻了解什麼是 Spark on Hive!| 原力計劃...

作者 | Alice菌

責編 | 夕顏

出品 | CSDN博客

本篇博客將爲大家分享的內容是如何實現Spark on Hive,即讓Hive只作爲存儲角色,Spark負責sql解析優化,執行…話不多說,直接上車!

        

上車前需知

Spark on hive 與 hive on spark 的區別

1. Spark on hive

是spark 通過Spark-SQL使用hive 語句,操作hive ,底層運行的還是 spark rdd。

(1)就是通過sparksql,加載hive的配置文件,獲取到hive的元數據信息

(2)spark sql獲取到hive的元數據信息之後就可以拿到hive的所有表的數據

(3)接下來就可以通過spark sql來操作hive表中的數據

2.hive on spark

是把hive查詢從mapreduce 的mr (Hadoop計算引擎)操作替換爲spark rdd(spark 執行引擎) 操作. 相對於spark on hive,這個要實現起來則麻煩很多, 必須重新編譯你的spark和導入jar包,不過目前大部分使用的是spark on hive。

上車

概述

最權威的解釋請見Apache Spark官網,http://spark.apache.org/docs/latest/sql-data-sources-hive-tables.html

其中最關鍵的一句博主已經爲大家提取出來了

Configuration of Hive is done by placing your hive-site.xml, core-site.xml (for security configuration), and hdfs-site.xml (for HDFS configuration) file in conf/.

到底是什麼意思呢,這裏先賣個關子,看到後面大夥就懂了。

  • Hive查詢流程及原理

    • 執行HQL時,先到MySQL元數據庫中查找描述信息,然後解析HQL並根據描述信息生成MR任務;

    • Hive將SQL轉成MapReduce執行速度慢;

    • 使用SparkSQL整合Hive其實就是讓SparkSQL去加載Hive 的元數據庫,然後通過SparkSQL執行引擎去操作Hive表內的數據;

    首先需要開啓Hive的元數據庫服務,讓SparkSQL能夠加載元數據。

 

發車

一、Hive開啓MetaStore服務

<1>修改 hive/conf/hive-site.xml 新增如下配置:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
      <name>hive.metastore.warehouse.dir</name>
      <value>/user/hive/warehouse</value>
    </property>
    <property>
      <name>hive.metastore.local</name>
      <value>false</value>
    </property>
    <property>
      <name>hive.metastore.uris</name>
      <value>thrift://node01:9083</value>
    </property>
 </configuration>

<2>後臺啓動 Hive MetaStore服務

nohup /export/servers/hive/bin/hive --service metastore 2>&1 >> /var/log.log &

二、SparkSQL整合Hive MetaStore

Spark 有一個內置的 MateStore,使用 Derby 嵌入式數據庫保存數據,但是這種方式不適合生產環境,因爲這種模式同一時間只能有一個 SparkSession 使用,所以生產環境更推薦使用 Hive 的 MetaStore。

SparkSQL 整合 Hive 的 MetaStore 主要思路就是要通過配置能夠訪問它, 並且能夠使用 HDFS 保存 WareHouse,所以可以直接拷貝 Hadoop 和 Hive 的配置文件到 Spark 的配置目錄。

        hive-site.xml 元數據倉庫的位置等信息

        core-site.xml 安全相關的配置

        hdfs-site.xml HDFS 相關的配置

        

我們進入到shell窗口,執行以下命令。

將hive目錄下的hive-site.xml拷貝至spark安裝目錄下:

cp /export/servers/hive-1.1.0-cdh5.14.0/conf/hive-site.xml /export/servers/spark/conf

將hadoop安裝目錄下的core-site.xml和 hdfs-site.xml拷貝至spark安裝目錄下

cp /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/core-site.xml /export/servers/spark/conf
cp /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/hdfs-site.xml /export/servers/spark/conf

提示:使用IDEA本地測試直接把以上配置文件放在resources目錄即可。

飆車

先完成如下所示的代碼,使用SparkSQL完成創建一個表,並將本地文件中的數據導入到表格中的操作。

使用SparkSQL操作Hive表:

import org.apache.spark.sql.SparkSession




object HiveSupport {
  def main(args: Array[String]): Unit = {
    //創建sparkSession
    val spark = SparkSession
      .builder()
      .appName("HiveSupport")
      .master("local[*]")
      .config("spark.sql.warehouse.dir", "hdfs://node01:8020/user/hive/warehouse")
      .config("hive.metastore.uris", "thrift://node01:9083")
      .enableHiveSupport()//開啓hive語法的支持
      .getOrCreate()




    // 設置日誌級別
    spark.sparkContext.setLogLevel("WARN")




    //查看有哪些表
    spark.sql("show tables").show()




    //創建表
    spark.sql("CREATE TABLE person (id int, name string, age int) row format delimited fields terminated by ' '")




    //加載數據,數據爲當前SparkDemo項目目錄下的person.txt(和src平級)
    spark.sql("LOAD DATA LOCAL INPATH 'in/person.txt' INTO TABLE person")




    //查詢數據
    spark.sql("select * from person ").show()




    spark.stop()
  }
}

在運行程序之前,先讓我們進入到hive的shell窗口,查看一下當前默認數據庫default有哪些表:

hive (default)> show tables;


OK
tab_name
student
techer
techer2
Time taken: 0.738 seconds, Fetched: 3 row(s)
hive (default)>

然後右鍵運行,當IDEA控制檯打印以下結果,說明我們的程序運行成功了。

再次進入到hive的shell窗口,查看當前表,此時已經發現了我們剛剛用SparkSQL所創建的表:

翻車

正當博主終於長舒了一口氣,準備拿出82年珍藏的雷碧小酢一杯的時候,電腦可能是饞哭了,直接藍屏警告。

好了,不說了,說多了都是淚,本次的分享就到這裏,身爲蒟蒻本蒻的我去搶救電腦了,或許喂Ta喝點也不至於罷工是吧 ̄へ ̄

版權聲明:本文爲CSDN博主「Alice菌」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/weixin_44318830/java/article/details/105471548

推薦閱讀

真香,朕在看了!

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