前言
前面我们已经搭建了 本地模式 和 伪分布式模式
接着上节我们开始搭建一个完全分布式模式
.
再开始搭建之前我们要考虑有几台服务器,每天服务器怎么编排。
准备
将之前编译hadoop
的虚拟机进行克隆(Ubuntu16.04)克隆出三台,分别为 master1
、slave1
和 slave2
。
PS 最好是在配置完 Hadoop
之后再复制,然后再设置 hostname
修改静态 ip
、最后配置免密登录。
HostName | IP | NN | DN | RM | NM | SNN |
---|
master1 | 192.168.8.101 | √ | | √ | | √ |
slave1 | 192.168.8.201 | | √ | | √ | |
slave2 | 192.168.8.202 | | √ | | √ | |
- NN 是
NameNode
- DN 是
DataNode
- RM 是
ResourceManager
- NM 是
NodeManager
- SNN 是
SecondaryNameNode
配置静态 IP
分别在三台机器配置静态 IP
地址
1
| sudo vim /etc/network/interfaces
|
配置 master1
的 IP
1 2 3 4 5 6
| auto ens33 iface ens33 inet static address 192.168.8.101 netmask 255.255.255.0 gateway 192.168.8.1 dns-nameserver 114.114.114.114
|
配置 slave1
的 IP
1 2 3 4 5 6
| auto ens33 iface ens33 inet static address 192.168.8.201 netmask 255.255.255.0 gateway 192.168.8.1 dns-nameserver 114.114.114.114
|
配置 slave2
的 IP
1 2 3 4 5 6
| auto ens33 iface ens33 inet static address 192.168.8.202 netmask 255.255.255.0 gateway 192.168.8.1 dns-nameserver 114.114.114.114
|
重启 network
服务
1
| sudo /etc/init.d/networking restart
|
配置 Host
配置三台主机,主机名到 ip
的映射,首先修改三台虚拟机的 hostname
分别为 master1
、slave1
和 slave2
。
分别为三台虚拟机添加 host 配置
在文件尾部添加
1 2 3
| 192.168.8.101 master1 192.168.8.201 slave1 192.168.8.202 slave2
|
然后重启三台主机。
免密登录
首先分别为三天虚拟机生成 ssh key
生成密钥成功。
1 2 3 4 5 6 7 8 9 10 11 12 13
| SHA256:t4L2a8imf3c3osZdQ2sGQD1HkaskNomfAdwbgoHNF9o bennie@master1 The key's randomart image is: +---[RSA 2048]----+ | +.+.+.. .oo | | . +o= + o o | | ..E+ = o . | | . B o o | | So.* + . | | . .o.. * | | .o..... + . | | .+.o.+ + o | | .+.oo+.o o . | +----[SHA256]-----+
|
分别在三台虚拟机复制公钥到另外两天虚拟机
命令为 ssh-copy-id 主机名
1 2
| ssh-copy-id slave1 ssh-copy-id slave2
|
然后使用 ssh 主机名
测试是否需要输入密码,如果无需密码说明设置成功。
时间同步
首先分别为三台虚拟机设置时区为 Asia/Shanghai
1
| sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
然后安装 ntpdate
服务,并从阿里云时间同步服务器同步系统时间。
1 2 3
| sudo apt-get install ntpdate -y ntpdate ntp1.aliyun.com hwclock --systohc
|
配置 Hadoop
core-site.xml
修改 core-site.xml
文件,添加如下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master1:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/opt/bigdata/hadoop-2.7.7/tmp</value> </property> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> </configuration>
|
hdfs-site.xml
修改 hdfs-site.xml
文件,添加如下配置:
首先创建 name
和 data
目录
1 2
| mkdir ${HADOOP_HOME}/name mkdir ${HADOOP_HOME}/data
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>master1:9001</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/opt/bigdata/hadoop-2.7.7/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/opt/bigdata/hadoop-2.7.7/data</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> <property> <name>dfs.web.ugi</name> <value>supergroup</value> </property> </configuration>
|
mapred-site.xml
修改 mapred-site.xml
文件,添加如下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master1:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master1:19888</value> </property> </configuration>
|
yarn-site.xml
修改 yarn-site.xml
文件,添加如下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <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> <property> <name>yarn.resourcemanager.hostname</name> <value>master1</value> </property> </configuration>
|
群起集群
- 配置
slaves
- 切换目录到:
hadoop
安装目录 /opt/bigdata/hadoop-2.7.7 - 在
${HADOOP_HOME}/etc/hadoop/
目录下的 slaves
文件中添加如下内容 scp
发送 hadooop
目录到 slave1
和 slave2
上
编写同步脚本 xsync
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| pcount=$# if((pcount==0)); then echo no args; exit; elif((pcount>2)); then echo error args; exit; fi
user=`whoami`
p1=$1 if [ $p1 = "file" ]; then file=$2 fname=`basename $file` echo fname=$fname pdir=`cd -P $(dirname $file); pwd` echo pdir=$pdir
for slave in $slaves do rsync -rvl $pdir/$fname $user@$slave$host:$pdir done elif [ $p1 = "cmd" ]; then cmd=$2 for slave in $slaves do echo "$slave execute cmd $cmd" ssh $user@$slave$host $cmd done else echo error cmd; fi
|
将 xsync
脚本文件复制到 ${HDAOOP_HOME}/bin
目录下,并赋予执行权限
1 2
| cp xsync ${HDAOOP_HOME}/bin/ sudo chmod +x ${HDAOOP_HOME}/bin/xsync
|
scp
命令发送 hadoop
到 slave1
和 slave2
如果没有请先创建 bigdata
目录,并修改目录所属用户,组
1 2
| scp -r ${HADOOP_HOME} slave1:/opt/bigdata scp -r ${HADOOP_HOME} slave2:/opt/bigdata
|
添加环境变量 slaves
,多个用空格隔开
1
| export slaves="master1 slave1 slave2"
|
启动 Hadoop
同步所有节点的配置文件
1
| xsync file ${HDAOOP_HOME}/etc/hadoop/slaves
|
分别到三台虚拟机格式化 namenode
1
| xsync cmd "hdfs namenode -format"
|
启动 hdfs
1
| ${HADOOP_HOME}/sbin/start-dfs.sh
|
输出日志
1 2 3 4 5 6
| Starting namenodes on [master1] master1: starting namenode, logging to /opt/bigdata/hadoop-2.7.7/logs/hadoop-bennie-namenode-master1.out slave2: starting datanode, logging to /opt/bigdata/hadoop-2.7.7/logs/hadoop-bennie-datanode-slave2.out slave1: starting datanode, logging to /opt/bigdata/hadoop-2.7.7/logs/hadoop-bennie-datanode-slave1.out Starting secondary namenodes [master1] master1: starting secondarynamenode, logging to /opt/bigdata/hadoop-2.7.7/logs/hadoop-bennie-secondarynamenode-master1.out
|
jps
查看 java
进程
jps
查看 java
进程
1 2 3 4
| bennie@master1:/opt/bigdata/hadoop-2.7.7$ jps 62481 Jps 62372 SecondaryNameNode 62164 NameNode
|
1 2 3
| bennie@slave1:/opt$ jps 3667 Jps 3593 DataNode
|
1 2 3
| bennie@slave1:/opt$ jps 3667 Jps 3593 DataNode
|
启动 yarn
1
| ${HADOOP_HOME}/sbin/start-yarn.sh
|
输出日志
1 2 3 4
| starting yarn daemons starting resourcemanager, logging to /opt/bigdata/hadoop-2.7.7/logs/yarn-bennie-resourcemanager-master1.out slave2: starting nodemanager, logging to /opt/bigdata/hadoop-2.7.7/logs/yarn-bennie-nodemanager-slave2.out slave1: starting nodemanager, logging to /opt/bigdata/hadoop-2.7.7/logs/yarn-bennie-nodemanager-slave1.out
|
jps
查看 java
进程
1 2 3 4 5
| bennie@master1:/opt/bigdata/hadoop-2.7.7$ jps 62372 SecondaryNameNode 62164 NameNode 62534 ResourceManager 62794 Jps
|
1 2 3 4
| bennie@slave1:/opt$ jps 3729 NodeManager 3593 DataNode 3850 Jps
|
1 2 3
| 3382 NodeManager 3503 Jps 3247 DataNode
|