Linux安装配置Spark集群

Linux安装配置Spark集群

假设我们有99.1.1.164(Master)、99.1.1.165(Slave01)、99.1.1.166(Slave02)三台机器,想要搭建一个Spark集群。首先我们需要搭建一个分布式的Hadoop集群,如果是零基础建议从单机伪分布式的集群开始学习,具体可以参见另一篇文章Linux安装配置Hadoop
这篇文章里我们针对生产环境的需求,会修改一些默认配置。另外,由于集群包括Master、Slave01、Slave02以及今后提交Spark程序的客户端,本文会特别提示每个操作需要在哪些主机上完成。
实验环境:RedHat6.4+Hadoop2.7.3+Spark2.0.1+Scala2.11.8。

1. 安装前准备

1.1 新建hadoop用户

Master、Slave01、Slave02均需操作。
Hadoop使用root用户启动会有问题,为此我们专门新建一个hadoop用户(也可以其他名字)。为方便起见,再为其配置免密码执行sudo:

useradd hadoop
echo 'hadoop ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

su - hadoop以下所有操作都用hadoop用户完成

1.2 配置节点主机名

Master、Slave01、Slave02、客户端均需操作。
虽然使用IP其实也可以,但我们习惯在配置过程中使用主机名而不是IP,为此三台主机需确保能ping通Master、Slave01、Slave02三个主机名,或者修改/etc/hosts

sudo echo '99.1.1.164     bigdata-SZTS-Master' >> /etc/hosts
sudo echo '99.1.1.165     bigdata-SZTS-Slave01' >> /etc/hosts
sudo echo '99.1.1.166     bigdata-SZTS-Slave02' >> /etc/hosts

1.3 配置免密码登录

只需在Master上操作。
Master启动Master、Slave01、Slave02上的进程时使用的是远程登录的方式,为此需要配置Master的hadoop用户能免密码登录三台主机:

ssh-keygen -t rsa
ssh-copy-id bigdata-SZTS-Master
ssh-copy-id bigdata-SZTS-Slave01
ssh-copy-id bigdata-SZTS-Slave02

一路回车并在必要时输入hadoop的密码即可。

1.4 准备Java环境

Master、Slave01、Slave02、客户端均需操作。
建议使用JDK1.8以上版本,并配置环境变量。sudo vim /etc/profile,修改:

export JAVA_HOME=/usr/java/jdk1.8.0_71

此外,由于Unix和Linux的区别,Hadoop有时默认的Java路径为/bin/java。若未配置,在以Yarn模式运行Spark程序时,日志中会记录以下错误:

/bin/bash: /bin/java: No such file or directory

为此建一个软链接即可:

cd /bin
sudo ln -s /usr/bin/java

最后确认以下命令均能运行Java且版本一致:

/bin/java -version
/usr/bin/java -version
$JAVA_HOME/bin/java -version

2. 安装配置Hadoop

我们使用yum、rpm等方式安装应用时,会发现许多应用的文件分布遵循一定的规范,比如应用安装在/usr/share/appname,配置文件放在/etc/appname,日志文件放在/var/log/appname,临时文件放在/tmp,等等,从而在运行时应用的根目录不产生任何文件。我们也遵循同样的规范。

2.1 下载并安装

Master、Slave01、Slave02均需操作。

wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
tar zxvf hadoop-2.7.3.tar.gz
sudo mv hadoop-2.7.3 /usr/share/hadoop-2.7.3

配置环境变量。sudo vim /etc/profile,修改:

export HADOOP_HOME=/usr/share/hadoop-2.7.3

2.2 修改配置文件位置

Master、Slave01、Slave02均需操作。
将配置文件统一放置便于进行备份,也能确保应用升级时配置文件不被覆盖。Hadoop配置文件默认位于$HADOOP_HOME/etc/hadoop,为此将其移到/etc下并建立软链接即可:

cd $HADOOP_HOME/etc
sudo mv hadoop /etc/hadoop
ln -s /etc/hadoop

接下来我们对/etc/hadoop文件夹中的配置文件进行修改。

2.3 core-site.xml

Master、Slave01、Slave02均需操作。
将临时文件统一放置便于进行文件清理。添加:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://bigdata-SZTS-Master:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/tmp</value>
    </property>
</configuration>

2.4 hdfs-site.xml

Master、Slave01、Slave02均需操作。
将数据文件移到应用根目录以外,便于进行管理和应用升级。添加:

<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>bigdata-SZTS-Master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/opt/app/data/hadoop/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/opt/app/data/hadoop/dfs/data</value>
        </property>
</configuration>

新建相应文件夹并确保hadoop用户有权限:

sudo mkdir /opt/app/data/hadoop
sudo chown -R hadoop /opt/app/data/hadoop

2.5 yarn-site.xml

Master、Slave01、Slave02均需操作。
添加:

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>bigdata-SZTS-Master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

如果以Yarn的client模式运行Spark程序时报以下错误:

AM Container is running beyond virtual memory limits

可以通过以下两种方式解决。添加:

a. 禁用虚拟内存限制检查
<property>
  <name>yarn.nodemanager.vmem-check-enabled</name>
  <value>false</value>
</property>
b.增加每MB物理内存可使用的虚拟内存的倍数(默认2.1)
<property>
  <name>yarn.nodemanager.vmem-pmem-ratio</name>
  <value>3</value>
</property>

2.6 mapred-site.xml

Master、Slave01、Slave02均需操作。
添加:

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>bigdata-SZTS-Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>bigdata-SZTS-Master:19888</value>
        </property>
</configuration>

2.7 slaves

Master、Slave01、Slave02均需操作。
新建该文件或添加:

bigdata-SZTS-Slave01
bigdata-SZTS-Slave02

2.8 日志文件配置

Master、Slave01、Slave02均需操作。
将日志文件统一放置便于进行文件清理。另外Hadoop默认输出的日志级别是INFO,信息太多,可将其改为WARN。vim下全文替换的命令为:

:%s/INFO/WARN/g

修改以下文件:

hadoop-env.sh
JAVA_HOME=/usr/java/jdk1.8.0_71
export HADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-WARN,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-WARN,NullAppender} $HADOOP_NAMENODE_OPTS"
export HADOOP_SECONDARYNAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-WARN,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-WARN,NullAppender} $HADOOP_SECONDARYNAMENODE_OPTS"
export HADOOP_LOG_DIR=/var/log/hadoop
export HADOOP_ROOT_LOGGER=WARN,console

新建相应文件夹并确保hadoop用户有权限:

sudo mkdir /var/log/hadoop
sudo chown -R hadoop /var/log/hadoop
log4j.properties

修改:

hadoop.root.logger=WARN,console
mapred-env.sh

修改:

export HADOOP_MAPRED_ROOT_LOGGER=WARN,RFA
export HADOOP_MAPRED_LOG_DIR=/var/log/hadoop
export HADOOP_JHS_LOGGER=WARN,RFA
yarn-env.sh

注意export YARN_LOG_DIR这一句的位置:

export YARN_LOG_DIR=/var/log/hadoop
# default log directory & file
...
...
YARN_OPTS="$YARN_OPTS -Dhadoop.root.logger=${YARN_ROOT_LOGGER:-WARN,console}"
YARN_OPTS="$YARN_OPTS -Dyarn.root.logger=${YARN_ROOT_LOGGER:-WARN,console}"

2.9 测试

