在AWS EC2上的Apache Spark文档翻译
关于Apache Spark
最近,Apache Software Foundation成为了一个顶级项目,他们的开源产品是一个分布式处理平台,于5月份推出了最新版本1. 这个产品与MapReduce on HDFS不同,它使用共享内存来共享迭代计算的信息,因此计算速度被宣传为非常快速。
这个项目可以实现以前只能批处理的部分实时化,并减少时间延迟,可以对其有很大的期待。
参考他的项目,比如Twitter风暴。
有一个在EC2上可以轻松构建集群的脚本可用。
请帮忙快速地将这个日本文本翻译成中文。如果有任何地方有错误,请指正。
请务必查看Quick Start和EC2的入门指南的中文翻译。
-
- Quick Start
-
- http://qiita.com/mychaelstyle/items/46440cd27ef641892a58
Cluster Mode Overview
http://qiita.com/mychaelstyle/items/610b432a1ef1a7e3d2a0
在EC2上运行Spark (Running Spark on EC2)
位于Spark的ec2目录中的spark-ec2脚本允许您在Amazon EC2上启动、管理和关闭Spark集群。它会自动为您在集群上设置Spark、Shark和HDFS。本指南描述了如何使用spark-ec2来启动集群,如何在集群上运行作业,以及如何关闭集群。假设您已经在Amazon Web Services站点上注册了EC2账户。
使用位于Spark的EC2文件夹中的spark-ec2脚本,可以启动、管理和停止Amazon EC2上的Spark集群。
该脚本会自动设置Spark、Shark和HDFS在集群上。
本指南描述了使用spark-ec2脚本构建集群、运行作业和停止集群的方法。
spark-ec2被设计用来管理多个具名的集群。您可以启动一个新的集群(告诉脚本其规模并给一个名字),关闭一个已存在的集群或登录到一个集群。
spark-ec2脚本被设计成可以管理多个命名的集群。
您可以(通过指定大小和名称)启动新的集群,也可以通过指定名称停止已启动的集群,并登录到集群中。
每个集群通过将其机器放入以集群名称命名的 EC2 安全组来识别。
每个集群都运行在被命名为EC2安全组名称的已配置机器和集群名称上,它们完全独立运行。
例如,一个名为test的集群将包含一个名为test-master的主节点,并且包含多个名为test-slaves的从节点所在的安全组。
如果一个名为test的集群被命名为test-master安全组的主节点所包含,则从节点群将成为test-slaves。
spark-ec2脚本将根据您请求的集群名称为您创建这些安全组。您还可以使用这些安全组在Amazon EC2控制台中标识属于每个集群的机器。
Spark-ec2脚本会根据您请求的集群名称来生成这些安全组。您可以在亚马逊EC2控制台上将它们分配给各个实例并使用。
开始之前 zhī
为自己创建一个Amazon EC2密钥对。您可以通过AWS控制台登录您的Amazon Web Services账户,点击左侧边栏的密钥对,然后创建并下载一个密钥。确保将私钥文件的权限设置为600(即只有您能够读取和写入),以便ssh正常工作。
请在EC2上注册密钥对。您可以登录AWS控制台并轻松进行注册。(省略部分)
每当你想要使用spark-ec2脚本时,将环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY设置为你的Amazon EC2访问密钥ID和秘密访问密钥。你可以在AWS首页上点击Account > Security Credentials > Access Credentials来获取这些密钥。
如果你想使用spark-ec2脚本,请先获取并创建访问密钥ID,然后设置环境变量AWS_ACCESS_KEY和AWS_SECRET_ACCESS_KEY。
我认为在实际操作中,比起列出的凭证获取方式,创建IAM角色并创建凭证更好。
启动一个集群
进入您下载的Spark版本的ec2目录。
请进入下载并解压缩的Spark文件夹中的ec2目录。
运行 ./spark-ec2 -k -i -s launch,其中 是您创建时为 EC2 密钥对命名的名称,是密钥对的私钥文件,是要启动的从节点数量(首先尝试 1),是要为集群命名的名称。
请执行以下命令。
./spark-ec2 -k <keypair> -i <key-file> -s <num-slaves> launch <cluster-name>
请提供您在EC2中注册的密钥对名称,
以及私钥文件路径,
需要启动的从节点数量(至少1个),
以及要为启动的集群指定的任意名称。
在一切启动之后,请访问集群调度程序的Web界面,检查它是否运行正常并能看到所有的从节点。该Web界面的网址将会在脚本末尾打印出来(通常为http://:8080)。
请在所有节点启动之后,检查集群调度器是否能够从Web UI上确认所有从节点的连接。Web UI的URL将在脚本执行结束后显示(通常为http://master-hostname>:8080/)。
你还可以运行./spark-ec2 –help查看更多使用选项。以下选项值得注意:
如果执行 ./spark-ec2 –help,可以显示可用选项。以下选项为一些有用选项的摘要。
–instance-type= 可以用于指定要使用的EC2实例类型。目前,该脚本仅支持64位的实例类型,默认类型是m1.large(包含2个核心和7.5GB内存)。请参考亚马逊关于EC2实例类型和EC2定价的页面获取其他实例类型的信息。
您可以指定EC2实例类型。目前只支持64位实例类型。默认类型为m2.large(2核心:7.5GB内存)。有关其他实例类型,请参阅Amazon EC2实例类型和定价页面。
–region= 指定要启动实例的EC2区域。默认区域为us-east-1。
您可以指定EC2的区域。默认区域为us-east-1(弗吉尼亚)。
–zone=可以用来指定在哪个 EC2 可用区启动实例。有时候,由于一个可用区的容量不足,可能会出现错误,这时候你应该尝试在另一个可用区启动实例。
您可以指定要启动EC2实例的可用区。由于某个区域偶尔可能出现容量不足的情况,因此可能会出现错误,请指定其他区域以解决该问题。
–ebs-vol-size=GB会将一个具有给定空间大小的EBS卷附加到每个节点上,以便您在集群重新启动时仍然可以拥有持久的HDFS集群(见下文)。
为了在每个节点上重新构建一个稳固的HDFS集群,您需要以GB为单位指定每个节点的EBS卷。
–spot-price=PRICE 将以市场价格启动工作节点作为竞价实例,出价为给定的最高价格(以美元计)。
将工作节点指定为竞价实例,并指定最高价格。最高价格请用美元表示。
–spark-version=VERSION将使用指定版本的Spark预加载集群。VERSION可以是版本号(例如“0.7.3”)或特定的Git哈希值。默认情况下,将使用最新版本。
明确指定Spark的预加载版本。版本号可以像”0.7.3″一样指定,也可以用git的哈希值指定。默认为最新版本(截至2014/06/09为止是1.0.0)。
如果你的其中一个启动失败是因为私钥文件没有正确的权限,你可以使用–resume选项来重新启动现有集群上的设置过程。
如果在启动时出现“没有正确许可的私钥文件”的错误提示,您可以通过使用–resume选项重新启动来利用现有集群的设置过程。
运行应用程序
进入你下载的 Spark 版本的 ec2 目录。
请进入Spark的ec2文件夹。
运行 ./spark-ec2 -k -i login 命令以SSH登录到集群中,其中 和 与上文一致。(这仅为方便之选,你也可以使用EC2控制台。)
请使用以下命令登录到指定的集群。
./spark-ec2 -k <keypair> -i <key-file> login <cluster-name>
如前所述。(这只是为了方便而存在的功能。您也可以使用EC2控制台。)
要在集群中部署代码或数据,您可以登录并使用提供的脚本~/spark-ec2/copy-dir,该脚本会将指定目录路径的内容通过RSYNC同步到所有从节点的相同位置上。
请将代码和数据部署到您的集群中。
您可以使用提供的脚本“/spark-ec2/copy-dir”将指定的目录路径通过RSYNC同步部署到从节点的相同位置。
如果你的应用程序需要访问大型数据集,最快的方法是从Amazon S3或Amazon EBS设备加载数据到你的节点上的一个Hadoop分布式文件系统(HDFS)实例中。spark-ec2脚本已经为你设置了一个HDFS实例。它安装在/root/ephemeral-hdfs目录下,并且可以使用该目录中的bin/hadoop脚本进行访问。请注意,当你停止和重新启动一台机器时,这个HDFS中的数据会丢失。
如果您的应用程序需要访问大型数据集,最快的方法是通过Amazon S3或Amazon EBS从设备加载到节点上的HDFS(Hadoop分布式文件系统)。
spark-ec2脚本会自动在实例上构建HDFS。
它安装在/root/ephemeral-hdfs中,您可以使用bin/hadoop脚本访问该目录。
请注意,当您停止或重启机器时,该HDFS集群将会消失。
在/root/persistent-hdfs中还有一个持久的HDFS实例,可以在集群重新启动时保留数据。通常每个节点的持久数据空间较小(大约3GB),但您可以使用–ebs-vol-size选项将持久EBS卷附加到每个节点,以存储持久HDFS的数据。
永久的HDFS实例也可以在/root/persistent-hdfs上进行配置,即使重新启动集群,这些数据也将保留。一般来说,每个节点都会保留一些相关的永久数据空间(大约3GB),但是通过在spark-ec2脚本中使用–ebs-vol-size选项,可以将永久EBS卷附加到每个节点作为HDFS使用。
最后,如果您在运行应用程序时遇到错误,请查看调度程序工作目录(/root/spark/work)中该应用程序的从节点日志。您也可以使用网页用户界面(http://:8080)查看集群的状态。
最后,如果在应用程序执行时出现错误,请查看调度程序的工作目录(/root/spark/work)中的从节点日志。您还可以通过Web UI(http://:8080/))来检查状态。
配置 (Configuration)
你可以在每台机器的 /root/spark/conf/spark-env.sh 文件中修改Spark的配置选项,例如JVM选项。为了让更改生效,这个文件需要复制到每台机器上。最简单的方法是使用我们提供的一个叫做copy-dir的脚本。首先在主节点上编辑你的spark-env.sh文件,然后运行~/spark-ec2/copy-dir /root/spark/conf命令来将它同步到所有的工作节点。
您可以编辑每台机器上的/root/spark/conf/spark-env.sh来设置Spark的配置选项,例如JVM选项等。您需要将此文件的更改复制到所有机器上。要轻松地复制此设置文件,您可以使用copy-dir命令。
首先,在主节点上编辑spark-env.sh文件,并通过~/spark-ec2/copy-dir /root/spark/conf命令将其同步到所有工作节点上。
配置指南描述了可用的配置选项。
可用的设置选项已在设置指南中进行了记录。
终止一个集群
请注意,关闭EC2节点后无法恢复数据!在停止节点之前,请确保已将所有重要数据复制到其他地方。
关闭集群后无法恢复EC2节点上的数据。
在关闭之前,请将重要数据进行备份和拷贝。
进入您下载的Spark版本中的ec2目录。
运行./spark-ec2 destroy。
请切换到Spark的ec2目录。
请执行./spark-ec2 destory命令。
好可怕啊。
暂停和重启集群
spark-ec2脚本还支持暂停一个集群。在这种情况下,虚拟机被停止但不被终止,因此它们会失去临时磁盘上的所有数据,但会保留根分区和持久化hdfs中的数据。停机的机器不会消耗任何EC2周期,但会继续消耗EBS存储的费用。
spark-ec2 脚本支持集群的暂停功能。在这种情况下,虚拟机将停止运行,但集群不会被销毁,因此不会丢失临时磁盘上的数据,而是将数据保留在根分区中。
机器停止期间,EC2 的费用不会产生,但 EBS 存储费用会持续发生。
停止其中一个集群,进入ec2目录并运行./spark-ec2 stop。
请进入ec2目录并执行下面的命令以暂停群集。
./spark-ec2 stop <cluster-name>
要以后重新启动它,请运行 ./spark-ec2 -i start 。
请进入EC2目录并执行以下命令,以重新启动停止的集群。
./spark-ec2 -i <key-file> start <cluster-name>
最终摧毁集群并停止消耗EBS空间,请根据前一部分的描述运行./spark-ec2 destroy。
如果最后要销毁集群并使用完EBS空间后停止,使用前面提到的spark-ec2 destroy命令。
限制条件
对于“集群计算”节点的支持是有限的-没有办法指定局部性组。然而,您可以手动在-slaves组中启动从节点,然后使用spark-ec2 launch –resume命令来启动一个集群。
如果您对这些限制之一有一个补丁或建议,请随时提出贡献!
集群计算的节点数是有限制的。没有明确指定本地性组的方法。但是,您可以通过手动启动从节点并使用spark-ec2进行恢复启动来增加节点数。
如果您有对应该限制的补丁或建议,请贡献出来!
在S3中访问数据
Spark的文件接口使其能够使用与Hadoop支持的相同URI格式处理Amazon S3中的数据。
Spark的文件接口与Hadoop兼容,可以使用相同的URI格式访问Amazon S3。
你可以通过形如s3n:///path的URI将S3中的路径指定为输入。
您可以通过s3n:///path URI格式来指定S3路径。
你还需要设置你的亚马逊安全凭证,可以通过在程序运行之前设置环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,或通过SparkContext.hadoopConfiguration进行设置。
在执行程序之前,必须通过SparkContext.hadoopConfiguration来将Amazon的安全凭证设置为环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY。
使用Hadoop输入库获取S3访问的完整说明可在Hadoop S3页面找到。
请查看Hadoop S3页面,了解通过Hadoop输入库访问S3的介绍。
(译者注)
我只是草草地翻译了一下,请注意语句是否不通顺,如有问题请指正。