文章目录
搭建HDFS完全分布式
删除java rpm -qa | grep java | xargs sudo rpm -e --nodeps
1.创建hadoop101节点(主节点)
1.1 基本信息配置
-
安装Linux系统(选用CentOS6.10)
-
安装完成后关闭防火墙
service iptables status service iptables stop chkconfig iptables off
-
设置静态IP
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
UUID=75281382-9be7-4a87-a7fb-d070073754e7
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
HWADDR=00:0C:29:F0:8F:04
IPADDR=192.168.106.101
PREFIX=24
GATEWAY=192.168.31.2
DNS1=192.168.31.2 -
修改主机名
vim /etc/sysconfig/network
选择HOSTNAME那一行进行修改
-
配置主机名和IP地址的映射
因为后续要和集群内的机器通信,所有要配置一下集群中的IP地址和机器名
vim /etc/hosts
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2cwKeSTz-1599973646500)(C:\Users\zxj\AppData\Roaming\Typora\typora-user-images\image-20200822113921176.png)]
-
创建用户hadoop
useradd hadoop passwd
-
配置用户为sudoers
vim /etc/sudoers # 在root ALL=(ALL) ALL下添加 hadoop ALL=(ALL) NOPASSWD:ALL # 然后保存完强制退出
-
在/opt目录下创建两个文件加module和software,并赋予hadoop所有权限(用来存放软件和解压软件)
mkdir /opt/module /opt/software chown hadoop:hadoop /opt/module /opt/softwar
1.2 安装JDK
- 删除现有的Java软件
rpm -qa | grep java | xargs sudo rpm -e --nodeps
- 利用文件传输工具,将JDK导入到/opt/software文件夹下
- 解压JDK到/opt/module目录下
tar -zxvf /opt/software/j* -C /opt/module
- 获取JDK路径
[hadoop@hadoop101 jdk1.8.0_144]$ pwd
/opt/module/jdk1.8.0_144
- 将JDK添加到环境变量,打开/etc/profile文件
sudo vim /etc/profile
- 在profile文件末尾添加JDK路径
# JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
- 使文件生效
source /etc/profile
- 查看是否安装成功
[hadoop@hadoop101 jdk1.8.0_144]$ java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
1.3 安装hadoop
- 利用文件传输工具,将hadoop导入到/opt/software文件夹下
- 解压hadoop到/opt/module目录下
tar -zxvf /opt/software/h* -C /opt/module
- 将hadoop添加到环境变量,打开/etc/profile文件
- 在profile文件末尾添加hadoop路径
# HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 使文件生效
source /etc/profile
- 查看是否安装成功
hadoop version
2. 创建子节点
克隆hadoop1节点创建两台新节点
2.1 克隆
克隆出来的机器分别命名为hadoop102和hadoop103
2.2 配置网络信息
因为克隆hdoop1后,虚拟网卡没有变更,无法连接外网,所以要重新配置网络信息
-
得到当前网卡的MAC地址
ifconfig -a
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nbOhujCf-1599973646504)(D:\25.Typroa\Typora\files\ifconfig-a.png)]
-
将改ifcfg-eth0文件进行备份
cp /etc/sysconfig/network-scripts/ifcfg-eth0 ifcfg-eth1
-
修改IP地址和MAC地址
MAC地址为第一步得到的地址
vim /etc/sysconfig/network-scripts/ifcfg-eth0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xq4rLp1c-1599973646507)(C:\Users\zxj\AppData\Roaming\Typora\typora-user-images\image-20200822115835996.png)]
-
设置网卡信息
vim /etc/udev/rules.d/70-persistent-net.rules
注释掉第一个网卡驱动eth0,将第二个网卡驱动eth1改为eth0,然后保存退出
2.3 修改主机名
vim /etc/sysconfig/network
3.拷贝文件
由于目前只有三台机器,所以直接用scp命令即可,但是如果是很多台主机的话这样拷贝是不现实的。
所以我们用脚本来实现拷贝
3.1 脚本
我们使用rsync远程同步工具进行拷贝
rsync具有速度快、避免复制相同内容和支持符号链接的优点。
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=102; host<104; host++)); do
echo ------------------- hadoop$host --------------
rsync -av $pdir/$fname $user@hadoop$host:$pdir
done
-
为了能够在任何地方使用该脚本,我们将其存放在/home/hadoop/bin这个目录下
chmod +x xsync sudo cp xsync /bin
-
把hadoop101机器上的/opt/module目录同步到hadoop102和hadoop103服务器上的hadoop用户下的/opt/module目录下
xsync /opt/software/
4.集群配置
我们先在hadoop101上进行文件的配置,然后将配置好的文件通过脚本分发到集群中的各个机器
4.1 集群规划
hadoop101 | hadoop102 | hadoop103 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
4.2 配置集群
主要的核心文件
core-size.xml hdfs-size.xml 将(mapred-xml.template)重命名为mapred-site.xml yarn-site.xml
hadoop-env.sh mapred-env.sh yarn-env.sh
4.2.1 配置.sh文件
在所有以上文件以sh结尾的都配置上JAVA_HOME的目录
export JAVA_HOME=/opt/module/jdk1.8.0_144
4.2.2 配置xml文件
- 配置core-size.xml
在该文件中编写如下配置:
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
- 配置hdfs-site.xml
在该文件中编写如下配置:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:50090</value>
</property>
- 配置mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 配置yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
</property>
4.2.3 配置日志聚集功能和历史服务器
日志聚集功能在yarn-site.xml中配置
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
历史服务器在mapred-site.xml中进行配置
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value>
</property>
配置完之后利用脚本分发到其他节点
[hadoop@hadoop101 hadoop-2.7.2]$ xsync etc/
同时要在windows的C:\Windows\System32\drivers\etc下配置hosts文件
将所有集群的名称和ip地址做映射
5.启动集群
第一次启动的话要先格式化NameNode
如果需要再次格式化,要先将子节点中hadoop目录下的data和logs文件夹删除
[hadoop@hadoop101 hadoop-2.7.2]$ hadoop namenode -format
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T0n7FeVz-1599973646511)(C:\Users\zxj\AppData\Roaming\Typora\typora-user-images\image-20200822141543551.png)]
这样就表示格式化成功。
在hadoop101上启动NameNode
[hadoop@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
在hadoop101,hadoop102,hadoop103上分别启动datanode
[hadoop@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
单节点启动就完成了
6. SSH无密码登入配置
生成私钥和公钥
[hadoop@hadoop101 ~]$ ssh-keygen -t rsa
[hadoop@hadoop101 .ssh]$ ssh-copy-id hadoop101
然后打开.ssh文件查看
cd ~/.ssh
将.ssh文件分发至各个集群
同时为了集群能同时起来,要在hadoop文件配置中配置slaves,将集群中的机器都添加进slaves文件中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wC06i4f7-1599973646513)(D:\25.Typroa\Typora\files\配置slaves.png)]
‘
7. 启动集群
[hadoop@hadoop101 hadoop]$ start-dfs.sh
[hadoop@hadoop101 hadoop-2.7.2]$ jps
2116 NameNode
2505 Jps
2253 DataNode
[hadoop@hadoop102 hadoop-2.7.2]$ jps
2045 DataNode
2127 Jps
[hadoop@hadoop103 hadoop-2.7.2]$ jps
2116 DataNode
2186 SecondaryNameNode
2298 Jps
集群就启动成功了
我们可以在Web网址中输入 192.168.106.101:50070 查看节点信息
接下来启动yarn,yarn服务要在安装***ResourceManager***的机子上启动
[hadoop@hadoop102 hadoop-2.7.2]$ start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-hadoop-resourcemanager-hadoop102.out
hadoop103: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-hadoop-nodemanager-hadoop103.out
hadoop101: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-hadoop-nodemanager-hadoop101.out
hadoop102: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-hadoop-nodemanager-hadoop102.out
至此我们的集群就启动完成了,我们查看一下和之前规划的是不是一样的
[hadoop@hadoop101 hadoop-2.7.2]$ jps
2833 NodeManager
2116 NameNode
2253 DataNode
2958 Jps
[hadoop@hadoop102 hadoop-2.7.2]$ jps
3059 Jps
2633 ResourceManager
2747 NodeManager
2045 DataNode
[hadoop@hadoop103 hadoop]$ jps
2593 NodeManager
2116 DataNode
2186 SecondaryNameNode
2718 Jps
7.1 群起集群的命令
各个服务组件逐一启动/停止
hadoop-daemon.sh start/stop namenode/datanode/secondarynamenode
启动停止Yarn
yarn-daemon.sh start/stop resourcemanager/nodemanager
集体启动/停止
start-dfs.sh stop-dfs.sh
start-yarn.sh stop-yarn.sh 在配置ResourceManager的服务器上执行该命令
启动完NameNode和ResourceManager之后才能启动历史服务器
mr-hobhistory-daemon.sh start historyserver
8. 集群时间同步
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步
- 检查是否安装NTP
rpm -qa | ntp
# 没有安装输入命令 yum -install ntp
- 查看ntpd是否运行中,
service ntpd status
# 若是在运行中
service ntpd stop
chkconfig ntpd off
chkconfig --list ntpd
- 修改ntp配置文件
vim /etc/ntp.conf
取消restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap的注释
注释如下内容:
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
-
添加当前节点
server 127.127.1.0
fudge 127.127.1.0 stratum 10
-
修改/etc/sysconfig/ntpd文件
添加一行 SYNC_HWCLOCK=yes 让硬件时间与系统时间进行同步
-
重启ntpd服务,并设置开机启动
service ntpd start chkconfig ntpd on
-
其他机器配置:
-
配置1分钟与时间服务同步一次
craton -e # 内容如下: */1 * * * * /usr/sbin/ntpdate hadoop101
-
修改任意机器时间进行测试
date -s "2011-1-1 11:11:11"
-
1分钟后查看
-
9. 测试
- 在hadoop101上启动dfs
[hadoop@hadoop101 hadoop-2.7.2]$ start-dfs.sh
- 在hadoop102上启动yarn
[hadoop@hadoop102 hadoop-2.7.2]$ start-yarn.sh
- 在hadoop103上启动历史服务器
[hadoop@hadoop101 hadoop-2.7.2]$ mr-jobhistory start historyserver
-
打开浏览器,输入192.168.106.101:50070查看集群
-
在hadoop101上上传文件到HDFS
[hadoop@hadoop101 hadoop-2.7.2]$ hadoop fs -put README.txt /
- 进行mapreduce
[hadoop@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /README.txt /output1
- 打开浏览器,输入192.168.106.102:80800查看mp运行情况,任务运行完成点击History进行查看
- 以上操作都没出现异常,则集群搭建成功
新增机器
在主节点上增加新机器的映射,然后配置好java和hadoop直接启动DataNode即可关联到集群