简介
Apache Spark给大数据计算带来了重大革新,将其与Alluxio配合使用时,其效果还将更加出色。Alluxio为Spark提供了可靠的数据共享层,通过Alluxio处理存储,Spark在执行应用程序逻辑时更加得心应手。Bazaarvoice使用Spark和Alluxio构建了实时大数据平台,该平台不仅能够在黑色星期五等高峰事件中处理15亿次页面浏览量,还能对这些数据进行实时分析(更多内容见此处)。在这种规模下,速度的提升能够给新工作负载赋能。我们已经构建了一个简洁的方法来集成Alluxio和Spark。
本博客面向那些对如何利用Alluxio和Spark感兴趣的新人,所有示例都可以通过简单步骤在本地计算机上复现。
常用链接
- Alluxio项目官网
- Alluxio在各大厂用例
- 关注Alluxio微信公众号:Alluxio_China
准 备
要开始使用Alluxio和Spark,首先需要下载两个系统的发行版,安装Java8并下载示例数据以完成练习。
- Alluxio 1.8.1
- Spark 2.4.0
- 安装Java-JDK 8
- 示例数据文件
将Alluxio和Spark下载到工作目录。样本数据文件也可以下载和解压缩到此处,或者/tmp目录。Spark必须引用样本文件的完整路径。
配置Alluxio
- 打开远程登录服务,以便能够成功ssh localhost。
- 为避免重复输入密码,可以将主机的公共SSH密钥添加到~/.ssh/authorized_keys。有关详细信息,请参阅本教程。
从Alluxio网站下载、解压并启动Alluxio的预编译版本
$tar -zxf alluxio-1.8.1-bin.tar.gz
$cd alluxio-1.8.1
$bin/alluxio bootstrap-conf localhost
$bin/alluxio-start.sh local -f
访问localhost:19999/home的WebUI,验证Alluxio系统是否正在运行。
配置Spark
解压缩Spark的预编译版本
$tar -zxf spark-2.4.0-bin-hadoop2.7.tgz
$cd spark-2.4.0-bin-hadoop
通过在Spark项目目录下运行以下命令来启动spark-shell程序。在交互式shell中,你可以处理来自各种源的数据,在当前情况下,数据源是本地文件系统。
集成Alluxio和Spark
Spark需要使用Alluxio客户端jar包才能让Spark程序与Alluxio交互;Alluxio客户端jar包是两个系统的集成点。使用--driver-class-path参数后跟客户端jar包的路径指定它,该客户端jar包位于Alluxio包的client目录中。
cd spark-2.4.0-bin-hadoop2.7
$bin/spark-shell --driver-class-path<PATH>/alluxio-1.8.1/client/ alluxio-1.8.1-client.jar
运行一个简单的示例
作为第一个示例,我们将使用Alluxio和Spark从本地存储读取数据,借此来熟悉两个系统的集成。之前下载的示例数据文件包含了大小为2gb的文件,该文件的内容为从英语词典中随机生成的单词。
$cd /tmp
$tar -zxf sample-2g.tar.gz
在Spark中处理2gb样本文件并计算其中的行数。确保指定了正确的文件路径。
scala>val file = sc.textFile("/tmp/sample-2g")
scala>file.count()
Alluxio还可以用作数据的源或接收点。你可以将文件保存到Alluxio,并且类似地对Alluxio的数据执行相同的操作,就像对本地文件系统一样。
scala>file.saveAsTextFile("alluxio://localhost:19998/sample-2g")
scala>val alluxioFile = sc.textFile("alluxio://localhost:19998/sample-2g")
scala>alluxioFile.count()
结 论
本文是使用Alluxio和Spark的简单介绍。我们后续的博客将详细介绍利用Alluxio和Spark的优势:
- 多个作业之间的数据共享:只有一个作业需要从冷数据中慢速读取
- 作业失败易恢复:Alluxio在作业失败或重新启动时保留数据
- 托管存储:Alluxio优化了跨应用程序分配的存储的利用率