我爱编程

搭建Spark集群

2018-03-25  本文已影响0人  symsimmy

创建hadoop用户

#添加用户hadoop
adduser hadoop

这个过程中需要输入密码两次

Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

看到最后的字样就代表新建hadoop用户成功.
如果需要删除用户,使用下面的命令

userdel hadoop

把hadoop用户加入sudo用户组,编辑/etc/sudoers文件

sudo vi /etc/sudoers

然后在

root ALL=(ALL) ALL

后面加入

hadoop ALL=(ALL) ALL

注: 两个用户创建命令之间的区别
adduser: 会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码。
useradd:需要使用参数选项指定上述基本设置,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本。

下载所需要用到的工具包,并上传到hadoop用户目录

需要用到的工具包包括java,hadoop,scala,spark,.
这里我使用的各工具包的版本为

名称 版本号
Java jdk-8u161-linux-x64.tar.gz
hadoop hadoop-3.0.0.tar.gz
scala scala-2.11.8.tgz
spark spark-2.3.0-bin-hadoop2.7.tgz

这里我们先在其中一台机器上安装所有的工具包,然后使用scp命令将配置好的工具包同步到其余的服务器.
为了方便,我这里是先在windows机器上用FDM把所有的软件工具包下载好,然后使用ftp推送到服务器上的,由于是内网环境,所有上传带宽还不错,很快就上传完成了!

具体如下:


注解:类似的工具有rsync;scp消耗资源少,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。rsync比scp会快一点,但当小文件多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。

安装java

:包括下面的spark,hadoopscala我都放在/usr/local目录,这是个人习惯问题,你也可以放在其他目录

解压并移动至/us/local目录

tar -zxvf jdk-8u161-linux-x64.tar.gz
mv jdk1.8.0_161 /usr/local

设置环境变量

export JAVA_HOME=/usr/local/jdk1.8.0_161
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

安装hadoop

解压并移动至/us/local目录

tar -zxvf hadoop-3.0.0.tar.gz
mv hadoop-3.0.0 /usr/local

设置环境变量

export HADOOP_HOME=/usr/local/hadoop-3.0.0
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH

安装scala

解压并移动至/us/local目录

tar -zxvf scala-2.11.8.tgz
mv scala-2.11.8 /usr/local

设置环境变量

export SCALA_HOME=/usr/local/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH

安装spark

解压并移动至/us/local目录

tar -zxvf spark-2.3.0-bin-hadoop2.7.tgz
mv spark-2.3.0-bin-hadoop2.7 /usr/local

设置环境变量

export SPARK_HOME=/usr/local/spark-2.3.0-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$PATH

复制所有的环境变量到~/.profile

export JAVA_HOME=/usr/local/jdk1.8.0_161
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export SCALA_HOME=/usr/local/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH
export SPARK_HOME=/usr/local/spark-2.3.0-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$PATH
export HADOOP_HOME=/usr/local/hadoop-3.0.0
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH

然后执行

source ~/.profile

:如果这里不配置的话,在hadoop3.0.0下面会出现以下的错误


虽然里面的JAVA_HOME /usr/local/jdk-8u161-linux-x64这个是因为我设错了,就因为这个我还排查了大半天,结果在这里还用上了,汗.....

报错:pc: ERROR: JAVA_HOME is not set and could not be found.

在hadoop-env.sh中,再显示地重新声明一遍JAVA_HOME,添加:

export JAVA_HOME=/usr/local/jdk1.8.0_161

配置集群服务器参数

我们这里用到的是三台服务器,一台master,两台slave.三台机器的名称和ip如下:

主机名称 ip地址
master 10.141.211.80
slave01 10.141.211.81
slave02 10.141.211.82

三台电脑主机的用户名均为hadoop.
三台机器可以ping双方的ip来测试三台电脑的连通性。
在master节点主机上的Shell中运行如下命令,测试能否连接到slave01节点主机

# -c 后面接的参数代表ping操作执行的次数
ping 10.141.211.81 -c 3

如果出现如下图,说明连接成功


为了更好的在Shell中区分三台主机,修改其显示的主机名,执行如下命令

sudo vim /etc/hostname

master的/etc/hostname添加如下配置:

master

同样slave01的/etc/hostname添加如下配置:

slave01

同样slave02的/etc/hostname添加如下配置:

slave02

:如果已经hostname文件中已经存在名称,则删除原有的名称

重启三台电脑,重启后在终端Shell中才会看到机器名的变化,如下图:



修改三台机器的/etc/hosts文件,添加同样的配置:

sudo vim /etc/hosts

配置如下:

127.0.0.1 localhost master
127.0.1.1 master #相应的改为slave01,或slave02 
10.141.211.80 master
10.141.211.81 slave01
10.141.211.82 slave02

: 127.0.0.1 localhost master这里增加master是为了这里是为了解决sudo: unable to resolve host slave01: Connection refused

配置ssh免密码登陆

先测试一下是否可以通过ssh登录本机

ssh localhsot

如果输入密码之后,登录成功,则代表可行,直接下一步配置免密码即可.否则,需要下载openssh-server

#通过apt下载ssh-verser
sudo apt install openssh-server -y

然后重复上面的验证过程.
接下来配置免密码登录

ssh-keygen -t rsa

输入后,会提示创建.ssh/id_rsa、id_rsa.pub的文件,其中第一个为密钥,第二个为公钥。过程中会要求输入密码,为了ssh访问过程无须密码,可以直接回车 。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

在保证了三台主机电脑都能连接到本地localhost后,还需要让master主机免密码登录slave01和slave02主机。在master执行如下命令,将master的id_rsa.pub传送给两台slave主机。

