《Spark大数据处理:技术、应用与性能优化》——第2章 Spark集群的安装与部署2.1 Spark的安装与部署

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介:

本节书摘来自华章计算机《Spark大数据处理:技术、应用与性能优化》一书中的第2章,第2.1节,作者:高彦杰 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第2章 Spark集群的安装与部署

Spark的安装简便,用户可以在官网上下载到最新的软件包。
Spark最早是为了在Linux平台上使用而开发的,在生产环境中也是部署在Linux平台上,但是Spark在UNIX、Windwos和Mac OS X系统上也运行良好。不过,在Windows上运行Spark稍显复杂,必须先安装Cygwin以模拟Linux环境,才能安装Spark。
由于Spark主要使用HDFS充当持久化层,所以完整地使用Spark需要预先安装Hadoop。下面介绍Spark集群的安装和部署。

2.1 Spark的安装与部署

Spark在生产环境中,主要部署在安装有Linux系统的集群中。在Linux系统中安装Spark需要预先安装JDK、Scala等所需的依赖。由于Spark是计算框架,所以需要预先在集群内有搭建好存储数据的持久化层,如HDFS、Hive、Cassandra等。最后用户就可以通过启动脚本运行应用了。
2.1.1 在Linux集群上安装与配置Spark
下面介绍如何在Linux集群上安装与配置Spark。
1.安装JDK
安装JDK大致分为下面4个步骤。
1)用户可以在Oracle JDK的官网下载相应版本的JDK,本例以JDK 1.6为例。
2)下载后,在解压出的JDK的目录下执行bin文件。

./jdk-6u38-ea-bin-b04-linux-amd64-31_oct_2012.bin

3)配置环境变量,在/etc/profile增加以下代码。

JAVA_HOME=/home/chengxu/jdk1.6.0_38
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/dt.jar:$JAVA_HOME/jre/lib/tools.jar
export JAVA_HOME PATH CLASSPATH

4)使profile文件更新生效。

./etc/profile

2.安装Scala
Scala官网提供各个版本的Scala,用户需要根据Spark官方规定的Scala版本进行下载和安装。
以Scala-2.10为例进行介绍。
1)下载scala-2.10.4.tgz。
2)在目录下解压:
tar -xzvf scala-2.10.4.tgz
3)配置环境变量,在/etc/profile中添加下面的内容。

export SCALA_HOME=/home/chengxu/scala-2.10.4/scala-2.10.4
export PATH=${SCALA_HOME}/bin:$PATH

4)使profile文件更新生效。

./etc/profile

3.配置SSH免密码登录
在集群管理和配置中有很多工具可以使用。例如,可以采用pssh等Linux工具在集群中分发与复制文件,用户也可以自己书写Shell、Python的脚本分发包。
Spark的Master节点向Worker节点发命令需要通过ssh进行发送,用户不希望Master每发送一次命令就输入一次密码,因此需要实现Master无密码登录到所有Worker。
Master作为客户端,要实现无密码公钥认证,连接到服务端Worker。需要在Master上生成一个密钥对,包括一个公钥和一个私钥,然后将公钥复制到Worker上。当Master通过ssh连接Woker时,Worker就会生成一个随机数并用Master的公钥对随机数进行加密,发送给Worker。Master收到加密数之后再用私钥进行解密,并将解密数回传给Worker,Worker确认解密数无误之后,允许Master进行连接。这就是一个公钥认证过程,其间不需要用户手工输入密码,主要过程是将Master节点公钥复制到Worker节点上。
下面介绍如何配置Master与Worker之间的SSH免密码登录。
1)在Master节点上,执行以下命令。

ssh-keygen-trsa

2)打印日志执行以下命令。

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/*回车,设置默认路径*/
Enter passphrase (empty for no passphrase):
/*回车,设置空密码*/
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

如果是root用户,则在/root/.ssh/目录下生成一个私钥id_rsa和一个公钥id_rsa.pub。
把Master上的id_rsa.pub文件追加到Worker的authorized_keys内,以172.20.14.144 (Worker)节点为例。
3)复制Master的id_rsa.pub文件。

scp id_rsa.pub root@172.20.14.144:/home
/*可使用pssh对全部节点分发*/

4)登录172.20.14.144 (Worker节点),执行以下命令。

cat /home/id_rsa.pub >> /root/.ssh/authorized_keys
/*可使用pssh对全部节点分发*/

