11.2 Spark与Alluxio整合原理与实战

l   

11.2  Spark与Alluxio整合原理与实战 

11.2.1Spark与Alluxio整合原理

         Alluxio,以前称为Tachyon,是世界上第一个内存速度虚拟分布式存储系统。它统一数据访问和桥接计算框架和底层存储系统。应用程序只需要连接Alluxio来访问存储在任何底层存储系统中的数据。此外,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。现有的数据分析应用程序,如Spark和MapReduce程序,可以运行在Alluxio之上,无需任何代码更改。Alluxio项目是Apache License 2.0下的开源项目, 部署在许多公司。它是增长速度最快的开源项目之一。Alluxio拥有三年的开源历史,吸引了来自150 多家机构的600多名参与者,包括阿里巴巴,Alluxio, 百度,CMU,谷歌, IBM,英特尔,NJU, 红帽,加州大学伯克利分校。Alluxio项目是Berkeley数据分析堆栈(BDAS)的存储层,也是Fedora发行版的一部分 。Alluxio由100多个组织部署在生产中,并且运行在超过1,000个节点的集群上。

 

Alluxio功能:

l  灵活的文件API: Alluxio的原生API类似于java.io.File类,提供InputStream和OutputStream接口以及对内存映射I / O的高效支持。建议使用此API从Alluxio获得最佳性能。Alluxio还提供了一个兼容Hadoop的FileSystem接口,允许Hadoop MapReduce和Spark使用Alluxio代替HDFS。

l  提供容错能力的可插拔存储:Alluxio将内存中的数据checkpoints到底层存储系统。Alluxio具有通用接口,可以方便地插入不同的底层存储系统。Alluxio目前支持Amazon S3,Google Cloud Storage,OpenStack Swift,GlusterFS,HDFS,MaprFS,Ceph,NFS,Alibaba OSS和单节点本地文件系统,并支持许多其他文件系统。

l  采用分层存储,除了内存之外,Alluxio还可以管理SSD和HDD,允许将更大的数据集存储在Alluxio中。数据将自动在不同层之间进行管理,保持热数据。自定义策略插拔、引脚允许直接的用户控制。

l  统一命名空间: Alluxio通过安装功能实现跨不同存储系统的有效数据管理。此外,透明命名可确保在将这些对象持久存储到底层存储系统时,保留在Alluxio中创建的对象的文件名和目录层次结构。

l  Lineage血统: Alluxio可以实现高吞吐量写入,通过使用Lineage提供容错性,通过重新执行创建输出的作业来恢复丢失的输出。使用Lineage,应用程序将输出写入内存,Alluxio会以异步方式定期检查输出到文件系统。如果出现故障,Alluxio将启动重新计算以恢复丢失的文件。

l  Web UI和命令行:用户可以通过Web UI轻松浏览文件系统。在调试模式下,管理员可以查看每个文件的详细信息,包括位置,检查点路径等。用户还可以使用 ./bin/alluxio fs与Alluxio进行交互,例如复制数据进出文件系统。

在Alluxio上运行Apache Spark。HDFS作为分布式存储系统,除了HDFS之外,Alluxio还支持许多其他存储系统,支持Spark等框架从任何数量的系统读取数据或将数据写入数据。Alluxio与Spark 1.1 之后新版本配合使用。

11.2.2Spark与Alluxio整合实战

本节根据Alluxio本地模式与Spark进行整合实战。

(一)在本地运行Alluxio部署步骤如下:

1)在Linux系统上安装JDK 7或更高版本。

2)安装部署Alluxio 1.5.0。

下载alluxio-1.5.0的Jar安装包。

1.          wgethttp://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

 

在本地独立模式下运行,配置以下内容:

l  设置alluxio.master.hostname:在conf/alluxio-site.properties配置为localhost。(即alluxio.master.hostname=localhost)。

l  设置alluxio.underfs.address:在conf/alluxio-site.properties配置本地文件系统中的tmp目录。(例如alluxio.underfs.address=/tmp)。

l  打开远程登录服务:登录ssh localhost成功。如无需重复输入密码,可以配置主机的公共ssh密钥 ~/.ssh/authorized_keys。

   步骤0:格式化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

 

(二)Alluxio本地模式与Spark进行整合

1)  Alluxio客户端使用Spark特定的配置文件进行编译。alluxio使用以下命令从顶级目录构建整个项目:

1.          mvn clean package -Pspark-DskipTests

 

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

1.          spark.driver.extraClassPath//core/client/runtime/target/alluxio-core-client-runtime-1.6.0-SNAPSHOT-jar-with-dependencies.jar

2.         spark.executor.extraClassPath//core/client/runtime/target/alluxio-core-client-runtime-1.6.0-SNAPSHOT-jar-with-dependencies.jar

 

3)   HDFS的附加设置:如果Alluxio运行在Hadoop 1.x群集之上,则创建一个spark/conf/core-site.xml包含以下内容的新文件:

1.          

2.           

3.             fs.alluxio.impl

4.             alluxio.hadoop.FileSystem

5.           

6.         

 

4)   如果使用zookeeper在容错模式下运行alluxio,并且Hadoop集群是1.x,将以下内容添加到之前的spark/conf/core-site.xml:

1.             

2.           fs.alluxio-ft.impl

3.           alluxio.hadoop.FaultTolerantFileSystem

4.         

                  增加以下内容到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原文件中的每一行内容都输出了2次。

Alluxio的更多内容,读者可以登录Alluxio的官网(http://www.alluxio.org/)进行学习。

你可能感兴趣的:(SparkInBeiJing)