Spark Cookbook 中文版(txt+pdf+epub+mobi电子书下载)


发布时间:2021-02-20 13:21:22

点击下载

作者:[印度]Rishi Yadav(亚达夫)

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Spark Cookbook 中文版

Spark Cookbook 中文版试读:

前言

随着Hadoop这个大数据平台的成功,用户的期望也水涨船高,他们既希望解决不同分析问题的功能提高,又希望减少延迟。由此,各类工具应运而生。Apache Spark这个可以解决所有问题的单一平台也出现在了Hadoop的大舞台上。“Spark一出,谁与争锋”,它终结了需要使用多种工具来完成复杂挑战和学习曲线的局面。通过使用内存进行持久化存储和计算,Apache Spark避免了磁盘上的中间存储过程并将速度提高了100倍,并且提供了一个单一平台用来完成诸如机器学习、实时streaming等诸多分析作业。

本书包含了Apache Spark的安装和配置,以及Spark内核、Spark SQL、Spark Streaming、MLlib和GraphX库的构建方案。

关于本书教程的更多内容,请访问infoobjects.com/spark-cookbook。内容概要

第1章 开始使用Apache Spark。介绍了如何在多种环境和集群管理上安装Spark。

第2章 使用Spark开发应用。介绍了在不同的IDE中使用不同的构建工具开发Spark。

第3章 外部数据源。介绍了如何读写各种数据源。

第4章 Spark SQL。带你浏览Spark SQL模块,帮助你通过SQL接口使用Spark的功能。

第5章 Spark Streaming。探索Spark Streaming库以分析实时数据源(比如Kafka)的数据。

第6章 机器学习——MLlib。介绍机器学习以及诸如矩阵、向量之类的基本概念。

第7章 监督学习之回归——MLlib。连续输出变量的监督学习。

第8章 监督学习之分类——MLlib。离散输出变量的监督学习。

第9章 无监督学习——MLlib。介绍例如k-means等无监督学习。

第10章 推荐系统。介绍使用多种技术(比如ALS)构建推荐系统。

第11章 图像处理——GraphX。介绍GraphX的多种图像处理算法。

第12章 优化及调优。介绍多种Spark调优方法和性能优化技术。阅读须知

你需要使用InfoObjects大数据沙箱软件运行本书的例子,该软件可以从http://www.infoobjects.com下载。目标读者

只要你是一个希望使用Apache Spark更好地洞悉大数据的数据工程师、应用开发工程师或者数据科学家,那本书就是为你而写。体例

本书将经常出现如下标题——准备工作、具体步骤、工作原理、更多内容和参考资料。

为了更清晰地撰写每一篇教程,我们会使用如下标题。准备工作

本节介绍教程的大致内容,以及所需的软件和初步配置。具体步骤

本节包含教程的具体步骤。工作原理

本节通常由之前章节的具体解释组成。更多内容

本节由教程相关的更多信息组成,帮助读者了解更多的知识。参考资料

本节提供有用的链接和其他教程相关的有用信息。本书约定

在本书中,我们将会用不同的格式区分不同的信息。

文本代码、数据表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter用户名格式如下所示:“安装Spark之前,需要安装Java并配置好JAVA_HOME环境变量。”

代码段如下所示:lazy val root = (project in file(".")) settings( name := "wordcount" )

任何命令行输入输出如下所示:$ wget http://d3kbcqa49mib13.cloudfront.net/spark-1.4.0-bin-hadoop2.4.tgz

新术语和重要的话用粗体显示,例如菜单或对话框显示如下:“打开右上角你的账户名下拉框并点击安全证书”。

警告或重要信息如此所示。

提示和技巧如此所示。读者反馈

读者反馈总是很受欢迎的。无论你喜不喜欢本书,都请让我们知道。读者的反馈对我们而言很重要,它会帮助我们提供对读者最有效的信息。

反馈请发送到feedback@packtpub.com,并请在邮件主题上注明本书书名。

如果你对其中某一主题很有经验,想要写成一本书的话,请访问作者指南www.packtpub.com/authors。客户支持

现在,你可以很自豪地说自己是Packt图书的拥有者了,我们会最大程度地支持我们图书的客户。下载本书彩图

我们还为你提供了本书的PDF文件,其中有本书截图的彩图。彩图可以帮助你更好地理解输出变化。你可以从 https://www.packtpub.com/sites/default/files/downloads/7061OS_ColorImages.pdf下载。勘误