其他的Worker执行同样的操作。
注意:配置完毕,如果Master仍然不能访问Worker,可以修改Worker的authorized_keys文件的权限,命令为chmod 600 authorized_keys。
4.安装Hadoop
下面讲解Hadoop的安装过程和步骤。
(1)下载hadoop-2.2.0
1)选取一个Hadoop镜像网址,下载Hadoop。

$ wgethttp://www.trieuvan.com/apache/hadoop/common/
hadoop-2.2.0/hadoop-2.2.0.tar.gz

2)解压tar包。

$ sudo tar-vxzf hadoop-2.2.0.tar.gz -C /usr/local
$ cd /usr/local
$ sudo mv hadoop-2.2.0 hadoop
$ sudo chown -R hduser:hadoop hadoop

(2)配置Hadoop环境变量
1)编辑profile文件。

vi /etc/profile

2)在profile文件中增加以下内容。

export JAVA_HOME=/usr/lib/jvm/jdk/
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL

通过如上配置就可以让系统找到JDK和Hadoop的安装路径。
(3)编辑配置文件
1)进入Hadoop所在目录/usr/local/hadoop/etc/hadoop。
2)配置hadoop-env.sh文件。

export JAVA_HOME=/usr/lib/jvm/jdk/

3)配置core-site.xml文件。

<configuration>
/*这里的值指的是默认的HDFS路径*/
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
/*缓冲区大小:io.file.buffer.size默认是4KB*/
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
/*临时文件夹路径*/
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home//tmp</value>
<description>Abase for other 
temporary directories.       </description>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>

4)配置yarn-site.xml文件。

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
/*resourcemanager的地址*/
<property>
<name>yarn.resourcemanager.address</name>
<value>Master:8032</value>
</property>
/*调度器的端口*/
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value> Master1:8030</value>
</property>
/*resource-tracker端口*/
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value> Master:8031</value>
</property>
/*resourcemanager管理器端口*/
<property>
<name>yarn.resourcemanager.admin.address</name>
<value> Master:8033</value>
</property>
/* ResourceManager 的 Web 端口,监控 job 的资源调度*/
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value> Master:8088</value>
</property>
</configuration>

5)配置mapred-site.xml文件,加入如下内容。

<configuration>
/*hadoop对map-reduce运行框架一共提供了3种实现,在mapred-site.xml中通过"mapreduce.framework.name"这个属性来设置为"classic"、"yarn"或者"local"*/
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
/*MapReduce JobHistory Server地址*/
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
/*MapReduce JobHistory Server Web UI地址*/

<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>

(4)创建namenode和datanode目录,并配置其相应路径
1)创建namenode和datanode目录,执行以下命令。

$ mkdir /hdfs/namenode
$ mkdir /hdfs/datanode

2)执行命令后,再次回到目录 /usr/local/hadoop/etc/hadoop,配置hdfs-site.xml 文件,在文件中添加如下内容。

<configuration>
/*配置主节点名和端口号*/
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:9001</value>
</property>
/*配置从节点名和端口号*/
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/hdfs/namenode</value>
</property>
/*配置datanode的数据存储目录*/
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/hdfs/datanode</value>
</property>
/*配置副本数*/
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
/*将dfs.webhdfs.enabled属性设置为true,否则就不能使用webhdfs的LISTSTATUS、LISTFILESTATUS等需要列出文件、文件夹状态的命令,因为这些信息都是由namenode保存的*/
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>

(5)配置Master和Slave文件
1)Master文件负责配置主节点的主机名。例如,主节点名为Master,则需要在Master文件添加以下内容。

Master /*Master为主节点主机名*/

2)配置Slaves文件添加从节点主机名,这样主节点就可以通过配置文件找到从节点,和从节点进行通信。例如,以Slave1~Slave5为从节点的主机名,就需要在Slaves文件中添加如下信息。

/Slave*为从节点主机名*/
Slave1
Slave2
Slave3
Slave4
Slave5

(6)将Hadoop的所有文件通过pssh分发到各个节点
执行如下命令。

./pssh -h hosts.txt -r /hadoop  /

(7)格式化Namenode(在Hadoop根目录下)

./bin/hadoop namenode -format

(8)启动Hadoop

./sbin/start-all.sh

(9)查看是否配置和启动成功
如果在x86机器上运行,则通过jps命令,查看相应的JVM进程

