2.1.1 在Linux集群上安装与配置Spark

下面介绍如何在Linux集群上安装与配置Spark。

1.安装JDK

安装JDK大致分为下面4个步骤。

1)用户可以在Oracle JDK的官网下载相应版本的JDK,本例以JDK 1.6为例,官网地址为http://www.oracle.com/technetwork/java/javase/downloads/index.html。

2)下载后,在解压出的JDK的目录下执行bin文件。


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

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


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

4)使profile文件更新生效。


  1. ./etc/profile

2.安装Scala

Scala官网提供各个版本的Scala,用户需要根据Spark官方规定的Scala版本进行下载和安装。Scala官网地址为http://www.scala-lang.org/。

以Scala-2.10为例进行介绍。

1)下载scala-2.10.4.tgz。

2)在目录下解压:


  1. tar -xzvf scala-2.10.4.tgz

3)配置环境变量,在/etc/profile中添加下面的内容。


  1. export SCALA_HOME=/home/chengxu/scala-2.10.4/scala-2.10.4
  2. export PATH=${SCALA_HOME}/bin$PATH

4)使profile文件更新生效。


  1. ./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节点上,执行以下命令。


  1. ssh-keygen-trsa

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


  1. Generating public/private rsa key pair.
  2. Enter file in which to save the key (/root/.ssh/id_rsa):
  3. /*回车,设置默认路径*/
  4. Enter passphrase empty for no passphrase):
  5. /*回车,设置空密码*/
  6. Enter same passphrase again
  7. Your identification has been saved in /root/.ssh/id_rsa.
  8. 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文件。


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

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


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

其他的Worker执行同样的操作。

注意:配置完毕,如果Master仍然不能访问Worker,可以修改Worker的authorized_keys文件的权限,命令为chmod 600 authorized_keys。

4.安装Hadoop

下面讲解Hadoop的安装过程和步骤。

(1)下载hadoop-2.2.0

1)选取一个Hadoop镜像网址,下载Hadoop(官网地址为http://hadoop.apache.org/)。


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

2)解压tar包。


  1. $ sudo tar-vxzf hadoop-2.2.0.tar.gz -C /usr/local
  2. $ cd /usr/local
  3. $ sudo mv hadoop-2.2.0 hadoop
  4. $ sudo chown -R hduserhadoop hadoop

(2)配置Hadoop环境变量

1)编辑profile文件。


  1. vi /etc/profile

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


  1. export JAVA_HOME=/usr/lib/jvm/jdk/
  2. export HADOOP_INSTALL=/usr/local/hadoop
  3. export PATH=$PATH$HADOOP_INSTALL/bin
  4. export PATH=$PATH$HADOOP_INSTALL/sbin
  5. export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
  6. export HADOOP_COMMON_HOME=$HADOOP_INSTALL
  7. export HADOOP_HDFS_HOME=$HADOOP_INSTALL
  8. export YARN_HOME=$HADOOP_INSTALL

通过如上配置就可以让系统找到JDK和Hadoop的安装路径。

(3)编辑配置文件

1)进入Hadoop所在目录/usr/local/hadoop/etc/hadoop。

2)配置hadoop-env.sh文件。


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

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


  1. <configuration>
  2. /*这里的值指的是默认的HDFS路径*/
  3. <property>
  4. <name>fs.defaultFS</name>
  5. <value>hdfs://Master:9000</value>
  6. </property>
  7. /*缓冲区大小:io.file.buffer.size默认是4KB*/
  8. <property>
  9. <name>io.file.buffer.size</name>
  10. <value>131072</value>
  11. </property>
  12. /*临时文件夹路径*/
  13. <property>
  14. <name>hadoop.tmp.dir</name>
  15. <value>file:/home//tmp</value>
  16. <description>Abase for other
  17. temporary directories. </description>
  18. </property>
  19. <property>
  20. <name>hadoop.proxyuser.hduser.hosts</name>
  21. <value>*</value>
  22. </property>
  23. <property>
  24. <name>hadoop.proxyuser.hduser.groups</name>
  25. <value>*</value>
  26. </property>
  27. </configuration>

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


  1. <configuration>
  2. <property>
  3. <name>yarn.nodemanager.aux-services</name>
  4. <value>mapreduce_shuffle</value>
  5. </property>
  6. <property>
  7. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  8. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  9. </property>
  10. /*resourcemanager的地址*/
  11. <property>
  12. <name>yarn.resourcemanager.address</name>
  13. <value>Master:8032</value>
  14. </property>
  15. /*调度器的端口*/
  16. <property>
  17. <name>yarn.resourcemanager.scheduler.address</name>
  18. <value> Master1:8030</value>
  19. </property>
  20. /*resource-tracker端口*/
  21. <property>
  22. <name>yarn.resourcemanager.resource-tracker.address</name>
  23. <value> Master:8031</value>
  24. </property>
  25. /*resourcemanager管理器端口*/
  26. <property>
  27. <name>yarn.resourcemanager.admin.address</name>
  28. <value> Master:8033</value>
  29. </property>
  30. /* ResourceManager 的 Web 端口,监控 job 的资源调度*/
  31. <property>
  32. <name>yarn.resourcemanager.webapp.address</name>
  33. <value> Master:8088</value>
  34. </property>
  35. </configuration>

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


  1. <configuration>
  2. /*hadoop对map-reduce运行框架一共提供了3种实现,在mapred-site.xml中通过"mapreduce.framework.name"这个属性来设置为"classic"、"yarn"或者"local"*/
  3. <property>
  4. <name>mapreduce.framework.name</name>
  5. <value>yarn</value>
  6. </property>
  7. /*MapReduce JobHistory Server地址*/
  8. <property>
  9. <name>mapreduce.jobhistory.address</name>
  10. <value>Master:10020</value>
  11. </property>
  12. /*MapReduce JobHistory Server Web UI地址*/
  13. <property>
  14. <name>mapreduce.jobhistory.webapp.address</name>
  15. <value>Master:19888</value>
  16. </property>
  17. </configuration>