虽然我们已经尽力确保内容的准确性,但是错误是难免的。如果你在我们的书中发现错误并报告给我们,不管是文本的或是代码的,我们将不胜感激。这样可以帮助减少其他读者的困扰并帮助我们提高后续版本的质量。如果你发现任何错误请访问http://www.packtpub.com/submit-errata并报告。选择你所读的书,点击勘误提交表格链接并输入你的勘误细节。一旦你的勘误被确认,提交就会被接受,勘误内容将在标题下的勘误章节中呈现。

要查看先前提交的勘误表,请访问https://www.packtpub.com/books/content/support并输入书名搜索。所需内容将出现在勘误章节中。盗版

互联网上的盗版现象是一直存在的问题。在Packt,我们非常重视版权和许可保护。如果你在互联网上看到任何形式的非法复制内容,请立即向我们提供网址或站名,以便我们补救。

请通过copyright@packtpub.com联系我们提供盗版材料地址。

非常感谢你对我们的作者和我们有价值的内容的保护。联系我们

如果你对本书有任何方面的疑问,请通过 questions@packtpub.com联系我们,我们将会竭尽所能地帮助你。第1章 开始使用Apache Spark

在本章中,我们将介绍安装和配置Spark,包括如下内容。

通过二进制可执行文件安装Spark。

通过Maven构建Spark源码。

在Amazon EC2上安装Spark。

在集群上以独立模式部署Spark。

在集群上使用Mesos部署Spark。

在集群上使用YARN部署Spark。

使用Tachyon作为堆外存储层。1.1 简介

Apache Spark是一个用于处理大数据工作流的多功能集群计算系统。Spark在速度、易用性以及分析能力上都强于它的前辈们(如MapReduce)。

Apache Spark最初在2009年,由加州大学伯克利分校的AMPLab实验室研发,在2010年按照BSD协议实现开源,并在2013年转为Apache 2.0协议。到2013年下半年,Spark的创始人建立了Databricks,专注于Spark的研发和未来的公开发行。

谈到速度,Spark大数据工作流的处理可以达到亚秒级别的延迟。为了达到如此低的延迟,Spark充分利用了内存。在MapReduce中,内存仅仅用于实际计算,而Spark不仅使用内存进行计算,而且还用于存储对象。

Spark也提供一个连接各种大数据存储源的统一运行时接口,例如HDFS、Cassandra、Hbase和S3。它同时也提供大量的用于不同的大数据计算任务的顶层库,例如机器学习、SQL处理、图像处理以及实时数据流。这些库加快了开发速度,可以任意组合。

虽然Spark是用Scala所写,本书也只关注Scala部分的教程,但是Spark也支持Java和Python语言。

Spark是一个开源社区产品,每个人都是用Apache纯开源分布部署,不像Hadoop,有大量开发商改进的分布部署。

图1-1展示了Spark的生态圈。图1-1 Spark生态圈

Spark运行时运行在一系列集群管理器的基础之上,包括YARN(Hadoop的计算框架)、Mesos以及Spark自己的被称为独立模式的集群管理器。Tachyon是一个内存层的分布式文件系统,使得集群架构之间的文件共享速度能够可靠到达内存级别。(译注:Tachyon现已更名为alluxio,官网地址:www.alluxio.org。本书的其他部分仍会按照原文写作Tachyon,后续不再赘述。)简而言之,它是内存上的一个堆外存储层,用于在任务和用户之间分享数据。Mesos 是一个涉及数据中心处理系统的集群管理器。YARN是一个有着健壮的资源管理特性的Hadoop计算框架,Spark可以与它无缝连接使用。1.2 使用二进制文件安装Spark

Spark既可以通过源码安装也可以通过预编译二进制安装,下载地址为http://spark.apache.org。对于标准使用场景来说,二进制安装已经足够了,这里将主要介绍通过二进制文件安装Spark。1.2.1 准备工作

本书的所有教程都是适用于Ubuntu Linux系统的,不过应该也适用于任何POSIX环境。在安装Spark之前,首先需要安装好Java,并且配置好JAVA_HOME环境变量。

在Linux/Unix系统中,文件和目录的位置是有特定标准的,本书中也同样遵从这些标准,表1-1是一张速查表。表1-1  速查表目录描述/bin基本命令二进制文件/etc主机特定系统配置/opt附加应用软件包/var变量/tmp临时文件/home用户主目录1.2.2 具体步骤

在写作本书时,Spark的当前版本是1.4。请从Spark下载页面http://spark.apache.org/downloads.html查阅最新版本。二进制安装包是使用最新最稳定的Hadoop版本。如果想使用特定的Hadoop版本,推荐使用源码构建,具体请参考下一份教程。

安装步骤如下所示。

1.打开终端,使用如下命令下载二进制安装包。 $ wget http://d3kbcqa49mib13.cloudfront.net/spark-1.4.0-bin- hadoop2.4.tgz

2.解压二进制安装包。 $ tar -zxf spark-1.4.0-bin-hadoop2.4.tgz

3.重命名包含二进制安装包的文件夹,去除版本信息。 $ sudo mv spark-1.4.0-bin-hadoop2.4 spark

4.把配置文件夹移动到/etc文件夹下,以便之后制作软链接。 $ sudo mv spark/conf/ * /etc/spark

5.在/opt目录下新建一个公司名限定的安装目录。本书的本篇教程是使用infoobjects沙盒测试的,所以我们就用infoobjects做目录名。创建目录/opt/infoobjects。 $ sudo mkdir -p /opt/infoobjects

6.把spark目录移动到/opt/infoobjects,因为spark是一个附加软件包。$ sudo mv spark /opt/infoobjects/

7.设置root为spark主目录的权限用户。 $ sudo chown -R root:root /opt/infoobjects/spark

8.修改spark主目录的权限,0755意味着主用户将拥有读写和执行权限,而群用户和其他用户拥有读和执行权限。 $ sudo chmod -R 755 /opt/infoobjects/spark

9.进入spark主目录。 $ cd /opt/infoobjects/spark

10.创建软链接。 $ sudo ln -s /etc/spark conf

11.在.bashrc文件中添加到PATH变量。 $ echo "export PATH=$PATH:/opt/infoobjects/spark/bin" >> /home/ hduser/.bashrc

12.打开一个新终端。

13.在/var目录下创建log目录。 $ sudo mkdir -p /var/log/spark

14.设置hduser为Spark log目录的权限用户 $ sudo chown -R hduser:hduser /var/log/spark

15.创建Spark tmp目录。 $ mkdir /tmp/spark

16.在以下命令的帮助下配置Spark。 $ cd /etc/spark $ echo "export HADOOP_CONF_DIR=/opt/infoobjects/hadoop/etc/hadoop" >> spark-env.sh $ echo "export YARN_CONF_DIR=/opt/infoobjects/hadoop/etc/Hadoop" >> spark-env.sh $ echo "export SPARK_LOG_DIR=/var/log/spark" >> spark-env.sh $ echo "export SPARK_WORKER_DIR=/tmp/spark" >> spark-env.sh1.3 通过Maven构建Spark源码

在大多数情况下使用二进制文件安装Spark已经足够了。对于一些高级的需求(并不局限于下列需求),通过源码编译是个更好的选择。

需要使用特定的Hadoop版本进行编译。

集成Hive。

集成YARN。1.3.1 准备工作

开始本篇教程之前需要以下必备条件。

Java 1.6或更新版本。

Maven 3.x。1.3.2 具体步骤

使用Maven构建Spark源码的步骤如下。

1.增大堆的MaxPermSize参数。 $ echo "export _JAVA_OPTIONS=\"-XX:MaxPermSize=1G\"" >> /home/ hduser/.bashrc

2.打开一个新的终端窗口并通过GitHub下载源码。 $ wget https://github.com/apache/spark/archive/branch-1.4.zip

3.解压缩文档。 $ gunzip branch-1.4.zip

4.进入spark目录。 $ cd spark

5.通过以下标签编译源码:激活Yarn、Hadoop版本设置为2.4,激活Hive以及跳过测试以加快编译速度。 $ mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -Phive -DskipTests clean package

6.为了制作软链接,把conf目录移动到etc目录下。 $ sudo mv spark/conf /etc/

7.把spark目录移动到/opt,因为spark是一个附加软件包。 $ sudo mv spark /opt/infoobjects/spark

8.设置root为spark主目录的权限用户。 $ sudo chown -R root:root /opt/infoobjects/spark

9.修改spark主目录的权限,0755意味着主用户将拥有读写和执行权限,而同组用户和其他用户拥有读和执行权限。 $ sudo chmod -R 755 /opt/infoobjects/spark