2584 DataNode
2971 ResourceManager
3462 Jps
3179 NodeManager
2369 NameNode
2841 SecondaryNameNode

注意,由于在IBM JVM中没有jps命令,所以需要用户按照下面命令逐个查看。

ps-aux|grep *DataNode*     /*查看DataNode进程*/

5.安装Spark
进入官网下载对应Hadoop版本的Spark程序包(见图2-1)。


e852763411c7329c0b930aa33a104cd6a4e58f74

截止到笔者进行本书写作之时,Spark已经更新到1.0版本。
以Spark1.0版本为例,介绍Spark的安装。
1)下载spark-1.0.0-bin-hadoop2.tgz。
2)解压tar -xzvf spark-1.0.0-bin-hadoop2.tgz。
3)配置conf/spark-env.sh文件
① 用户可以配置基本的参数,其他更复杂的参数请见官网的配置(Configuration)页面。
② 编辑conf/spark-env.sh文件,加入下面的配置参数。
export SCALA_HOME=/path/to/scala-2.10.4
export SPARK_WORKER_MEMORY=7g
export SPARK_MASTER_IP=172.16.0.140
export MASTER=spark://172.16.0.140:7077

参数SPARK_WORKER_MEMORY决定在每一个Worker节点上可用的最大内存,增加这个数值可以在内存中缓存更多数据,但是一定要给Slave的操作系统和其他服务预留足够的内存。
需要配置SPARK_MASTER_IP和MASTER,否则会造成Slave无法注册主机错误。
4)配置slaves文件。
编辑conf/slaves文件,以5个Worker节点为例,将节点的主机名加入slaves文件中。

Slave1
Slave2
Slave3
Slave4
Slave5

6.启动集群
(1)Spark启动与关闭
1)在Spark根目录启动Spark。

./sbin/start-all.sh

2)关闭Spark。

./sbin/stop-all.sh

(2)Hadoop的启动与关闭
1)在Hadoop根目录启动Hadoop。

./sbin/start-all.sh

2)关闭Hadoop。

./sbin/stop-all.sh

(3)检测是否安装成功
1)正常状态下的Master节点如下。

-bash-4.1# jps
23526 Jps
2127 Master
7396 NameNode
7594 SecondaryNameNode
7681 ResourceManager

2)利用ssh登录Worker节点。

-bash-4.1# ssh slave2
-bash-4.1# jps
1405 Worker
1053 DataNode
22455 Jps
31935 NodeManager

至此,在Linux集群上安装与配置Spark集群的步骤告一段落。
2.1.2 在Windows上安装与配置Spark
本节介绍在Windows系统上安装Spark的过程。在Windows环境下需要安装Cygwin模拟Linux的命令行环境来安装Spark。
(1)安装JDK
相对于Linux、Windows的JDK安装更加自动化,用户可以下载安装Oracle JDK或者OpenJDK。只安装JRE是不够的,用户应该下载整个JDK。
安装过程十分简单,运行二进制可执行文件即可,程序会自动配置环境变量。
(2)安装Cygwin
Cygwin是在Windows平台下模拟Linux环境的一个非常有用的工具,只有通过它才可以在Windows环境下安装Hadoop和Spark。具体安装步骤如下。
1)运行安装程序,选择install from internet。
2)选择网络最好的下载源进行下载。
3)进入Select Packages界面(见图2-2),然后进入Net,选择openssl及openssh。因为之后还是会用到ssh无密钥登录的。


<a href=https://yqfile.alicdn.com/9f682494c6a508ec9fe0a5099c3d8f0d3be3079c.png" >

另外应该安装“Editors Category”下面的“vim”。这样就可以在Cygwin上方便地修改配置文件。
最后需要配置环境变量,依次选择“我的电脑”→“属性”→“高级系统设置”→“环境变量”命令,更新环境变量中的path设置,在其后添加Cygwin的bin目录和Cygwin的usrbin两个目录。
(3)安装sshd并配置免密码登录
1)双击桌面上的Cygwin图标,启动Cygwin,执行ssh-host-config -y命令,出现如
图2-3所示的界面。


<a href=https://yqfile.alicdn.com/9e6448f0527c2094f111b7da341237e7daff919f.png" >

