溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

cloudera怎么在spark-shell命令行執(zhí)行spark hql

發(fā)布時(shí)間:2021-11-08 15:07:17 來源:億速云 閱讀:165 作者:小新 欄目:云計(jì)算

這篇文章主要為大家展示了“cloudera怎么在spark-shell命令行執(zhí)行spark hql”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“cloudera怎么在spark-shell命令行執(zhí)行spark hql”這篇文章吧。

編譯支持hive的spark assembly

原生的spark assembly jar是不依賴hive的,如果要使用spark hql必須將hive相關(guān)的依賴包打到spark assembly jar中來。打包方法:

假設(shè)已經(jīng)裝好了maven,

1添加環(huán)境變量,如果jvm的這些配置太小的話,可能導(dǎo)致在編譯過程中出現(xiàn)OOM,因此放大一些:

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

2 將spark源碼下的scalastyle-config.xml,復(fù)制到assembly下

3 cd到spark源碼目錄,執(zhí)行:

mvn -Pyarn -Dhadoop.version=2.5.0-cdh6.3.0  -Dscala-2.10.4 -Phive -Phive-thriftserver   -DskipTests clean package

(用cdh版本的只要寫 mvn -Pyarn -Phive -DskipTests clean package就可以了)

注意hadoop.version和scala的版本設(shè)置成對(duì)應(yīng)的版本

經(jīng) 過漫長的編譯過程(我編譯了2個(gè)半小時(shí)),最終成功了,在assembly/target/scala-2.10目錄下面有spark- assembly-1.2.0-cdh6.3.0-hadoop2.5.0-cdh6.3.0.jar文件,用rar打開看看hive jdbc package有沒有包含在里面,有的話說明編譯成功了。

cloudera如何在spark-shell命令行執(zhí)行spark hql

前面介紹如何編譯包含hive的spark-assembly.jar了
cloudera manager裝好的spark,直接執(zhí)行spark-shell進(jìn)入命令行后,寫入如下語句:

  1. val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)  


你會(huì)發(fā)現(xiàn)沒法執(zhí)行通過,因?yàn)閏m裝的原生的spark是不支持spark hql的,我們需要手動(dòng)進(jìn)行一些調(diào)整:
第一步,將編譯好的包含hive的JAR包上傳到hdfs上配置的默認(rèn)的spark的sharelib目錄:/user/spark/share/lib

cloudera怎么在spark-shell命令行執(zhí)行spark hql
第二步:在你要運(yùn)行spark-shell腳本的節(jié)點(diǎn)上的/opt/cloudera/parcels/CDH- 5.3.0-1.cdh6.3.0.p0.30/lib/spark/lib/目錄下面,下載這個(gè)jar到這個(gè)目錄:hadoop fs -get hdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar(具 體路徑替換成你自己的)。然后這個(gè)目錄下面原來會(huì)有個(gè)軟鏈接spark-assembly.jar指向的是spark-assembly-1.2.0- cdh6.3.0-hadoop2.5.0-cdh6.3.0.jar,我們把這個(gè)軟鏈接刪除掉重新創(chuàng)建一個(gè)同名的軟鏈接:ln -s spark-assembly-with-hive-maven.jar spark-assembly.jar,指向我們剛下載下來的那個(gè)JAR包,這個(gè)JAR包會(huì)在啟動(dòng)spark-shell腳本時(shí)裝載到driver program的classpath中去的,sparkContext也是在driver中創(chuàng)建出來的,所以需要將我們編譯的JAR包替換掉原來的 spark-assembly.jar包,這樣在啟動(dòng)spark-shell的時(shí)候,包含hive的spark-assembly就被裝載到 classpath中去了。

第三步:在/opt/cloudera/parcels/CDH/lib/spark/conf/目錄下面創(chuàng)建一個(gè) hive-site.xml。/opt/cloudera/parcels/CDH/lib/spark/conf目錄是默認(rèn)的spark的配置目錄,當(dāng) 然你可以修改默認(rèn)配置目錄的位置。hive-site.xml內(nèi)容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!--Autogenerated by Cloudera Manager-->
<configuration>
  <property>
    <name>hive.metastore.local</name>
    <value>false</value>
  </property>
  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://n1:9083</value>
  </property>
  <property>
    <name>hive.metastore.client.socket.timeout</name>
    <value>300</value>
  </property>
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  </property>
</configuration>


這個(gè)應(yīng)該大家都懂的,總要讓spark找到hive的元數(shù)據(jù)在哪吧,于是就有了上面一些配置。

第四步:修改/opt/cloudera/parcels/CDH/lib/spark/conf/spark- defaults.conf,添加一個(gè)屬性:spark.yarn.jar=hdfs://n1:8020/user/spark/share/lib /spark-assembly-with-hive-maven.jar。這個(gè)是讓每個(gè)executor下載到本地然后裝載到自己的classpath 下面去的,主要是用在yarn-cluster模式。local模式由于driver和executor是同一個(gè)進(jìn)程所以沒關(guān)系。

以上完事之后,運(yùn)行spark-shell,再輸入:
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)

應(yīng)該就沒問題了。我們?cè)賵?zhí)行一個(gè)語句驗(yàn)證一下是不是連接的我們指定的hive元數(shù)據(jù)庫:
hiveContext.sql("show tables").take(10)   //取前十個(gè)表看看

最后要重點(diǎn)說明一下這里的第二步第三步和第四步,如果是yarn-cluster模式的話,應(yīng)該替換掉集群所有節(jié)點(diǎn)的spark- assembly.jar集群所有節(jié)點(diǎn)的spark conf目錄都需要添加hive-site.xml,每個(gè)節(jié)點(diǎn)spark-defaults.conf都需要添加 spark.yarn.jar=hdfs://n1:8020/user/spark/share/lib/spark-assembly-with- hive-maven.jar。可以寫個(gè)shell腳本來替換,不然手動(dòng)一個(gè)一個(gè)節(jié)點(diǎn)去替換也是蠻累的。

以上是“cloudera怎么在spark-shell命令行執(zhí)行spark hql”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI