Spark & Alluxio

概述

Alluxio(在1.0版本之前名為Tachyon)是一個以內(nèi)存分布式存儲系統(tǒng)。它統(tǒng)一了數(shù)據(jù)訪問的方式,為上層計算框架和底層存儲系統(tǒng)構(gòu)建了橋梁。 應(yīng)用只需要連接Alluxio即可訪問存儲在底層任意存儲系統(tǒng)中的數(shù)據(jù)。此外,Alluxio的以內(nèi)存為中心的架構(gòu)使得數(shù)據(jù)的訪問速度能比現(xiàn)有常規(guī)方案快幾個數(shù)量級。

Spark使用Alluxio的好處有如下幾點:

  • 數(shù)據(jù)可以長期存儲在內(nèi)存中,多個應(yīng)用可以共享緩存數(shù)據(jù)
  • 數(shù)據(jù)緩存在JVM外部可以減少程序的GC時間
  • 緩存的數(shù)據(jù)不會因為程序的意外崩潰而消失
  • Alluxiou與Hadoop兼容,無需修改spark代碼,可直接運行

配置

Alluxio的編譯部署

從源碼主分支編譯支持Spark,Hadoop2.4的Alluxio

git clone git://github.com/alluxio/alluxio.git
cd alluxio
mvn install -Pspark -Dhadoop.version=2.4.1 -DskipTests

如果需要編譯一個指定的版本,使用gitcheckout命令即可,例如編譯1.2版本

cd alluxio
git checkout v1.2.0

在HDFS上配置Alluxio

編譯完成后,修改配置文件

cd alluxio/conf
cp alluxio-env.sh.template alluxio-env.sh
ALLUXIO_UNDERFS_ADDRESS=hdfs://localhost:9000/alluxio
ALLUXIO_MASTER_HOSTNAME=xxx
ALLUXIO_RAM_FOLDER=/home/admin/alluxio/ramdisk

在Spark上配置Alluxio

可以在spark-env.sh中配置SPARK_CLASSPATH

export SPARK_CLASSPATH=/usr/install/alluxio/core/client/target/alluxio-core-client-1.3.0-SNAPSHOT-jar-with-dependencies.jar

在spark1.6以上,可以配置在spark-defaults.conf

spark.executor.extraClassPath /usr/install/alluxio/core/client/target/alluxio-core-client-1.3.0-SNAPSHOT-jar-with-dependencies.jar
spark.driver.extraClassPath /usr/install/alluxio/core/client/target/alluxio-core-client-1.3.0-SNAPSHOT-jar-with-dependencies.jar

修改spark/conf下的core-site.xml

<property>
  <name>fs.alluxio.impl</name>
  <value>alluxio.hadoop.FileSystem</value>
  <description>The Alluxio FileSystem (Hadoop 1.x and 2.x)</description>
</property>
<property>
  <name>fs.alluxio-ft.impl</name>
  <value>alluxio.hadoop.FaultTolerantFileSystem</value>
  <description>The Alluxio FileSystem (Hadoop 1.x and 2.x) with fault tolerant support</description>
</property>
<property>
  <name>fs.AbstractFileSystem.alluxio.impl</name>
  <value>alluxio.hadoop.AlluxioFileSystem</value>
  <description>The Alluxio AbstractFileSystem (Hadoop 2.x)</description>
</property>

啟動Alluxio

./bin/alluxio format
./bin/alluxio-start.sh local

此時可以通過http://localhost:19999訪問Alluxio web ui,運行一個test

./bin/alluxio runTests

如果運行成功可以在Browse中看到生成的default_tests_files文件

在Alluxio上運行Spark

就和從普通的文件系統(tǒng)中讀取文件一樣

將LICENSE上傳到HDFS的alluxio目錄

hadoop fs -put -f /alluxio/LICENSE hdfs://localhost:9000/alluxio/LICENSE

進(jìn)行一些操作

val s = sc.textFile("alluxio://localhost:19998/LICENSE")
val double = s.map(line => line + line)
double.saveAsTextFile("alluxio://localhost:19998/LICENSE2")

可以在web ui 中看到保存的文件,當(dāng)然DataFrame的操作也是一樣的,例如

val df = sc.parallelize(Seq("zhangsan","lisi")).toDF("name")
df.write.parquet("alluxio://localhost:19998/people")

一些運行截圖

這里寫圖片描述
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容