工作快两个月了,已经大半年没有更新了,决定继续更新博客。续更的第一个系列将会是与目前工作相关Spark系列。第一篇就从Spark的安装与配置开始。
集群的准备
要搭建Spark集群环境,首先要准备集群。笔者这里使用了三台机器,都为debian8系统。
三台机的信息如下:
172.30.232.140 master
172.30.232.138 slave1
172.30.232.139 slave2
这个ip信息需要添加到三节机器的/etc/hosts中去。
三机器的应用规划如下:
master NameNode & Spark master & Spark woker
slave1 DataNode & Spark woker
slave2 DataNode & Spark woker
集群间互信认证设置
集群中,master需要管理slave节点,因此master需要有控制slaves的权限,即配置ssh-key认证。如果集群未安装ssh协议,请先安装ssh协议。
- 进入master节点,执行如下命令,生成密钥对
ssh-keygen -t rsa
说明:些命令将会在/root/.ssh/目录下生成id_rsa.pub和id_rsas两个文件
- 将master生成的公钥分发的各机器(包含master本身)并添加到authorized_keys中
在master 中直接执行
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
将id_rsa.pub分发到其它机器,执行如下命令
scp /root/.ssh/id_rsa.pub slave1:/root/.ssh/id_rsa.pub.master scp /root/.ssh/id_rsa.pub slave2:/root/.ssh/id_rsa.pub.master
分别进入slave1机器和slave2机器,执行
cat /root/.ssh/id_rsa.pub.master >> /root/.ssh/authorized_keys
说明:验证配置是否成功,执行ssh slave1或ssh slave2,若直接登陆到机slave机器,则配置成功
安装JDK和Scala运行环境
集群中所有机器都要有Spark的运行环境,即JDK和Scala,以下操作以master节点例,其它节点操作相同(其它节点的配置可留到master节点完全配置好之后,将所有文件及设置直接拷贝到其它节点)
- JDK的安装配置
首先去oracle官网下载JDK:jdk-8u181-linux-x64.tar.gz
解压到/usr/lib/jvm/目录(提前创建好目录)下,执行如下 命令
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/lib/jvm/
配置JDK变量JAVA_HOME,CLASSPATH和PATH,将如下内容添加到/etc/profile中
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_181/ export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/rt.jar
- Scala的安装和配置
首先去Scala官网下载Scala:scala-2.12.6.tgz
解压到/usr/local/share目录,执行如下命令
tar -zxvf scala-2.12.6.tgz -C /usr/local/share/
配置SCALA_HOME和PATH,,将如下内容添加到/etc/profile文件中
export SCALA_HOME=/usr/local/share/scala-2.12.6/ export PATH=$PATH:$SCALA_HOME/bin
说明:所有的节点都要进行这一步操作
Hadoop2.7.5分布式环境搭建
Hadoop是Spark所需要的组件。集群所有机器都需要安装Hadoop环境。(其它节点的配置可留到master节点完全配置好之后,将所有文件及设置直接拷贝到其它节点)
- 首先去Apache官网下载Hadoop程序:hadoop-2.7.5.tar.gz
解压到/opt目录下,执行如下命令:
tar -zxvf hadoop-2.7.5.tar.gz -C /opt
- 修改/etc/profile文件,增加如下的环境变量:
export HADOOP_HOME=/opt/hadoop-2.7.5/ export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_ROOT_LOGGER=INFO,console export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
- 修改${HADOOP_HOME}/etc/hadoop/hadoop-env.sh文件中的JAVA_HOME一行如下
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_181/
- 修改${HADOOP_HOME}/etc/hadoop/slaves文件,添加两个slave的hostname,内容如下:
slave1
slave2
说明:如果向让master主机也成为DataNode,可以将master也加入到slaves文件中。
- 修改$HADOOP_HOME/etc/hadoop/core-site.xml文件内容如下:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop-2.7.5/tmp</value> </property> </configuration>
- 修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml文件内容如下:
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:50090</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/opt/hadoop-2.7.5/hdfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/opt/hadoop-2.7.5/hdfs/data</value> </property> </configuration>
- 从模板复制mapred-site.xml.template文件为mapred-site.xml文件,并修改内容如下:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:19888</value> </property> </configuration>
7. 修改$HADOOP_HOME/etc/hadoop/yarn-site.xml内容如下:
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property> </configuration>
- 将所有hadoop文件及配置过的文件拷贝到其它集群(可用scp命令),即集群中的所在机器配置完全相同。
在master机器上执行NameNode格式化指令:
hadoop namenode -format
启动Hadoop集群,执行如下命令:
/opt/hadoop-2.7.5/sbin/start-all.sh
说明:在master机器下执行jps指令,看到如下内容,即为启动成功
在slave节点执行jps指令,看到如下内容,即为启动成功
Spark分布式环境搭建
所有的节点都需要安装Spark环境。以master节点为例(其它节点的配置可留到master节点完全配置好之后,将所有文件及设置直接拷贝到其它节点)
- 去Apache官网下载spark程序:spark-2.1.0-bin-hadoop2.7.tgz
解压到/opt目录下,执行如下命令:
tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz -C /opt/
- 修改/etc/profile文件,添加如下内容:
export SPARK_HOME=/opt/spark-2.1.0-bin-hadoop2.7/ export PATH=$PATH:$SPARK_HOME/bin
- 从模板复制${SPARK_HOME}/conf/spark-env.sh.template文件为spark-env.sh文件,并修改内容如下:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_181/ export SCALA_HOME=/usr/local/share/scala-2.12.6/ export HADOOP_HOME=/opt/hadoop-2.7.5/ export HADOOP_CONF_DIR=/opt/hadoop-2.7.5/etc/hadoop export SPARK_MASTER_IP=master export SPARK_WORKER_MEMORY=1g export SPARK_HOME=/opt/spark-2.1.0-bin-hadoop2.7 export SPARK_DIST_CLASSPATH=$(/opt/hadoop-2.7.5/bin/hadoop classpath)
4. 从模板复制${SPARK_HOME}/conf/slaves.template文件为slaves,并修改内容如下:
master slave1 slave2
说明:如果不想master节点成为worker节点,可以不添加master。
- 将所有spark文件及配置过的文件复制到其它机器上,在master节点上执行如下命令启动spark
/opt/spark-2.1.0-bin-hadoop2.7/sbin/start-all.sh
说明:在master节点执行jps命令,内容如下即为启动成功
在slave节点执行jps命令,内容如下即为启动成功
到此,Spark环境就算部署完成了,可以执行spark-shell命令,进行spark shell环境进行简单测试了。