10.进入spark主目录。 $ cd /opt/infoobjects/spark

11.创建软链接。 $ sudo ln -s /etc/spark conf

12.在.bashrc文件中添加到PATH变量。 $ echo "export PATH=$PATH:/opt/infoobjects/spark/bin" >> /home/ hduser/.bashrc

13.在/var目录下创建log目录。 $ sudo mkdir -p /var/log/spark

14.设置hduser为Spark log目录的权限用户。 $ sudo chown -R hduser:hduser /var/log/spark

15.在Spark下创建tmp目录。 $ mkdir /tmp/spark

16.在以下命令的帮助下配置Spark。 $ cd /etc/spark $ echo "export HADOOP_CONF_DIR=/opt/infoobjects/hadoop/etc/hadoop" >> spark-env.sh $ echo "export YARN_CONF_DIR=/opt/infoobjects/hadoop/etc/Hadoop" >> spark-env.sh $ echo "export SPARK_LOG_DIR=/var/log/spark" >> spark-env.sh $ echo "export SPARK_WORKER_DIR=/tmp/spark" >> spark-env.sh1.4 在Amazon EC2上部署Spark

Amazon弹性计算云(Amazon EC2)是一个能够提供可变大小的云计算实例的网络服务,Amazon EC2提供以下特性。

通过互联网按需提供IT资源。

提供足够多的实例。

像支付水电费账单一样,按你使用实例的时间付费。

没有配置成本,无需安装,没有任何开销。

当你不需要实例时,只需关闭或者终止它们即可离开。

支持所有常用操作系统。

EC2提供不同类型的实例,以满足所有计算需求,例如通用实例、微实例、内存优化实例、存储优化实例等,并提供微实例的免费试用。1.4.1 准备工作

Spark绑定的spark-ec2脚本使得在Amazon EC2上安装、管理以及关闭Spark集群变得很容易。

开始之前需要以下准备工作。

