l
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 之后新版本配合使用。
本节根据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/
2. spark.executor.extraClassPath/
3) HDFS的附加设置:如果Alluxio运行在Hadoop 1.x群集之上,则创建一个spark/conf/core-site.xml包含以下内容的新文件:
1.
2.
3.
4.
5.
6.
4) 如果使用zookeeper在容错模式下运行alluxio,并且Hadoop集群是1.x,将以下内容添加到之前的spark/conf/core-site.xml:
1.
2.
3.
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/)进行学习。