"Spark 1.6 + Alluxio 1.2 + OFF_HEAP" 的配置

我們知道,Spark + Tachyon 可以解決 Spark 在使用過程中的一些問題,可以總結爲 數據共享GC 等問題。
但是呢,Tachyon 在今年已經更名爲 Alluxio,並且其訪問schema也從tachyon修改爲alluxio;Spark 1.6 的版本也在維護中;可是,到目前爲止,Spark還沒有將之前的 Tachyon 的協議修改爲 Alluxio 的協議,因此 Alluxio 就沒有辦法很順利的與 Spark 進行結合使用。此處所說的結合是針對RDD在persist時使用 OFF_HEAP 的方式。


一、如何解決上面的問題呢?

方案是,針對alluxio自定義開發一個了繼承自ExternalBlockManager的 AlluxioBlockManager,即可。但是在自定義之前,還是先到網上找找看有沒有已經開源的實現方案呢,結果還是被我找到了兩個:
1、https://github.com/winse/spark-alluxio-blockstorage
2、https://github.com/chengqiangboy/spark-alluxio-blockstore

經過測試,我發現第一個在使用中沒有問題,但是第二個總是會報錯,因此下面使用第一個的開源實現來進行配置。
需要說明的是,在Alluxio中 ALLUXIO_UNDERFS_ADDRESS 千萬不要配置爲本地目錄,不然,你的測試會總是報錯,一定要配置爲HDFS集羣,至於爲什麼,沒有去深究。


二、Spark1.6 + Alluxio 1.2 配置

1、到
https://github.com/winse/spark-alluxio-blockstorage
下載 AlluxioBlockManager.scala 文件,並進行編譯打包爲 spark-alluxio-blockstore.jar

2、將alluxio-core-client-spark-1.2.0-jar-with-dependencies.jar、 spark-alluxio-blockstore.jar 放到所有Spark節點的lib目錄下。並在 conf/spark-env.sh 的 SPARK_CLASSPATH 環境變量中加上這兩個jar的路徑,Spark 集羣中所有的節點都需要這樣配置。

echo 'export SPARK_CLASSPATH=/usr/spark-1.6.0/lib/alluxio-core-client-spark-1.2.0-jar-with-dependencies.jar:$SPARK_CLASSPATH' >> conf/spark-env.sh
echo 'export SPARK_CLASSPATH=/usr/spark-1.6.0/lib/ spark-alluxio-blockstore.jar:$SPARK_CLASSPATH' >> conf/spark-env.sh

3、在 conf/spark-defaults.conf 修改 spark.externalBlockStore 的相關配置,如下:

spark.externalBlockStore.blockManager org.apache.spark.storage.AlluxioBlockManager
spark.externalBlockStore.subDirectories 8
spark.externalBlockStore.url alluxio://hdfs-yarn-1:19998
spark.externalBlockStore.baseDir /tmp_spark_alluxio

三、測試

1、以文件方式訪問

val file = sc.textFile("/home/hadoop/sample-1g")
file.saveAsTextFile("alluxio://hdfs-yarn-1:19998/sample-1g")
val alluxioFile = sc.textFile("alluxio://hdfs-yarn-1:19998/sample-1g")
alluxioFile.count()

2、調用RDD的persist,並使用OFF_HEAP進行數據緩存
在 spark-shell 中運行下面的測試代碼:

val file = sc.textFile("/home/hadoop/sample-1g",4)
file.persist(org.apache.spark.storage.StorageLevel.OFF_HEAP)
file.count()

6、查看 Alluxio 中的緩存情況
這裏寫圖片描述
從上面的圖片中可以看到,已經緩存到Alluxio中了。

由於這個是開源的方案,所以在應用到真實環境之前,大家還是要多測試測試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章