1.登录你的Amazon AWS账号(http://aws.amazon.com/cn/)。

2.点击右上角的我的账户下拉菜单中的安全证书。

3.点击访问密钥并创建访问密钥(如图1-2所示)。图1-2 创建访问密钥

4.记下访问密钥ID(Access Key ID)和私有访问密钥(Secret Access Key)。

5.现在,点开服务,点击EC2。

6.点击左侧菜单网络与安全下面的密钥对。

7.如图1-3所示,点击创建密钥对(Create Key Pair),输入kp-spark作为密钥对的名字。

8.下载私钥文件并复制到home/hduser/keypairs文件夹下。

9.设置文件权限许可为600。

10.将公钥ID和密钥ID的设置到环境变量中(请使用你自己的值替换本文的样本)。 $ echo "export AWS_ACCESS_KEY_ID=\"AKIAOD7M2LOWATFXFKQ\"">> / home/hduser/.bashrc $ echo "export AWS_SECRET_ACCESS_KEY=\"+Xr4UroVYJxiLiY8DLT4DLT4D4s xc3ijZGMx1D3pfZ2q\"">> /home/hduser/.bashrc $ echo "export PATH=$PATH:/opt/infoobjects/spark/ec2">> /home/ hduser/.bashrc图1-3 创建密钥对1.4.2 具体步骤

1.Spark绑定了在Amazon EC2上安装Spark集群的脚本。让我们使用以下命令部署集群。 $ cd /home/hduser $ spark-ec2 -k -i -s launch

2.以下列数值为例部署集群。 $ spark-ec2 -k kp-spark -i /home/hduser/keypairs/kp-spark.pem --hadoop-major-version 2 -s 3 launch spark-cluster

<密钥对>:这是AWS中创建的EC2密钥对的名字。

<密钥文件>:这是你下载的私钥文件。

<从节点库数>:这是部署的从节点的数量。

<集群名称>:这是集群名字。

3.有时,缺省值可能不可用;在这种情况下,你就需要重发请求来制定特定的可用区域。 $ spark-ec2 -k kp-spark -i /home/hduser/keypairs/kp-spark.pem –z us-east-1b --hadoop-major-version 2 -s 3 launch spark-cluster

4.如果你的应用需要实例关闭后保留数据,那么就为它增加一个EBS卷(例如一个10GB的空间)。 $ spark-ec2 -k kp-spark -i /home/hduser/keypairs/kp-spark.pem --hadoop-major-version 2 -ebs-vol-size 10 -s 3 launch spark- cluster

5.如果你使用的是Amazon spot实例,做法如下。 $ spark-ec2 -k kp-spark -i /home/hduser/keypairs/kp-spark.pem -spot-price=0.15 --hadoop-major-version 2 -s 3 launch spark- cluster

Spot实例服务允许你自己定价来租Amazon EC2的计算能力。你只需要竞标Amazon EC2的空闲实例,当你的竞标价格大于当前标价时,你就可以使用该服务。该服务的价格是根据市场供求关系实时变化的(来源:amazon.com)。

6.一切部署完毕后,打开最后打印出来的网页URL来检查集群状态,如图1-4所示。图1-4 集群状态

7.检查集群状态,如图1-5所示。

8.现在,在EC2上使用Spark集群,让我们使用安全外壳协议(SSH)连接到主节点上。 $ spark-ec2 -k kp-spark -i /home/hduser/kp/kp-spark.pem login spark-cluster

你应该会看到图1-6所示的内容。图1-5 集群状态网页图1-6 连接主节点

9.检查主节点上的目录并查看它们的用途,如表1-2所示。表1-2  主节点目录说明目录描述ephemeral-hdfs此处存储临时的数据,当你关闭或重启机器时就会被删掉persistent-hdfs每个节点都有一个很小量的永久存储空间(大约3 GB),如果使用的话,数据就会被存储在这个目录下hadoop-native这些是用于支持Hadoop的原生库,例如Snappy压缩库Scala此处是Scala安装shark此处是Shark安装(Shark已经不再被支持,并且已经被Spark SQL取代)spark此处是Spark安装spark-ec2这些文件用于支持该集群部署tachyon此处是Tachyon安装

10.检查临时实例的HDFS版本。 $ ephemeral-hdfs/bin/hadoop version Hadoop 2.0.0-chd4.2.0

11.使用以下命令检查永久实例的HDFS版本。 $ persistent-hdfs/bin/hadoop version Hadoop 2.0.0-chd4.2.0

12.改变日志的配置层。 $ cd spark/conf

13.如图1-7所示,默认日志层信息非常冗长,所以我们把它改成Error级别。图1-7 日志层

重命名模板为log4.properties。 $ mv log4j.properties.template log4j.properties

使用vi或者你喜欢的编辑器打开log4j.properties。 $ vi log4j.properties

把命令行 | log4j.rootCategory=INFO, console|改为log4j.rootCategory= ERROR, console。

14.修改之后将所有配置复制到所有的从节点上。 $ spark-ec2/copydir spark/conf

你应该会得到如图1-8所示的信息。图1-8 配置信息

15.销毁Spark集群。 $ spark-ec2 destroy spark-cluster1.4.3 参考资料http://aws.amazon.com/ec21.5 在集群上以独立模式部署Spark

在分布式环境中的计算资源需要管理,使得资源利用率高,每个作业都有公平运行的机会。Spark有一个便利的被称为独立模式的自带集群管理器。Spark也支持使用YARN或者Mesos做为集群管理器。

选择集群处理器时,主要需要考虑延迟以及其他架构,例如MapReduce,是否共享同样的计算资源池。如果你的集群运行着旧有的MapReduce作业,并且这些作业不能转变为Spark作业,那么使用YARN作为集群管理器是个好主意。Mesos是一种新兴的、方便跨平台管理作业的、与Spark非常兼容的数据中心操作系统。

如果Spark是你的集群的唯一框架,那么独立模式就足够好用了。随着Spark技术的发展,你会看到越来越多的Spark独立模式被用于处理所有的大数据计算需求。例如,目前有些作业可能在使用Apache Mahout,因为MLlib目前没有作业所需要的特定的机器学习库。只要MLlib包含了这些库,这些特定的作业就可以移动到Spark了。1.5.1 准备工作

让我们以由6个节点组成的一个集群的设置为例,包含一个主节点和5个从节点(在你的实际集群中以真实的名字替换它们)。

主节点m1.zettabytes.com

从节点s1.zettabytes.coms2.zettabytes.coms3.zettabytes.coms4.zettabytes.coms5.zettabytes.com1.5.2 具体步骤

1.因为Spark的独立模式是默认的,所以你需要做的就是在所有主节点和从节点上安装Spark二进制文件。把/opt/infoobjects/spark/sbin放到每个节点的路径中。 $ echo "export PATH=$PATH:/opt/infoobjects/spark/sbin">> /home/ hduser/.bashrc

2.开启独立主服务器(先SSH到主节点)。 hduser@m1.zettabytes.com~] start-master.sh

