最近需要將生產環境的spark1.3版本升級到spark1.6(盡管spark2.0已經發布一段時間了,穩定可靠起見,還是選擇了spark1.6),同時需要基於spark開發一些中間件,因此需要搭建一套windows下的spark的開發環境,方便代碼的編寫和調試。中間遇到了比較多的問題,在此也做一個記錄/總結。
Spark編譯
編譯條件:
- 官方給出的spark預編譯版本是不支持spark on hive的,同時也不能將spark作為hive的執行引擎。如果需要獲得這些支持,則需要自己對spark進行編譯之后再安裝使用。編譯spark前,確保系統已經正確安裝maven且maven版本最好在3.3.9或更高的版本。
- 設定maven編譯內存參數,避免outofmemory錯誤。set MAVEN_OPTS= -Xms2048m -Xmx2048m -XX:MaxPermSize=1024m
- windows/linux環境都可以編譯。
編譯步驟:
- 進入spark官方網址,選定spark版本后,在選定源碼包,開始下載。
- 解壓后進入對應目錄,執行下列命令開始編譯
windows下執行:
mvn --tgz -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0 -Phive -Phive-thriftserver -DskipTests clean package
linux下除了可執行上面的命令外,還可以執行:
./make-distribution.sh --tgz --name 2.6.0 -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0 -Phive -Phive-thriftserver -Pspark-ganglia-lgpl -Pkinesis-asl
其中 -Phadoop-2.6 -Dhadoop.version=2.6.0 指定安裝spark時hadoop版本,一定要對應。 -Phive -Phive-thriftserver讓其支持Hive。 -DskipTests能避免測試不通過時發生的錯誤。
解壓安裝,按照網上通用的方法安裝后,還需要:
Spark安裝:
安裝前,確保Hadoop集群、Mysql、hive已經安裝且能正常使用。
- 將hive/conf/hive-site.xml、hadoop/conf/core-site.xml、hdfs-site.xml拷入spark/conf目錄下。
- 如果hive元數據庫配置的為mysql數據庫,需要將mysql-driver(mysql-connector-java-5.1.38-bin.jar)拷貝至spark安裝目錄的lib目錄下。
驗證安裝:
進入spark安裝目錄的bin目錄下,進入spark-shell交互式環境:
進入spark安裝目錄的bin目錄下,進入spark-shell交互式環境:
./spark-shell --driver-class-path /home/hadoop/spark-1.6.0-bin-hadoop2.6/lib/mysql-connector-java-5.1.38-bin.jar
假設hive中存在testDb數據庫且存在表testDb.test,執行下列命令,spark將連接Hive的元數據庫並查詢對於的數據:
假設hive中存在testDb數據庫且存在表testDb.test,執行下列命令,spark將連接Hive的元數據庫並查詢對於的數據:
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc);
hiveContext.sql("use testDb");
hiveContext.sql("show tables").collect().foreach(println);
hiveContext.sql("select * from testDb.test limit 10").collect().foreach(println);
hiveContext.sql("use testDb");
hiveContext.sql("show tables").collect().foreach(println);
hiveContext.sql("select * from testDb.test limit 10").collect().foreach(println);
沒報錯且輸出數據正常,則說明spark的編譯、安裝正確。
Windows下Spark開發環境的搭建:
通常在推薦系統、報表系統等項目中,還是需要基於spark做一些迭代計算,搭建一個可用的spark開發環境對開發、代碼調試還是非常有用的。
下面簡要記錄寫該過程中的關鍵步驟:
- 下載winutils及hadoop.dll,其中-Dhadoop.home.dir指向winutils所在目錄,hadoop.dll放入系統盤下。
- IDE增加以下運行參數:-Dhadoop.home.dir="D:\\hadoop" -Xms128m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m
- 將hive/conf/hive-site.xml、hadoop/conf/core-site.xml、hdfs-site.xml拷入項目resources目錄下。
- 如果是spark1.6及以上版本版本需將Jackson 版本改為 2.4.4,否則報錯:NoSuchMethodError: com.fasterxml.jackson.module.scala.deser.BigDecimalDeserializer
這樣子差不多就可以正常使用spark做開發了。