2)执行后,提示输入密码,否则会退出该配置,此时输入密码和确认密码,按回车键。最后出现Host configuration finished.Have fun!表示安装成功。
3)输入net start sshd,启动服务。或者在系统的服务中找到并启动Cygwin sshd服务。
注意,如果是Windows 8操作系统,启动Cygwin时,需要以管理员身份运行(右击图标,选择以管理员身份运行),否则会因为权限问题,提示“发生系统错误5”。
(4)配置SSH免密码登录
1)执行ssh-keygen命令生成密钥文件,如图2-4所示。


e012b58e5fc03458d81393f33d94626ab10a6b30

2)执行此命令后,在你的Cygwinhome用户名路径下面会生成.ssh文件夹,可以通过命令ls -a /home/用户名 查看,通过ssh -version命令查看版本。
3)执行完ssh-keygen命令后,再执行下面命令,生成authorized_keys文件。
cd ~/.ssh/
cp id_dsa.pub authorized_keys

这样就配置好了sshd服务。
(5)配置Hadoop
修改和配置相关文件与Linux的配置一致,读者可以参照上文Linux中的配置方式,这里不再赘述。
(6)配置Spark
修改和配置相关文件与Linux的配置一致,读者可以参照上文Linux中的配置方式,这里不再赘述。
(7)运行Spark
1)Spark的启动与关闭
①在Spark根目录启动Spark。

./sbin/start-all.sh

②关闭Spark。

./sbin/stop-all.sh

2)Hadoop的启动与关闭
①在Hadoop根目录启动Hadoop。

./sbin/start-all.sh

②关闭Hadoop。

./sbin/stop-all.sh

3)检测是否安装成功
正常状态下会出现如下内容。

-bash-4.1# jps
23526 Jps
2127 Master
7396 NameNode
7594 SecondaryNameNode
7681 ResourceManager
1053 DataNode
31935 NodeManager
1405 Worker

如缺少进程请到logs文件夹下查看相应日志,针对具体问题进行解决。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
4月前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
312 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
15天前
|
SQL 分布式计算 关系型数据库
基于云服务器的数仓搭建-hive/spark安装
本文介绍了在本地安装和配置MySQL、Hive及Spark的过程。主要内容包括: - **MySQL本地安装**:详细描述了内存占用情况及安装步骤,涉及安装脚本的编写与执行,以及连接MySQL的方法。 - **Hive安装**:涵盖了从上传压缩包到配置环境变量的全过程,并解释了如何将Hive元数据存储配置到MySQL中。 - **Hive与Spark集成**:说明了如何安装Spark并将其与Hive集成,确保Hive任务由Spark执行,同时解决了依赖冲突问题。 - **常见问题及解决方法**:列举了安装过程中可能遇到的问题及其解决方案,如内存配置不足、节点间通信问题等。
158 1
基于云服务器的数仓搭建-hive/spark安装
zdl
|
4月前
|
消息中间件 运维 大数据
大数据实时计算产品的对比测评:实时计算Flink版 VS 自建Flink集群
本文介绍了实时计算Flink版与自建Flink集群的对比,涵盖部署成本、性能表现、易用性和企业级能力等方面。实时计算Flink版作为全托管服务,显著降低了运维成本,提供了强大的集成能力和弹性扩展,特别适合中小型团队和业务波动大的场景。文中还提出了改进建议,并探讨了与其他产品的联动可能性。总结指出,实时计算Flink版在简化运维、降低成本和提升易用性方面表现出色,是大数据实时计算的优选方案。
zdl
236 56
|
3月前
|
存储 负载均衡 监控
揭秘 Elasticsearch 集群架构,解锁大数据处理神器
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于大数据处理、实时搜索和分析。本文深入探讨了 Elasticsearch 集群的架构和特性,包括高可用性和负载均衡,以及主节点、数据节点、协调节点和 Ingest 节点的角色和功能。
110 0
|
4月前
|
SQL 存储 大数据
单机顶集群的大数据技术来了
大数据时代,分布式数仓如MPP成为热门技术,但其高昂的成本让人望而却步。对于多数任务,数据量并未达到PB级,单体数据库即可胜任。然而,由于SQL语法的局限性和计算任务的复杂性,分布式解决方案显得更为必要。esProc SPL作为一种开源轻量级计算引擎,通过高效的算法和存储机制,实现了单机性能超越集群的效果,为低成本、高效能的数据处理提供了新选择。
|
4月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
260 2
|
4月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
228 1
|
5月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
110 0
|
5月前
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
83 0