从节点连接主节点的默认端口是7077,8088是它的网页界面端口。

3.请SSH到主节点去开启从节点,主从节点之间的细粒度配置参数如表1-3所示。 hduser@s1.zettabytes.com~] spark-class org.apache.spark.deploy. worker.Worker spark://m1.zettabytes.com:7077表1-3  相关参数参数(下列参数适用于主节点和从节点含义的细粒度配置)-i,-ipIP地址/DNS服务监听-p , --port 端口服务监听--webui-port 网页前端端口(主节点默认为8080,从节点默认为8081)-c ,--cores 该机器可用于Spark应用的总CPU内核数(仅适用从节点)-m ,--memory 该机器可用于Spark应用的总内存(仅适用从节点-d

,--work-dir用于划分空间和存放作业输出日志的目录

4.不仅可以手动启动主从节点的守护程度,还可以使用集群启动脚本来完成。

5.首先,在主节点创建conf/slaves文件夹,并加入每一个从节点的主机名(本例有5个从节点,在实际操作中使用你自己从节点的DNS替换它们)。 hduser@m1.zettabytes.com~] echo "s1.zettabytes.com" >> conf/slaves hduser@m1.zettabytes.com~] echo "s2.zettabytes.com" >> conf/slaves hduser@m1.zettabytes.com~] echo "s3.zettabytes.com" >> conf/slaves hduser@m1.zettabytes.com~] echo "s4.zettabytes.com" >> conf/slaves hduser@m1.zettabytes.com~] echo "s5.zettabytes.com" >> conf/slaves

一旦从节点设置好了,你就可以使用如下脚本开启或停止集群,如表1-4所示。表1-4  相关脚本脚本名称目的start-master.sh在主机上开启一个主实例start-slaves.sh在每个节点的从节点文件上开启一个从实例start-all.sh开启主进程和从进程stop-master.sh停止主机上的主实例stop-slaves.sh停止所有节点的从节点文件的从实例stop-all.sh停止主进程和从进程

6.使用Scala代码将应用连接到集群。 val sparkContext = new SparkContext(new SparkConf(). setMaster("spark://m1.zettabytes.com:7077")

7.通过Spark shell连接到集群。 $ spark-shell --master spark://master:70771.5.3 工作原理

在独立模式下,Spark与Hadoop、MapReduce以及YARN类似,遵循主从架构。计算主程序被称为Spark master,它运行在主节点上。通过使用ZooKeeper,Spark master可以具有高可用性。如果需要的话,你可以增加更多的备用主节点。

计算从程序又被称为worker,它运行在每一个从节点上,worker程序执行如下操作。

报告从节点的可用计算资源给主节点,例如内核数、内存以及其他。

响应Spark master的执行要求,派生执行程序。

重启死掉的执行程序。

每个从节点机器的每个应用程序最多只有一个执行程序。

Spark master和worker都非常轻巧。通常情况下,500 MB到1 GB的内存分配就足够了。可以通过设置conf/spark-env.sh文件里的SPARK_DAEMON_MEMORY参数修改这个值。例如,如下配置将主节点和从节点的计算程序的内存设置为1 GB。确保使用超级用户(sudo)运行:$ echo "export SPARK_DAEMON_MEMORY=1g" >> /opt/infoobjects/spark/conf/spark-env.sh

默认情况下,每个从节点上运行一个worker实例。有时候,你的几台机器可能比其他的都强大,在这种情况下,你可以通过以下配置派生多个作业到该机器上(特指那些强大的机器):$ echo "export SPARK_WORKER_INSTANCES=2" >> /opt/infoobjects/spark/conf/spark-env.sh

Spark worker在默认情况下使用从节点机器的所有内核执行程序。如果你想要限制worker使用的内核数的话,可以通过如下配置设置该参数(例如12):$ echo "export SPARK_WORKER_CORES=12" >> /opt/infoobjects/spark/conf/spark-env.sh

Spark worker在默认情况下使用所有可用的内存(对执行程序来说是1 GB)。请注意,你不能给每一个具体的执行程序分配内存(你可以通过驱动配置对此进行控制)。想要分配所有执行程序的总内存数,可以执行如下设置:$ echo "export SPARK_WORKER_MEMORY=24g" >> /opt/infoobjects/spark/conf/spark-env.sh

在驱动级别,你可以进行如下设置。

要通过集群指定特定应用的最大CPU内核数,可以通过设置Spark submit或者Spark shell中的spark.cores.max配置。 $ spark-submit --confspark.cores.max=12

若要指定每个执行程序应分配的内存数(建议最小为8 GB),可以通过设置Spark submit或者Spark shell中的spark.executor.memory配置。 $ spark-submit --confspark.executor.memory=8g

图1-9描述了Spark集群的高层架构。图1-9 Spark集群的高层架构1.5.4 参考资料

http://spark.apache.org/docs/latest/spark-standalone.html找到更多配置选项。1.6 在集群上使用Mesos部署Spark

Mesos正慢慢崛起为跨数据中心管理所有计算资源的数据中心管理系统。Mesos可以运行在任意一台Linux操作系统的机器上。Mesos与Linux内核有着相同的配置原则。让我们看看如何安装Mesos。具体步骤

Mesosphere提供Mesos的二进制安装包。最新的Mesos分布式安装包可以通过Mesosphere库按照如下步骤安装。

1.在Ubuntu操作系统的可靠版本上执行Mesos。 $ sudo apt-key adv --keyserver keyserver.ubuntu.com –recv E56151BF DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]') CODENAME=$(lsb_release -cs) $ sudo vi /etc/apt/sources.list.d/mesosphere.list deb http://repos.mesosphere.io/Ubuntu trusty main

