1. 程式人生 > >spark sql整合hive步驟

spark sql整合hive步驟

SPARK ON HIVE:讓spark sql通過sql的方式去讀取hive當中的資料

HIVE ON SPARK:讓hive的計算引擎由MapReduce改為SPARK

1、  先按官網的參考程式碼,構建

val conf = new SparkConf().setMaster("local[*]").setAppName("hotCount")

val sc = new SparkContext(conf)

    //建立hive的例項

val hiveContext = new HiveContext(sc)

hiveContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")

hiveContext.sql("LOAD DATA LOCAL INPATH 'E:/hive.txt' INTO TABLE src")

// Queries are expressed in HiveQL

hiveContext.sql("FROM src SELECT key, value").collect().foreach(println)

出現:

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V

我們之後在windows當中配置的hadoop版本是從apache下載,但是我們現在所使用的hadoop版本是cdh的。所以出現的版本不一致的問題。

1、  需要去下載一個cdh版本的hadoop

配置HADOOP_HOME的環境變數

   將外掛中的

   中的hadoop.dll檔案 複製到C:/windows/system32目錄下

   在外掛中的其它檔案,複製到hadoop目錄的/bin目錄下。

注意:有可能是外掛問題


現在可以保證,HiveContext可以操作相應的SQL。

但是該SQL操作的內容是來自於windows本地,沒有與hive表進行連線。

   2、讓HiveContext與hive進行連線,出現下面樣式,表示配置已經成功

        將hive-site.xml、hdfs-site.xml、core-site.xml檔案加入resource目錄

        需要在cdh的版本下,去找到hive的配置檔案

2.1:find / -name ‘hive-site.xml’發現有多個配置檔案,建議使用/etc/目錄下的檔案

2.2:在Idea專案去建立一個resource目錄


2.3將配置檔案複製到resource目錄下

注意:在sparksql去連線是通過主機名去訪問的,要讓本地的hosts的ip與主機名對應。

  連線成功了。但是看不到相應的資料

     在hive當中去建立了一個很簡單的表,通過spark sql去測試,發現是可以正常讀取出來的。

     查詢不到結果與表結構有關。

     flume到hive的表需要要求:分桶與orc格式。

     在spark 1.6以及之前不支援。

     在spark 2.*當中是可以通過spark sql來操作的。

將原始表中的資料,轉換成我們計算的單元【根據需求來確定】