1. 程式人生 > >Cloudera之旅 ☞ 【二】Spark-sql部署

Cloudera之旅 ☞ 【二】Spark-sql部署

參考

概述

由於cloudera自帶的spark-yarn不支援沒有spark-sql(也許是cloudera推廣自己的impala吧),但是如果我們線上要用spark直接寫原生的必然效率低很多
這裡簡單描述下自己遇到的兩個超級大坑

  • 剛開始沒注意,直接看了下cdh5.4.3帶的spark版本(1.3.0)然後直接從官網下載下來個編譯是編譯完成了,最後jar打進去發現社群的spark對應的hive是0.13版本直接hive的metstore版本對不上,慘了。
  • 從cloudera的官網下載spark1.3.0-cloudera原始碼編譯,死活hive-thriftserver編譯不過去,追其原因是由於spark1.3.0支援的hive最高到0.13版本,而cloudera5.4.3支援的hive是1.1.0(好吧cloudera直接給你挖個坑等著你跳)

無奈,最後直接從官網下載最新版的spark1.6(也不一定最新版,內建hive版本高於cloudera的都可以)

環境

  • cloudera manager:5.5.0(免費版)
    • hadoop:2.6.0
    • hive:1.1.0
  • maven:3.3.9
  • spark :1.6(社群最新版本)
    • 說明spark1.3.0對應hive是0.12和0.13不支援1.1.0+(這裡相當坑)
  • scala :2.10.5
  • java :1.7.0_67

注意:
- 這裡特別說明CM中的Hadoop和hive版本是由於預設spark社群使用的hadoop、hive與cloudera內建的不相同,這裡我們要在編譯的時候調整pom.xml檔案
- 其次這裡我們scala和java儘量的和spark內建版本一致

部署

調整mvn記憶體

spark官方要求編譯時候記憶體要設定2G以上

[root@testhost43 spark-1.6.0]# export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

調整pom.xml檔案

注意這裡由於我們整的是cloudera的包,所以還得改hive.group為org.apache.hive才能找到hive-exec-xxx-cloudera-xxx.pom

[[email protected] spark-1.6.0]# vi pom.xml
......
<!-- Version used in Maven Hive dependency -->
<hive.group>org.apache.hive</hive.group> <!--<hive.group>org.spark-project.hive</hive.group>--> <!--<hive.version>1.2.1.spark</hive.version>--> <hive.version>${cdh.hive.version}</hive.version> <!--<hive.version.short>1.2.1</hive.version.short>--> <hive.version.short>1.1.0</hive.version.short> ......

調整mvn庫

國內資源一直很蛋疼,這裡新增oschina的mvn庫和cloudera的庫(hive要下載cloudera的)



......
<repository>
      <id>nexus</id>
      <name>local private nexus</name>
      <url>http://maven.oschina.net/content/groups/public/</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
</repository>
<repository>
      <id>cdh.repo</id>
      <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
      <name>Cloudera Repositories</name>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
    <repository>
      <id>cdh.snapshots.repo</id>
      <url>https://repository.cloudera.com/artifactory/libs-snapshot-local</url>
      <name>Cloudera Snapshots Repository</name>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <releases>
        <enabled>false</enabled>
      </releases>
    </repository>
......
<pluginRepository>
        <id>nexus</id>
        <name>local private nexus</name>
        <url>http://maven.oschina.net/content/groups/public/</url>
        <releases>
           <enabled>true</enabled>
        </releases>
        <snapshots>
           <enabled>false</enabled>
        </snapshots>
</pluginRepository>
......

執行mvn編譯

mvn -Pyarn -Dhadoop.version=2.6.0-cdh5.5.0 -Dcdh.hive.version=1.1.0-cdh5.5.0 -Phive -Phive-thriftserver -DskipTests clean package

再次提醒注意版本,超級慢,編譯完噼裡啪啦的一堆警告,先不管
注意:這裡如果你的scala版本比pom.xml中版本高那麼你需要通過-Dscala.version引數指定。

拷貝&部署assembly jar檔案