2.更新库。 $ sudo apt-get -y update

3.安装Mesos。 $ sudo apt-get -y install mesos

4.连接Spark到Mesos上以整合Spark和Mesos,配置Spark二进制安装包以适应Mesos,并配置Spark驱动以连接Mesos。

5.把第一份教程中使用到的Spark二进制安装包上传到HDFS。 $ hdfs dfs -put spark-1.4.0-bin-hadoop2.4.tgz spark-1.4.0-bin- hadoop2.4.tgz

6.Mesos单主节点的主URL是mesos://host:5050,如果使用ZooKeeper管理Mesos集群的话,URL是mesos://zk://host:2181。

7.配置spark-env.sh中的如下变量。 $ sudo vi spark-env.sh export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so export SPARK_EXECUTOR_URI= hdfs://localhost:9000/user/hduser/ spark-1.4.0-bin-hadoop2.4.tgz

8.通过Scala运行。 val conf = new SparkConf().setMaster("mesos://host:5050") val sparkContext = new SparkContext(conf)

9.通过Spark运行。 $ spark-shell --master mesos://host:5050

Mesos有两种模式。

Fine-grained:在fine-grained模式(默认模式)下,每个Spark任务以独立的Mesos任务运行。

Coarse-grained:在此模式下,仅会在每个Mesos机器上发起一个长时间运行的Spark任务。

10.如果想要修改模式为coarse-grained,配置spark.mesos.coarse。 conf.set("spark.mesos.coarse","true")1.7 在集群上使用YARN部署

另一种资源协调者(YARN)是基于HDFS这个Hadoop存储层的Hadoop计算框架。

YARN遵循主从架构。主守护进程被称为资源管理器(ResourceManager),从守护进程被称为节点管理器(NodeManager)。除此之外,生命周期管理由ApplicationMaster负责,它可以被派生到任何从节点上并可以生存一个应用的生命周期时长。

如果Spark运行在YARN上的话,资源管理器充当Spark master,节点管理器充当执行节点。

如果Spark运行在YARN上的话,每个Spark执行程序以YARN容器(container)的形式运行。1.7.1 准备工作

在YARN上部署Spark需要一个拥有YARN支持的Spark二进制安装包。在按照Spark安装教程时,需要注意这一点。1.7.2 具体步骤

1.在YARN上部署Spark,第一步就是设置配置参数。 HADOOP_CONF_DIR: to write to HDFS YARN_CONF_DIR: to connect to YARN ResourceManager $ cd /opt/infoobjects/spark/conf (or /etc/spark) $ sudo vi spark-env.sh export HADOOP_CONF_DIR=/opt/infoobjects/hadoop/etc/Hadoop export YARN_CONF_DIR=/opt/infoobjects/hadoop/etc/hadoop

图1-10可见这些配置。图1-10 Spark配置