(4)创建namenode和datanode目录,并配置其相应路径

1)创建namenode和datanode目录,执行以下命令。


  1. $ mkdir /hdfs/namenode
  2. $ mkdir /hdfs/datanode

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


  1. <configuration>
  2. /*配置主节点名和端口号*/
  3. <property>
  4. <name>dfs.namenode.secondary.http-address</name>
  5. <value>Master:9001</value>
  6. </property>
  7. /*配置从节点名和端口号*/
  8. <property>
  9. <name>dfs.namenode.name.dir</name>
  10. <value>file:/hdfs/namenode</value>
  11. </property>
  12. /*配置datanode的数据存储目录*/
  13. <property>
  14. <name>dfs.datanode.data.dir</name>
  15. <value>file:/hdfs/datanode</value>
  16. </property>
  17. /*配置副本数*/
  18. <property>
  19. <name>dfs.replication</name>
  20. <value>3</value>
  21. </property>
  22. /*将dfs.webhdfs.enabled属性设置为true,否则就不能使用webhdfs的LISTSTATUS、LISTFILESTATUS等需要列出文件、文件夹状态的命令,因为这些信息都是由namenode保存的*/
  23. <property>
  24. <name>dfs.webhdfs.enabled</name>
  25. <value>true</value>
  26. </property>
  27. </configuration>

(5)配置Master和Slave文件

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


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

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


  1. /Slave*为从节点主机名*/
  2. Slave1
  3. Slave2
  4. Slave3
  5. Slave4
  6. Slave5

(6)将Hadoop的所有文件通过pssh分发到各个节点

执行如下命令。


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

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


  1. ./bin/hadoop namenode -format

(8)启动Hadoop


  1. ./sbin/start-all.sh

(9)查看是否配置和启动成功

如果在x86机器上运行,则通过jps命令,查看相应的JVM进程


  1. 2584 DataNode
  2. 2971 ResourceManager
  3. 3462 Jps
  4. 3179 NodeManager
  5. 2369 NameNode
  6. 2841 SecondaryNameNode

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


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

5.安装Spark

进入官网下载对应Hadoop版本的Spark程序包(见图2-1),官网地址为http://spark.apache.org/downloads.html。

2.1.1 在Linux集群上安装与配置Spark - 图1

图2-1 Spark下载官网

截止到笔者进行本书写作之时,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)页面,Spark配置(Configuration)地址为:http://spark.apache.org/docs/latest/configuration.html。

②编辑conf/spark-env.sh文件,加入下面的配置参数。


  1. export SCALA_HOME=/path/to/scala-2.10.4
  2. export SPARK_WORKER_MEMORY=7g
  3. export SPARK_MASTER_IP=172.16.0.140
  4. 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文件中。


  1. Slave1
  2. Slave2
  3. Slave3
  4. Slave4
  5. Slave5

6.启动集群

(1)Spark启动与关闭

1)在Spark根目录启动Spark。


  1. ./sbin/start-all.sh

2)关闭Spark。


  1. ./sbin/stop-all.sh

(2)Hadoop的启动与关闭

1)在Hadoop根目录启动Hadoop。


  1. ./sbin/start-all.sh

2)关闭Hadoop。


  1. ./sbin/stop-all.sh

(3)检测是否安装成功

1)正常状态下的Master节点如下。


  1. -bash-4.1# jps
  2. 23526 Jps
  3. 2127 Master
  4. 7396 NameNode
  5. 7594 SecondaryNameNode
  6. 7681 ResourceManager

2)利用ssh登录Worker节点。


  1. -bash-4.1# ssh slave2
  2. -bash-4.1# jps
  3. 1405 Worker
  4. 1053 DataNode
  5. 22455 Jps
  6. 31935 NodeManager

至此,在Linux集群上安装与配置Spark集群的步骤告一段落。