日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Spark SQL来读取现有Hive中的数据

發布時間:2024/1/23 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spark SQL来读取现有Hive中的数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Spark SQL主要目的是使得用戶可以在Spark上使用SQL,其數據源既可以是RDD,也可以是外部的數據源(比如Parquet、Hive、Json等)。
Spark SQL的其中一個分支就是Spark on Hive,也就是使用Hive中HQL的解析、邏輯執行計劃翻譯、執行計劃優化等邏輯,可以近似認為僅將物理執行計劃從MR作業替換成了Spark作業。
本文就是來介紹如何通過Spark SQL來讀取現有Hive中的數據。
不過,預先編譯好的Spark assembly包是不支持Hive的,如果你需要在Spark中使用Hive,必須重新編譯,加上<code>-Phive</code>選項既可,具體如下:
[iteblog@spark]$ ./make-distribution.sh --tgz -Phadoop-2.2 -Pyarn -DskipTests -Dhadoop.version=2.2.0? -Phive
編譯完成之后,會在SPARK_HOME的lib目錄下多產生三個jar包,分別是datanucleus-api-jdo-3.2.6.jar、datanucleus-core-3.2.10.jar、datanucleus-rdbms-3.2.9.jar,這些包都是Hive所需要的。下面就開始介紹步驟。

一、環境準備
為了讓Spark能夠連接到Hive的原有數據倉庫,我們需要將Hive中的hive-site.xml文件拷貝到Spark的conf目錄下,這樣就可以通過這個配置文件找到Hive的元數據以及數據存放。
如果Hive的元數據存放在Mysql中,我們還需要準備好Mysql相關驅動,比如:mysql-connector-java-5.1.22-bin.jar。
二、啟動spark-shell</h2>
環境準備好之后,為了方便起見,我們使用spark-shell來進行說明如何通過Spark SQL讀取Hive中的數據。我們可以通過下面的命令來啟動spark-shell:
[iteblog@spark]$? bin/spark-shell --master yarn-client? --jars lib/mysql-connector-java-5.1.22-bin.jar
....
15/08/27 18:21:25 INFO repl.SparkILoop: Created spark context..
Spark context available as sc.
....
15/08/27 18:21:30 INFO repl.SparkILoop: Created sql context (with Hive support)..
SQL context available as sqlContext.

啟動spark-shell的時候會先向ResourceManager申請資源,而且還會初始化SparkContext和SQLContext實例。sqlContext對象其實是HiveContext的實例,sqlContext是進入Spark SQL的切入點。接下來我們來讀取Hive中的數據。

scala> sqlContext.sql(&quot;CREATE EXTERNAL? TABLE IF NOT EXISTS ewaplog (key STRING, value STRING)
STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION '/user/iteblog/ewaplog' &quot;)

res0: org.apache.spark.sql.DataFrame = [result: string]

scala> sqlContext.sql(&quot;LOAD DATA LOCAL INPATH '/data/test.lzo' INTO TABLE ewaplog&quot;)
res1: org.apache.spark.sql.DataFrame = [result: string]

scala> sqlContext.sql(&quot;FROM ewaplog SELECT key, value&quot;).collect().foreach(println)

我們先創建了ewaplog表,然后導入數據,最后查詢。我們可以看出所有的SQL和在Hive中是一樣的,只是在Spark上運行而已。在執行SQL的時候,默認是調用hiveql解析器來解析SQL的。當然,你完全可以調用Spark SQL內置的SQL解析器sql,可以通過spark.sql.dialect
參數來設置。但是建議還是使用hivesql解析器,因為它支持的語法更多,而且還支持Hive的UDF函數,在多數情況下推薦使用hivesql解析器。

總結

以上是生活随笔為你收集整理的Spark SQL来读取现有Hive中的数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。