SparkSQL讀取Hive中的資料

來源:互聯網
上載者:User

SparkSQL讀取Hive中的資料

由於我Spark採用的是Cloudera公司的CDH,並且安裝的時候是線上自動安裝和部署的叢集。最近在學習SparkSQL,看到SparkSQL on HIVE。下面主要是介紹一下如何通過SparkSQL在讀取HIVE的資料。

(說明:如果不是採用CDH線上自動安裝和部署的話,可能需要對源碼進行編譯,使它能夠相容HIVE。

編譯的方式也很簡單,只需要在Spark_SRC_home(源碼的home目錄下)執行如下命令:

./make-distribution.sh --tgz -PHadoop-2.2 -Pyarn -DskipTests -Dhadoop.version=2.6.0-cdh5.4.4 -Phive

編譯好了之後,會在lib目錄下多幾個jar包。)

下面我主要介紹一下我使用的情況:

1、為了讓Spark能夠串連到Hive的原有資料倉儲,我們需要將Hive中的hive-site.xml檔案拷貝到Spark的conf目錄下,這樣就可以通過這個設定檔找到Hive的中繼資料以及資料存放。

在這裡由於我的Spark是自動安裝和部署的,因此需要知道CDH將hive-site.xml放在哪裡。經過摸索。該檔案預設所在的路徑是:/etc/hive/conf 下。

同理,spark的conf也是在/etc/spark/conf。

此時,如上所述,將對應的hive-site.xml拷貝到spark/conf目錄下即可

  如果Hive的中繼資料存放在Mysql中,我們還需要準備好Mysql相關驅動,比如:mysql-connector-java-5.1.22-bin.jar。

2、編寫測試代碼

val conf=new SparkConf().setAppName("Spark-Hive").setMaster("local")
val sc=new SparkContext(conf)
 
//create hivecontext
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
 
sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ")  //這裡需要注意資料的間隔符
 
sqlContext.sql("LOAD DATA INPATH '/user/liujiyu/spark/kv1.txt' INTO TABLE src  ");
 
sqlContext.sql(" SELECT * FROM jn1").collect().foreach(println)
 
sc.stop()

 3、下面列舉一下出現的問題:

(1)如果沒有將hive-site.xml拷貝到spark/conf目錄下,會出現:

 

分析:從錯誤提示上面就知道,spark無法知道hive的中繼資料的位置,所以就無法執行個體化對應的client。

解決的辦法就是必須將hive-site.xml拷貝到spark/conf目錄下

(2)測試代碼中沒有加sc.stop會出現如下錯誤:

ERROR scheduler.LiveListenerBus: Listener EventLoggingListener threw an exception
java.lang.reflect.InvocationTargetException

在代碼最後一行添加sc.stop()解決了該問題。

Hive編程指南 PDF 中文高清版 

基於Hadoop叢集的Hive安裝

Hive內表和外表的區別

Hadoop + Hive + Map +reduce 叢集安裝部署

Hive本地獨立模式安裝

Hive學習之WordCount單詞統計

Hive運行架構及配置部署

Hive 的詳細介紹:請點這裡
Hive 的:請點這裡

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.