只需在Master上操作。
每个步骤执行完后都要确认正确,再执行下一步。

  • 首次启动需格式化hdfs:bin/hdfs namenode -format。成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。
  • sbin/start-dfs.sh:成功的话,Master上执行jps可以看到NameNode、SecondaryNameNode,Slave01、Slave02上执行jps可以看到DataNode。否则sbin/stop-dfs.sh,检查错误。
  • sbin/start-yarn.sh:成功的话,Master上执行jps可以看到ResourceManager,Slave01、Slave02上执行jps可以看到NodeManager。否则sbin/stop-yarn.sh,检查错误。
  • sbin/mr-jobhistory-daemon.sh start historyserver:成功的话,Master上执行jps可以看到JobHistoryServer。否则sbin/mr-jobhistory-daemon.sh stop historyserver,检查错误。
  • 最后在hdfs上建一个文件夹作为测试:
hdfs dfs -mkdir /data
hdfs dfs -ls /

3. 安装配置Spark

3.1 下载安装Scala

Master、Slave01、Slave02均需操作。

wget http://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.rpm
sudo rpm -i scala-2.11.8.rpm

配置环境变量。sudo vim /etc/profile,修改:

export SCALA_HOME=/usr/share/scala

3.2 下载并安装

Master、Slave01、Slave02、客户端均需操作。

wget http://d3kbcqa49mib13.cloudfront.net/spark-2.0.1-bin-hadoop2.7.tgz
tar zxvf spark-2.0.1-bin-hadoop2.7.tgz
sudo mv spark-2.0.1-bin-hadoop2.7 /usr/share/spark-2.0.1-bin-hadoop2.7

配置环境变量。sudo vim /etc/profile,修改:

export SPARK_HOME=/usr/share/spark-2.0.1-bin-hadoop2.7

3.3 修改配置

Master、Slave01、Slave02、客户端均需操作。
Spark配置文件默认位于$SPARK_HOME/conf,为此将其移到/etc下并建立软链接即可:

sudo mv conf /etc/spark
ln -s /etc/spark conf

接下来我们对该文件夹中的配置文件进行修改。

slaves

新建该文件或添加:

bigdata-SZTS-Slave01
bigdata-SZTS-Slave02
spark-env.sh

修改:

export SPARK_LOCAL_IP=`hostname`
export HADOOP_CONF_DIR=/etc/hadoop
export SPARK_MASTER_HOST=bigdata-SZTS-Master
export SPARK_LOG_DIR=/var/log/spark

尤其注意SPARK_LOCAL_IP的设置。Master上会有一个SparkUI,可以跳转到各Slave的页面查看Slave的stdout、stderr等输出。SPARK_LOCAL_IP配置成127.0.0.1或0.0.0.0会导致无法跳转,而我们又想保持配置文件的统一性,所以取了主机名。
另外我们修改了日志文件的位置,新建相应文件夹并确保hadoop用户有权限:

sudo mkdir /var/log/spark
sudo chown -R hadoop /var/log/spark
log4j.properties

修改:

log4j.rootCategory=WARN, console
log4j.logger.org.apache.spark.repl.Main=WARN
log4j.logger.org.spark_project.jetty=WARN

3.4 测试

只需在Master上操作。
sbin/start-all.sh:成功的话,Master上执行jps可以看到Master,Slave01、Slave02上执行jps可以看到Worker。否则sbin/stop-all.sh,检查错误。

4. 客户端配置

4.1 Linux客户端

如果想简单起见,可以把客户端按照Master、Slave01或Slave02进行配置,但这样并不有助于我们理解Spark,因为里面很多配置对于客户端来说是多余的。事实上,客户端的配置相当简单。
将hadoop-2.7.3.tar.gz安装包下的配置文件解压到/etc/hadoop
修改/etc/hadoop/core-site.xml

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://bigdata-SZTS-Master:9000</value>
        </property>
</configuration>

修改/etc/hadoop/yarn-site.xml

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>bigdata-SZTS-Master</value>
        </property>
</configuration>

完啦!

4.2 Windows客户端

