兼容性
默認的,Spark 1.0.x版本綁定的是Tachyon 0.4.1版本.如果你的Tachyon版本不同,那需要在這個文件:
spark/core/pom.xml
中指定Tachyon的版本,然後重新編譯正確的版本的Spark.
與Tachyon進行數據IO
這一部分的額外前提是Spark(0.6 或者後續版本).另外,假設你在運行Tachyon`site`.`TACHYON_RELEASED_VERSION` 或後續版本的時候通過查閱資料已經搭建好Tachyon和Hadoop 的本地模式或者集羣模式.
如果運行的Spark版本低於1.0.0,那麻煩你把如下內容添加到這個文件:
spark/conf/spark-env.sh
中:
export SPARK_CLASSPATH=/pathToTachyon/client/target/tachyon-client-`site`.`TACHYON_RELEASED_VERSION`-jar-with-dependencies.jar:$SPARK_CLASSPATH
如果是跑在 hadoop 1.x 版本的集羣上,那麼需要創建一個新的文件:
spark/conf/core-site.xml
並把如下內容添加進去:
<configuration>
<property>
<name>fs.tachyon.impl</name>
<value>tachyon.hadoop.TFS</value>
</property>
</configuration>
將文件X寫入HDFS,然後執行如下Spark Shell:
$ ./spark-shell
$ val s = sc.textFile("tachyon://localhost:19998/X")
$ s.count()
$ s.saveAsTextFile("tachyon://localhost:19998/Y")
查看 http://localhost:19999 的話會發現會有個輸出文件 Y 包含有 輸入文件 X 內單詞的數量(一個單詞一行?).
將文件X寫入HDFS,然後執行如下Spark Shell:
如果你通過sbt 或者 其他利用sbt的框架調用 Spark 的job:
val conf = new SparkConf()
val sc = new SparkContext(conf)
sc.hadoopConfiguration.set("fs.tachyon.impl", "tachyon.hadoop.TFS")
如果你的hadoop 集羣版本爲1.x 並且 以Zookeeper的容錯模式 運行Tachyon,需要在之前創建的xml文件: spark/conf/core-site.xml 中添加如下實體(屬性):
<property>
<name>fs.tachyon-ft.impl</name>
<value>tachyon.hadoop.TFS</value>
</property>
在這個文件 spark/conf/spark-env.sh 中添加如下內容:
export SPARK_JAVA_OPTS="
-Dtachyon.zookeeper.address=zookeeperHost1:2181,zookeeperHost2:2181
-Dtachyon.usezookeeper=true
$SPARK_JAVA_OPTS
"
將文件 X 寫入HDFS. 當運行Spark Shell的時候你可以指定任何的Tachyon Master:
$ ./spark-shell
$ val s = sc.textFile("tachyon-ft://stanbyHost:19998/X")
$ s.count()
$ s.saveAsTextFile("tachyon-ft://activeHost:19998/Y")
將 Spark RDDs 在 Tachyon中持久化
爲滿足這個特點,你需要運行 Spark (1.0 或後續版本) 以及 Tachyon (0.4.1 或後續版本). 詳細優點可查閱 Spark Doc .
Spark 應用程序需要設置兩個參數: spark.tachyonStore.url 以及 spark.tachyonStore.baseDir.
spark.tachyonStore.url (默認值爲 tachyon://localhost:19998) 是處於TachyonStore的Tachyon 文件系統的URL. spark.tachyonStore.baseDir (默認值爲 java.io.tmpdir) 存儲RDDs 的Tachyon 文件系統的根目錄. 他可以爲一個由逗號隔開的list,這個list由Tachyon衆多文件夾組成 .
爲了將Spark RDDs 在 Tachyon中持久化, 你需要用到這個參數: StorageLevel.OFF_HEAP . 使用Spark Shell的例子如下:
$ ./spark-shell
$ val rdd = sc.textFile(inputPath)
$ rdd.persist(StorageLevel.OFF_HEAP)
當Spark 應用程序在運行的時候,你可以在Tachyon 的Web界面(默認 URI 爲http://localhost:19999)查看 spark.tachyonStore.baseDir . 你會發現有很多文件在那,他們是RDD塊.通常來講,當Spark 應用程序 運行結束的時候這些文件會被清理乾淨.你也可在Spark 應用中,將Tachyon 作爲輸入輸出源來使用
#這是我第一次翻譯,如有不足,請各位大神們支持^ ^
#By Lucosax
Yang