官术网_书友最值得收藏!

11.2 Spark與Alluxio整合原理與實戰

Alluxio以前稱為Tachyon,是世界上第一個內存速度虛擬分布式存儲系統。它統一數據訪問、橋接計算框架和底層存儲系統。應用程序只需要連接Alluxio來訪問存儲在任何底層存儲系統中的數據。Alluxio以內存為中心的架構使數據訪問速度比現有解決方案更快。

本節講解Spark與Alluxio整合原理及Spark與Alluxio整合實戰。

11.2.1 Spark與Alluxio整合原理

在大數據生態系統中,Alluxio位于計算框架或作業jobs之間,如Apache Spark、Apache MapReduce、Apache HBase、Apache Hive或Apache Flink,以及各種存儲系統,如Amazon S3、Google Cloud Storage、OpenStack Swift、GlusterFS、HDFS、MaprFS、Ceph、NFS和Alibaba OSS。Alluxio為生態系統帶來顯著的性能改善。例如,百度使用Alluxio提升數據分析速度近30倍;Barclays(巴克萊)銀行使用Alluxio把不可能變成了可能,從之前計算的小時級變成了秒級;Qunar(去哪兒網)在Alluxio之上進行實時數據分析。除了性能外,傳統存儲系統中的數據通過橋接存儲在Alluxio中進行新的工作負載。用戶可以使用其獨立的集群模式運行Alluxio。例如,在Amazon EC2、Google Compute Engine上,或者使用Apache Mesos或Apache Yarn啟動Alluxio。

Alluxio兼容Hadoop?,F有的數據分析應用程序,如Spark和MapReduce程序,可以運行在Alluxio上,無須任何代碼更改。Alluxio項目是Apache License 2.0下的開源項目,部署在許多公司。它是增長速度最快的開源項目之一。Alluxio擁有三年的開源歷史,吸引了來自150多家機構的600多名參與者,包括阿里巴巴、Alluxio、百度、CMU、谷歌、IBM、英特爾、NJU、紅帽、加州大學伯克利分校。Alluxio項目是Berkeley數據分析堆棧(BDAS)的存儲層,也是Fedora發行版的一部分。Alluxio由100多個組織部署在生產中,并且運行在超過1000個節點的集群上。

Alluxio功能如下。

 靈活的文件API: Alluxio的原生API類似于java.io.File類,提供InputStream和OutputStream接口以及對內存映射I/O的高效支持。建議使用此API從Alluxio獲得最佳性能。Alluxio還提供了一個兼容Hadoop的FileSystem接口,允許Hadoop MapReduce和Spark使用Alluxio代替HDFS。

 提供容錯能力的可插拔存儲:Alluxio將內存中的數據checkpoints到底層存儲系統。Alluxio具有通用接口,可以方便地插入不同的底層存儲系統。Alluxio目前支持Amazon S3、Google Cloud Storage、OpenStack Swift、GlusterFS、HDFS、MaprFS、Ceph、NFS、Alibaba OSS和單節點本地文件系統,并支持許多其他文件系統。

 采用分層存儲,除了內存外,Alluxio還可以管理SSD和HDD,允許將更大的數據集存儲在Alluxio中。數據將自動在不同層之間進行管理,保持熱數據。自定義策略插拔、引腳允許直接的用戶控制。

 統一命名空間: Alluxio通過安裝功能實現跨不同存儲系統的有效數據管理。此外,透明命名可確保在將這些對象持久存儲到底層存儲系統時,保留在Alluxio中創建的對象的文件名和目錄層次結構。

 Lineage血統: Alluxio可以實現高吞吐量寫入,通過使用Lineage提供容錯性,通過重新執行創建輸出的作業恢復丟失的輸出。使用Lineage,應用程序將輸出寫入內存,Alluxio會以異步方式定期檢查輸出到文件系統。如果出現故障,Alluxio將啟動重新計算,以恢復丟失的文件。

 Web UI和命令行:用戶可以通過Web UI輕松瀏覽文件系統。在調試模式下,管理員可以查看每個文件的詳細信息,包括位置、檢查點路徑等。用戶還可以使用./bin/alluxio fs與Alluxio進行交互,例如,復制數據進出文件系統。

在Alluxio上運行Apache Spark。HDFS作為分布式存儲系統,除了HDFS外,Alluxio還支持許多其他存儲系統,支持Spark等框架從任何數量的系統讀取數據或寫入數據。Alluxio與Spark 1.1之后的新版本配合使用。

11.2.2 Spark與Alluxio整合實戰

本節根據Alluxio本地模式與Spark進行整合實戰。

1.在本地運行Alluxio部署的步驟

(1)在Linux系統上安裝JDK 7或更高版本。

(2)安裝部署Alluxio 1.5.0。

下載alluxio-1.5.0的Jar安裝包。