Windows客户端和Linux客户端配置稍有不同。另外Windows也不是主流的使用Spark的场景,这里只做简单介绍。目前来看Windows客户端的最大好处是可以使用Intellij Idea进行Spark程序的开发和调试。

  • 安装JDK1.8到C:\Program_Files\Java\jdk1.8.0_71
  • 将hadoop-2.7.3.tar.gz的配置文件解压到C:\Program_Files\hadoop-2.7.3\etc\hadoop
  • Hadoop官方提供的在Windows下的可执行文件存在问题,如果不想自己编译可以下载第三方编译的bin文件到C:\Program_Files\hadoop-2.7.3\bin,这个在网上一搜一大把,例如hadoop-2.7.3 bin目录 for win10 64位
  • 修改core-site.xmlyarn-site.xml,和Linux客户端相同
  • spark-2.0.1-bin-hadoop-2.7.tgz解压到C:\Program_Files\spark-2.0.1-bin-hadoop2.7
  • 右键计算机->属性->高级系统设置->环境变量,新建以下环境变量
  • JAVA_HOME:C:\Program_Files\Java\jdk1.8.0_71
  • HADOOP_HOME:C:\Program_Files\hadoop-2.7.3
  • HADOOP_CONF_DIR:%HADOOP_HOME%\etc\hadoop
  • SPARK_HOME:C:\Program_Files\spark-2.0.1-bin-hadoop2.7
  • 在Master节点上添加与执行操作的Windows用户名同名的用户并加入supergroup组:
adduser mvpboss1004
groupadd supergroup
usermod -a -G supergroup mvpboss1004

否则在spark-submit需要读写HDFS时会报以下错误

Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=mvpboss1004, access=WRITE, inode="/user":hadoop:supergroup:drwxr-xr-x

5. spark-submit测试

spark-submit提交作业有多种模式,我们使用Spark自带的计算圆周率的例子进行测试,假设客户端IP为99.1.14.3,以下操作在客户端上进行。Windows和Linux客户端的命令是一样的。

5.1 local

bin/spark-submit  --class org.apache.spark.examples.SparkPi --master local[*] examples/jars/spark-examples_2.11-2.0.1.jar 10

命令行会显示结果:

Pi is roughly 3.14015114015114

5.2 Yarn+client

bin/spark-submit  --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client --conf spark.driver.host=99.1.14.3 examples/jars/spark-examples_2.11-2.0.1.jar 10

命令行会显示结果。

5.3 Yarn+cluster

bin/spark-submit  --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --conf spark.driver.host=99.1.14.3 examples/jars/spark-examples_2.11-2.0.1.jar 10

由于cluster模式完全运行在集群上,本地无法看到结果,只能通过以下方式。依次执行:

  • 访问http://bigdata-szts-master:8088/cluster/
  • ID一列点击刚才提交的任务ID链接,例如application_1488686054344_0015
  • 跳转后拉到底,Logs一列点击刚才提交的任务Logs链接
  • 跳转后点击stdout的输出,例如stdout : Total file length is 32 bytes
  • 跳转的页面会显示结果

5.4 Standalone+client

bin/spark-submit  --class org.apache.spark.examples.SparkPi --master spark://bigdata-szts-master:7077 --deploy-mode client --conf spark.driver.host=99.1.14.3 examples/jars/spark-examples_2.11-2.0.1.jar 10

命令行会显示结果。

5.5 Standalone+cluster

bin/spark-submit  --class org.apache.spark.examples.SparkPi --master spark://bigdata-szts-master:6066 --deploy-mode cluster --conf spark.driver.host=99.1.14.3 examples/jars/spark-examples_2.11-2.0.1.jar 10

由于cluster模式完全运行在集群上,本地无法看到结果,只能通过以下方式。依次执行:

  • 访问http://bigdata-szts-master:8080
  • Completed Drivers一栏Worker一列点击刚才提交的任务链接,Slave01或Slave02都有可能,例如worker-20170305203148-99.1.36.165-58334
  • 跳转后Finished Drivers一栏Logs一列点击刚才提交的任务stdout链接
  • 跳转的页面会显示结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值