Spark讀寫Hive

環境:CDH5.8,Spark:1.6.0;Hadoop:2.6.0,Intellij IDEA14 ,jdk1.8,sdk:2.10.6 ,maven:3.3.3;

工程下載地址:https://github.com/fansy1990/spark_hive_source_destination

1. Spark讀取Hive

Spark讀取Hive,使用的是HiveContext,第一步使用sc生成一個HiveContext,然後其他操作就是在HiveContext裏面操作了;

比如使用HiveContext的tables()方法,那麼就可以得到Hive中所有表的相關信息,使用工程中的hiveinout.SparkReadHive的測試類,在終端中運行:

spark-submit --class hiveinout.SparkReadHive --master yarn --deploy-mode cluster --jars /usr/lib/hive/lib/datanucleus-core-3.2.10.jar --files /usr/lib/hive/conf/hive-site.xml spark_hive-1.0-SNAPSHOT.jar

其中,使用的是Spark On YARN的方式來運行,這裏還需要指定第三方jar,也就是datanucleus相關jar以及hive-site.xml文件,這個是根據Spark官網提供的提示,如下:


運行後,可以在8088端口查看相關輸出,如下:


而在Hive裏面查看,也可以看到這幾個表:


2. Spark寫入Hive

Spark寫入Hive直接使用HiveContext的sql函數執行一個sql語句,直接傳入的就是一個sql語句,具體代碼參考hiveinout.SparkWriteHive代碼,執行參考:

 spark-submit --class hiveinout.SparkWriteHive --master yarn --deploy-mode cluster --jars /usr/lib/hive/lib/datanucleus-core-3.2.10.jar --files /usr/lib/hive/conf/hive-site.xml spark_hive-1.0-SNAPSHOT.jar "create table tmp2 as select product_id,product_name from products"

執行後,得到tmp2表,其結果和tmp1的結果一樣,而生成tmp1表使用的HiveQL代碼是一樣的,如下:


查看tmp1和tmp2表的內容:


3. Spark 寫入Hive

當然,在工程中還提供了一種Spark 寫入Hive的方法:1. 通過其他方式處理得到DataFrame後;2. 使用registerTempTable的方式建立一個臨時表,然後使用HiveContext的sql方法生成新的Hive表;

執行參考:

spark-submit --class hiveinout.SparkReadWriteHive --master yarn --deploy-mode cluster --jars /usr/lib/hive/lib/datanucleus-core-3.2.10.jar --files /usr/lib/hive/conf/hive-site.xml spark_hive-1.0-SNAPSHOT.jar products tmp3

執行後,得到的結果爲:




如果您覺得lz的文章還行,可以爲我投上您寶貴的一票!謝謝!

http://blog.csdn.net/vote/candidate.html?username=fansy1990



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