2.以下命令以yarn-client模式启动YARN Spark。 $ spark-submit --class path.to.your.Class --master yarn-client [options] [app options]

例如: $ spark-submit --class com.infoobjects.TwitterFireHose —master yarn-client --num-executors 3 --driver-memory 4g —executor-memory 2g --executor-cores 1 target/sparkio.jar 10

3.以下命令以yarn-client模式启动Spark shell。 $ spark-shell --master yarn-client

4.以下命令以yarn-cluster模式启动。 $ spark-submit --class path.to.your.Class --master yarn-cluster [options] [app options]

例如: $ spark-submit --class com.infoobjects.TwitterFireHose –master yarn-cluster --num-executors 3 --driver-memory 4g --executor- memory 2g --executor-cores 1 target/sparkio.jar 101.7.3 工作原理

部署在YARN上的Spark应用有两种模式。

yarn-client:Spark驱动运行在YARN集群之外的客户端进程上,并且ApplicationMaster仅用于协商安排资源管理器的资源。

yarn-cluster:Spark驱动运行在由从节点的节点管理器派生出来的ApplicationMaster上。

yarn-cluster模式建议用于生产环境部署,而yarn-client模式很适合用于开发和调试,因为你可以立即看到输出。不需要特别分别Spark master在哪个模式下,因为它由Hadoop配置决定,master的参数要么是yarn-client,要么是yarn-cluster。

图1-11是client模式下在YARN上部署Spark的架构图。图1-11 client模式架构图

图1-12是cluster模式下在YARN上部署Spark的架构图。图1-12 cluster模式架构图

在YARN模式下,可以配置如下参数。

num-executors:配置可分配执行程序数。

executor-memory:每个执行程序的内存(RAM)。

executor-cores:每个执行程序的CPU内核数。1.8 使用Tachyon作为堆外存储层

Spark弹性分布式数据集(RDD)很适合在内存上存储数据集,可以在不同应用上存储大量备份。Tachyon可以解决Spark RDD管理的一些挑战性问题,如下所示。

RDD仅存在于Spark应用期间。

计算程序和RDD内存存储共享同样的执行过程;所以,如果一个进程崩溃了,那么内存存储也会消失。

即使处理同样的底层数据,不同作业的RDD是不能共享的,例如使用HDFS数据块。

慢速写入磁盘。

在内存中备份数据,更高的内存占用。

如果需要与其他应用程序共享输出,由于需要磁盘复制速度会非常慢。

Tachyon提供了堆外存储层来解决这些问题。该层(即堆外存储层)不受进程崩溃的影响也不会被垃圾回收器标记,同时也可以让RDD独立于特定的作业或对话之上实现跨应用共享。本质上,数据的一个存储在内存上的单一副本如图1-13所示。图1-13 数据存储1.8.1 具体步骤

1.下载并编译Tachyon(在默认情况下Tachyon配置的Hadoop版本为1.0.4,所以需要从源代码编译,选择正确的Hadoop版本)。替换当前版本,本书所写是版本为0.6.4。 $ wget https://github.com/amplab/tachyon/archive/v.zip

2.解压源代码。 $ unzip v-.zip

3.为了方便,重命名Tachyon源文件名。 $ mv tachyon- tachyon

4.修改Tachyon文件夹目录。 $ cd tachyon $ mvn -Dhadoop.version=2.4.0 clean package -DskipTests=true $ cdconf $ sudo mkdir -p /var/tachyon/journal $ sudo chown -R hduser:hduser /var/tachyon/journal $ sudo mkdir -p /var/tachyon/ramdisk $ sudo chown -R hduser:hduser /var/tachyon/ramdisk $ mv tachyon-env.sh.template tachyon-env.sh $ vi tachyon-env.sh

5.注释下面这行。 export TACHYON_UNDERFS_ADDRESS=$TACHYON_HOME/underfs

6.去掉下面这行前面的注释。 export TACHYON_UNDERFS_ADDRESS=hdfs://localhost:9000

7.修改以下属性。 -Dtachyon.master.journal.folder=/var/tachyon/journal/ export TACHYON_RAM_FOLDER=/var/tachyon/ramdisk $ sudo mkdir -p /var/log/tachyon $ sudo chown -R hduser:hduser /var/log/tachyon $ vi log4j.properties

8.用/var/log/tachyon替换${tachyon.home}。

9.在conf目录下创建新文件core-site.xml。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载