scp ~/.ssh/id_rsa.pub hadoop@slave01:/home/hadoop/
scp ~/.ssh/id_rsa.pub hadoop@slave02:/home/hadoop/

在slave01,slave02主机上分别运行ls命令

ls ~

可以看到slave01、slave02主机分别接收到id_rsa.pub文件



接着在slave01、slave02主机上将master的公钥加入各自的节点上,在slave01和slave02执行如下命令:

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub

如果master主机和slave01、slave02主机的用户名一样,那么在master主机上直接执行如下测试命令,即可让master主机免密码登录slave01、slave02主机。

ssh slave01

如果master主机和slave01主机的用户名不一样,还需要在master修改~/.ssh/config文件,如果没有此文件,自己创建文件。

Host master
  user Ruanrc
Host slave01
  user hadoop

然后master主机再执行免密码登录:

ssh slave01

Hadoop集群配置

修改master主机修改Hadoop如下配置文件,这些配置文件都位于/usr/local/hadoop-3.0.0/etc/hadoop目录下。

workers(hadoop3.0.0中将slaves文件改为了workers文件)
这里把DataNode的主机名写入该文件,每行一个。这里让master节点主机仅作为NameNode使用。

slave01
slave02

:这里需要删除workers文件中原来的localhost

core-site.xml

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop-3.0.0/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
  <property>
      <name>dfs.replication</name>
      <value>3</value>
  </property>
   <property> 
      <name>dfs.name.dir</name> 
      <value>file:/home/hadoop/hadoop/namenode</value> 
   </property> 
   <property> 
      <name>dfs.data.dir</name>
      <value>file:/home/hadoop/hadoop/datanode</value > 
   </property>

  </configuration>

mapred-site.xml

<configuration>
  <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
  </property>
</configuration>

yarn-site.xml

<configuration>
<!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
</configuration>

:以上修改的文件需要在所有slave服务器上同步,使用前面的scp命令即可

同步配置文件

scp etc/hadoop/workers hadoop@slave01:/usr/local/hadoop-3.0.0/etc/hadoop
scp etc/hadoop/workers  hadoop@slave02:/usr/local/hadoop-3.0.0/etc/hadoop

scp etc/hadoop/core-site.xml hadoop@slave01:/usr/local/hadoop-3.0.0/etc/hadoop
scp etc/hadoop/core-site.xml hadoop@slave02:/usr/local/hadoop-3.0.0/etc/hadoop

scp etc/hadoop/hdfs-site.xml hadoop@slave01:/usr/local/hadoop-3.0.0/etc/hadoop
scp etc/hadoop/hdfs-site.xml hadoop@slave02:/usr/local/hadoop-3.0.0/etc/hadoop

scp etc/hadoop/mapred-site.xml hadoop@slave01:/usr/local/hadoop-3.0.0/etc/hadoop
scp etc/hadoop/mapred-site.xml hadoop@slave02:/usr/local/hadoop-3.0.0/etc/hadoop

scp etc/hadoop/yarn-site.xml hadoop@slave01:/usr/local/hadoop-3.0.0/etc/hadoop
scp etc/hadoop/yarn-site.xml hadoop@slave02:/usr/local/hadoop-3.0.0/etc/hadoop

启动hadoop集群

启动hadoop集群
在master主机上执行如下命令:

cd /usr/local/hadoop-3.0.0
hdfs namenode -format
start-all.sh

运行后,在master,slave01,slave02运行jps命令,查看:

jps

master运行jps后,如下图:



slave01运行jps后,如下图:



slave02运行jps后,如下图:

从上面的截图不难看出,master节点正常启动了namenode,slave01和slave02节点正常启动了datanode

spark集群配置

把spark作为master节点,两个slave01,slave02作为worker节点
在master节点主机上进行如下操作:

  1. 编辑slaves
    将slaves.template copy到slaves
cd $SPARK_HOME/conf
cp slaves.template slaves

slaves文件设置Worker节点。编辑slaves内容,把默认内容localhost替换成如下内容:

slave01
slave02
  1. 编辑spark-env.sh
    将 spark-env.sh.template 拷贝到 spark-env.sh
cp spark-env.sh.template spark-env.sh

编辑spark-env.sh,添加以下内容

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop-3.0.0/bin/hadoop classpath)
export HADOOP_CONF_DIR=/usr/local/hadoop-3.0.0/etc/hadoop
export SPARK_MASTER_IP=10.141.211.80
#参考我的另一篇文章,缺少该配置,会找不到worker节点
export SPARK_MASTER_HOST=10.141.211.80

SPARK_MASTER_IP 指定 Spark 集群 master 节点的 IP 地址;
配置好后,将master主机上的/usr/local/spark文件夹复制到各个节点上。
scp大法好!!!

启动spark集群

启动spark集群前,要先启动Hadoop集群。在master节点主机上运行如下命令:

$HADOOP_HOME/sbin/start-all.sh

启动spark集群

  1. 启动master节点
    在master节点主机上运行如下命令:
$SPARK_HOME/sbin/start-master.sh
  1. 启动所有slave节点
    在master节点主机上运行如下命令:
$SPARK_HOME/sbin/start-slaves.sh

报错:Spark 启动时,提示 JAVA_HOME not set
在sbin目录下的spark-config.sh 中添加对应的jdk 路径

export JAVA_HOME=/usr/local/jdk1.8.0_161

分别slave01、slave02节点上运行jps命令,可以看到多了个Worker进程



输入http://10.141.211.80:7077/即可查看网页端
40)

参考教程

上一篇下一篇

猜你喜欢

热点阅读