1.   wget http://alluxio.org/downloads/files/1.5.0/alluxio-1.5.0-bin.tar.gz
2.  tar xvfz alluxio-1.5.0-bin.tar.gz
3.  cd alluxio-1.5.0

在本地獨立模式下運行,配置以下內容。

 設置alluxio.master.hostname:在conf/alluxio-site.properties配置為localhost(即alluxio.master.hostname=localhost)。

 設置alluxio.underfs.address:在conf/alluxio-site.properties配置本地文件系統中的tmp目錄(例如,alluxio.underfs.address=/tmp)。

 打開遠程登錄服務:登錄ssh localhost成功。如無需重復輸入密碼,則可配置主機的公共ssh密鑰~/.ssh/authorized_keys。

格式化Alluxio文件系統。注意:首次運行Alluxio時,才需要執行此步驟。如果為現有Alluxio群集運行此命令,則Alluxio文件系統中之前存儲的所有數據和元數據將被刪除。但是,存儲中的數據將不會更改。

1.  ./bin/alluxio format

在本地啟動Alluxio文件系統:運行以下命令啟動Alluxio文件系統。在Linux上,為了設置RAMFS,此命令可能需要輸入密碼,以獲取sudo權限。

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

(3)驗證Alluxio正在運行。

要驗證Alluxio是否正在運行,可以訪問http://localhost:19999,或查看logs文件夾中的日志。也可運行runTests命令進行檢查。

1.  ./bin/alluxio runTests

(4)停止Alluxio運行。

1.  ./bin/alluxio-stop.sh local
2.Alluxio本地模式與Spark進行整合

(1)Alluxio客戶端使用Spark特定的配置文件進行編譯。alluxio使用以下命令從頂級目錄構建整個項目。

1.  mvn clean package -Pspark -DskipTests

(2)添加以下行到spark/conf/spark-defaults.conf。

1.   spark.driver.extraClassPath /<PATH_TO_ALLUXIO>/core/client/runtime/target/
     alluxio-core-client-runtime-1.6.0-SNAPSHOT-jar-with-dependencies.jar
2.  spark.executor.extraClassPath         /<PATH_TO_ALLUXIO>/core/client/runtime/
    target/alluxio-core-client-runtime-1.6.0-SNAPSHOT-jar-with-dependenci
    es.jar

(3)HDFS的附加設置:如果Alluxio運行在Hadoop 1.x群集上,則創建一個spark/conf/ core-site.xml包含以下內容的新文件。

1.  <configuration>
2.   <property>
3.     <name>fs.alluxio.impl</name>
4.      <value>alluxio.hadoop.FileSystem</value>
5.    </property>
6.  </configuration>

(4)如果使用zookeeper在容錯模式下運行alluxio,并且Hadoop集群是1.x,將以下內容添加到之前的spark/conf/core-site.xml。

1.      <property>
2.    <name>fs.alluxio-ft.impl</name>
3.    <value>alluxio.hadoop.FaultTolerantFileSystem</value>
4.  </property>

增加以下內容到spark/conf/spark-defaults.conf。

1.  spark.driver.extraJavaOptions
    -Dalluxio.zookeeper.address=zookeeperHost1:2181,zookeeperHost2:2181
    -Dalluxio.zookeeper.enabled=true
2.  spark.executor.extraJavaOptions
    -Dalluxio.zookeeper.address=zookeeperHost1:2181,zookeeperHost2:2181
    -Dalluxio.zookeeper.enabled=true

(5)使用Alluxio作為Spark應用程序的輸入和輸出源。

使用Alluxio中的數據。首先,把一些本地數據復制到Alluxio文件系統。將文件LICENSE放入Alluxio中,假設在Alluxio項目目錄中:

1.  bin/alluxio fs copyFromLocal LICENSE /LICENSE

運行spark-shell,Alluxio Master在localhost模式下運行。

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

(6)我們已經在Spark應用程序中讀入和保存了Alluxio系統中的文件,進行檢查驗證。

打開瀏覽器檢查http://localhost:19999/browse。應該有一個輸出文件LICENSE2,使LICENSE原文件中的每行內容都輸出兩次。

Alluxio的更多內容,讀者可以登錄Alluxio的官網(http://www.alluxio.org/)進行學習。

主站蜘蛛池模板: 灵台县| 丘北县| 安平县| 景德镇市| 平乐县| 庆元县| 句容市| 彭泽县| 平塘县| 广汉市| 台东县| 三门峡市| 保靖县| 西贡区| 社旗县| 客服| 右玉县| 梨树县| 嫩江县| 三江| 南江县| 堆龙德庆县| 萝北县| 永福县| 苍溪县| 金阳县| 天长市| 靖远县| 丹寨县| 甘南县| 岳池县| 芒康县| 类乌齐县| 枣庄市| 大渡口区| 色达县| 崇仁县| 涿州市| 莱州市| 三门峡市| 江西省|