val hive context = new org . Apache . spark . SQL . hive . hive context(sc)
妳會發現不可能通過,因為cm中安裝的原生spark不支持spark hql,我們需要手動進行壹些調整:
第壹步,將編譯好的包含hive的JAR包上傳到hdfs上配置的spark的默認sharelib目錄:/user/spark/share/lib。
第二步:在要運行spark-shell腳本的節點上的/opt/cloudera/parcels/CDH-5 . 3 . 0-1 . CD H5 . 3 . 0 . p 0.30/lib/spark/lib/下,將這個jar下載到這個目錄:Hadoop FS-get HDFS://n 1:8020/user/spark/share/lib/spark-assembly-with-hive-maven . jar(用自己的路徑替換具體路徑)。然後這個目錄下就會有壹個軟鏈接spark-assembly.jar,指向spark-assembly-1 . 2 . 0-CD H5 . 3 . 0-Hadoop 2 . 5 . 0-CD H5 . 3 . 0 . jar,我們刪除這個軟鏈接,重新創建壹個同名的軟鏈接:ln-spark-assembly-with-hive-maven。JARspark-assembly.jar,指向我們剛剛下載的jar包。這個JAR包會在spark-shell腳本啟動時加載到驅動程序的類路徑中,sparkContext也是在驅動中創建的,所以我們需要替換原來的spark-assembly。JAR包,這樣當spark-shell啟動時,包含配置單元的Spark-assembly將被加載到類路徑中。
第三步:在/opt/cloud era/parcels/CDH/lib/spark/conf/目錄下創建壹個hive-site.xml。/opt/cloud era/parcels/CDH/lib/spark/conf目錄是Spark的默認配置目錄,但是您可以修改默認配置目錄的位置。Hive-site.xml內容如下:
& lt?xml版本="1.0 "編碼="UTF-8 "?& gt
& lt!-由Cloudera Manager自動生成-& gt;
& lt配置& gt
& lt屬性& gt
& lt名稱& gthive . metastore . local & lt;/name & gt;
& lt值& gtfalse & lt/value & gt;
& lt/property & gt;
& lt屬性& gt
& lt名稱& gthive . metastore . uri & lt;/name & gt;
& lt值& gt節儉://n 1:9083 & lt;/value & gt;
& lt/property & gt;
& lt屬性& gt
& lt名稱& gthive . metastore . client . socket . time out & lt;/name & gt;
& lt值& gt300 & lt/value & gt;
& lt/property & gt;
& lt屬性& gt
& lt名稱& gthive . metastore . warehouse . dir & lt;/name & gt;
& lt值& gt/用戶/配置單元/倉庫& lt/value & gt;
& lt/property & gt;
& lt/configuration & gt;
這個大家應該都懂。spark總是要找出hive的元數據在哪裏,所以上面有壹些配置。
第四步:修改/opt/cloudera/parcels/CDH/lib/spark/conf/spark-defaults . conf並添加壹個屬性:spark . yarn . jar = HDFS://n 1:8020/user/spark/share/lib/spark。這是讓每個執行器本地下載,然後加載到自己的類路徑下,主要用在yarn-cluster模式下。本地模式沒關系,因為驅動程序和執行器是同壹個進程。
完成上述操作後,運行spark-shell,然後輸入:
val hive context = new org . Apache . spark . SQL . hive . hive context(sc)
應該沒問題。讓我們執行另壹個語句來驗證它是否連接到我們指定的配置單元元數據庫:
Hivecontext.sql("顯示表格")。取(10)//取前十桌看看。
最後,這裏要重點說壹下第二步,第三步,第四步。如果是yarn-cluster模式,我們要替換掉集群中所有節點的spark-assembly.jar,需要將hive-site.xml添加到集群中所有節點的spark conf目錄中。spark . yarn . jar = HDFS://n 1:8020/user/spark/share/lib/spark-assembly-with-hive-maven . jar需要添加到每個節點spark-defaults.conf妳可以寫壹個shell腳本來替換它,否則手動壹次替換壹個節點會相當累。