先准备三台虚拟机,依次分别命名Hadoop01,Hadoop02,Hadoop03.
IP地址依次为192.168.10.101;192.168.10.102;192.168.10.103;
完全分布式搭建环境准备
1. 总纲
1. 三台机器的防⽕墙必须是关闭的 .2. 确保三台机器的⽹络配置畅通 (NAT 模式,静态 IP ,主机名的配置 )3. 确保 /etc/hosts ⽂件配置了 ip 和 hostname 的映射关系4. 确保配置了三台机器的免密登陆认证(克隆会更加⽅便)5. 确保所有机器时间同步6. jdk和hadoop的环境变量配置
2. 关闭防⽕墙
[root@Hadoop01 ~] # systemctl stop firewalld[root@Hadoop01 ~] # systemctl disable firewalld[root@Hadoop01 ~] # systemctl stop NetworkManager[root@Hadoop01 ~] # systemctl disable NetworkManager# 最好也把 selinux 关闭掉,这是 linux 系统的⼀个安全机制,进⼊⽂件中将SELINUX 设置为 disabled[root@Hadoop01 ~] # vi /etc/selinux/config.........SELINUX = disabled
注意:三台机子都要关闭防火墙
3. 静态IP和主机名配置
--1. 配置静态IP(确保NAT模式)[root@Hadoop01 ~]# vi /etc/sysconfig/networkscripts/ifcfg-ens33............BOOTPROTO=static # 将dhcp改为static............ONBOOT=yes # 将no改为yesIPADDR=192.168.10.101 # 添加IPADDR属性和ip地址PREFIX=24 # 添加NETMASK=255.255.255.0或者PREFIX=24GATEWAY=192.168.10.2 # 添加⽹关GATEWAYDNS1=114.114.114.114 # 添加DNS1和备份DNSDNS2=8.8.8.8--2. 重启⽹络服务[root@Hadoop01 ~]# systemctl restart network或者[root@Hadoop01 ~]# service network restart--3. 修改主机名(如果修改过,请略过这⼀步)[root@localhost ~]# hostnamectl set-hostname Hadoop01或者[root@localhost ~]# vi /etc/hostnameHadoop01
4. 配置/etc/hosts⽂件
[root@Hadoop01~]# vi /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4localhost4.localdomain4::1 localhost localhost.localdomain localhost6localhost6.localdomain6192.168.10.101 Hadoop01#添加本机的静态IP和本机的主机名之间的映射关系192.168.10.102 Hadoop02192.168.10.103 Hadoop03
5. 免密登陆认证
-1. 使⽤rsa加密技术,⽣成公钥和私钥。⼀路回⻋即可[root@Hadoop01~]# cd ~[root@Hadoop01~]# ssh-keygen -t rsa-2. 进⼊~/.ssh⽬录下,使⽤ssh-copy-id命令[root@Hadoop01 ~]# cd ~/.ssh[root@Hadoop01 .ssh]# ssh-copy-id root@Hadoop01-3. 进⾏验证[hadoop@Hadoop01 .ssh]# ssh Hadoop01#下⾯的第⼀次执⾏时输⼊yes后,不提示输⼊密码就对了[hadoop@Hadoop01.ssh]# ssh localhost[hadoop@Hadoop01 .ssh]# ssh 0.0.0.0注意:三台机器提前安装好的情况下,需要同步公钥⽂件。如果使⽤克隆技术。那么使⽤同⼀套密钥对就⽅便多了。
6. 时间同步
6.1要先安装
ntp
服务和
ntpdate
工具:
yum -y install ntp ntpdate
即使是作为服务端的主机,在必要时刻也是需要向公用的ntp
服务器进行时间同步的
(
一般不用
)
。
[root@
Hadoop01
~]# vim /etc/ntp.conf
#授权下述网段上所有的机器允许从
ntp
服务器上查询和同步时间 restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
下述文档直接赋值粘贴,替换原文档
driftfile /var/lib/ntp/drift# 默认情况下 ,NTP 服务器的日志保存在 /var/log/messages. 当然我们也可以自己指定# 自己指定日志目录# 我们要确保他的属性和 SELinux 环境 ( 这两项一般不用改 )# chown ntp:ntp /var/log/ntpd.log# chcon -t ntpd_log_t /var/log/ntpd.loglogfile /var/log/ntpd.logrestrict default nomodify notrap nopeer noquery# 给与本机所有权限restrict 127.0.0.1restrict ::1# 授权下述网段上所有的机器允许从 ntp 服务器上查询和同步时间restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap# 增加下述几个时间服务器列表 , 除了 0.asia.pool.ntp.org 还会有很多时间服务器 . 比如 0.cn.pool.ntp.org 或者time.nist.gov 或者server 0.asia.pool.ntp.org iburstserver 1.asia.pool.ntp.org iburstserver 2.asia.pool.ntp.org iburstserver 3.asia.pool.ntp.org iburst# 这两行内容表示当外部时间不可用时,使用本地时间server 127.127.1.0 iburstfudge 127.127.1.0 stratum 10# 下述四行表示允许上层服务器修改本机时间restrict 0.asia.pool.ntp.org nomodify notrap noqueryrestrict 1.asia.pool.ntp.org nomodify notrap noqueryrestrict 2.asia.pool.ntp.org nomodify notrap noqueryrestrict 3.asia.pool.ntp.org nomodify notrap noqueryincludefile /etc/ntp/crypto/pwkeys /etc/ntp/keysdisable monitor
6.2设置开机自启动服务
(初始化)
使服务端服务ntp
的守护进程
ntpd
生效
[root@
Hadoop01
~]# systemctl enable ntpd
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to
/usr/lib/systemd/system/ntpd.service.
使客户端工具ntpdate
工具生效
(
选做
)
[root@
Hadoop01
~]# systemctl enable ntpdate
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpdate.service to
/usr/lib/systemd/system/ntpdate.service.
检查
[root@
Hadoop01
~]# systemctl is-enabled ntpd
显示: enabled
6.3 启用ntp服务
[root@
Hadoop01
~]# systemctl start ntpd
查看ntpd
进程
[root@
Hadoop01
~]# ps -ef | grep ntpd
ntp 1185 1 0 03:50 ? 00:00:00 /usr/sbin/ntpd -u ntp:ntp -g root 1663 1136 0 04:35 pts/2 00:00:00 grep -- color=auto ntp
进程存在,
说明服务已经正常启动
6.4设置硬件时间
6.4.1
查看
ntp
的情况
[root@
Hadoop01
~]# ntpq -p
6.4.2
执行同步
root@
Hadoop01
~]# hwclock -w
6.4.3
测试
[root@
Hadoop01
conf]# ntpstat
synchronised to NTP server (78.46.102.180) at stratum 3 time correct to within 189 ms polling server every 64 s
出现上述语句,说明本地已经与时间服务器实现了同步
6.5 客户端同步
6.5.1安装工具
[root@Hadoop02~]# yum -y install ntp ntpdate
方法一:
[root@Hadoop02~]# hwclock -w
下述IP地址与Hadoop01一直
[root@Hadoop02~]# echo "server 192.168.10.101" >/etc/ntp.conf
[root@Hadoop02~]# systemctl enable ntpd
[root@Hadoop02~]# systemctl restart ntpd
2
重启服务以使配置生效
,
之后
大概要等10分钟左右,才会同步成功
方法二:
1
进行客户端与服务器端的时间同步
[root@Hadoop02~]# systemctl enable ntpdate
[root@Hadoop02~]# /usr/sbin/ntpdate -u 192.168.10.101
2
让系统时间和硬件时间同步
[root@Hadoop02~]# hwclock -w
3
可以设置定时器
,
定时执行
,
因为
ntpdate
每次执行完就失效了
.
[root@slaHadoop02ve1 ~]# crontab -e
每天和主机同步一次
10 23 * * * (/usr/sbin/ntpdate -u 192.168.10.101 && /sbin/hwclock -w) &> /var/log/ntpdate.log
注:Hadoop03配置与Hadoop02一样
7. 安装Jdk和Hadoop,配置相关环境变量
-1 . 上传和解压两个软件包[root@ Hadoop01 ~] # tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local/[root@ Hadoop01 ~] # tar -zxvf hadoop-2.7.6.tar.gz -C /usr/local/-2 . 进⼊ local ⾥,给两个软件更名[root@ Hadoop01 ~] # cd /usr/local/[root@ Hadoop01 local] # mv 1.8.0_221/ jdk[root@ Hadoop01 local] # mv hadoop-2.7.6/ hadoop-3 . 配置环境变量[hadoop@ Hadoop01 local] # vi /etc/profile..... 省略 ...........#java environmentexport JAVA_HOME = /usr/local/jdkexport PATH = $JAVA_HOME /bin: $JAVA_HOME /jre/bin: $PATH#hadoop environmentexport HADOOP_HOME = /usr/local/hadoopexport PATH = $HADOOP_HOME /bin: $HADOOP_HOME /sbin: $PATH
8.配置Hadoop配置文件
8.1
在完全分布式集群的配置中,需要配置的是
4
个配置⽂件
core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml
8.2配置core-site.xml
[root@ Hadoop01 ~]# cd $HADOOP_HOME/etc/hadoop/[root@ Hadoop01 hadoop]# vi core-site.xml<configuration><!-- hdfs的地址名称: schame,ip,port--><property><name> fs.defaultFS </name><value> hdfs:// Hadoop01 :8020 </value></property><!-- hdfs的基础路径,被其他属性所依赖的⼀个基础路径 --><property><name> hadoop.tmp.dir </name><value> /usr/local/hadoop/tmp </value></property></configuration>
8.3配置
hdfs-site.xml
[root@ Hadoop01 hadoop]# vi hdfs-site.xml<configuration><!-- namenode守护进程管理的元数据⽂件 fsimage 存储的位置 --><property><name> dfs.namenode.name.dir </name><value> file://${hadoop.tmp.dir}/dfs/name </value></property><!-- 确定 DFS 数据节点应该将其块存储在本地⽂件系统的何处 --><property><name> dfs.datanode.data.dir </name><value> file://${hadoop.tmp.dir}/dfs/data </value></property><!-- 块的副本数 --><property><name> dfs.replication </name><value> 3 </value></property><!-- 块的⼤⼩ (128M), 下⾯的单位是字节 --><property><name> dfs.blocksize </name><value> 134217728 </value></property><!-- secondarynamenode守护进程的 http 地址:主机名和端⼝号。--><property><name> dfs.namenode.secondary.http-address </name><value> Hadoop02 :50090 </value></property><!-- namenode守护进程的 http 地址:主机名和端⼝号。--><property><name> dfs.namenode.http-address </name><value> Hadoop01 :50070 </value></property></configuration>
8.4配置mapred-site.xml
[root@ Hadoop01 hadoop]# cp mapred-site.xml.template mapred-site.xml[root@ Hadoop01 hadoop]# vi mapred-site.xml<configuration><!-- 指定 mapreduce 使⽤ yarn 资源管理器 --><property><name> mapreduce.framework.name </name><value> yarn </value></property><!-- 配置作业历史服务器的地址 --><property><name> mapreduce.jobhistory.address </name><value> Hadoop01 :10020 </value></property><!-- 配置作业历史服务器的 http 地址 --><property><name> mapreduce.jobhistory.webapp.address </name><value> Hadoop01 :19888 </value></property></configuration>
8.5配置yarn-site.xml
[root@ Hadoop01 hadoop]# vi yarn-site.xml<configuration><!-- 指定 yarn 的 shuffle 技术 --><property><name> yarn.nodemanager.aux-services </name><value> mapreduce_shuffle </value></property><!-- 指定 resourcemanager 的主机名 --><property><name> yarn.resourcemanager.hostname </name><value> Hadoop01 </value></property><!--下⾯的可选 --><!--指定 shuffle 对应的类 --><property><name> yarn.nodemanager.aux-services.mapreduce_shuffle.class </name><value> org.apache.hadoop.mapred.ShuffleHandler </value></property><!--配置 resourcemanager 的内部通讯地址 --><property><name> yarn.resourcemanager.address </name><value> Hadoop01 :8032 </value></property><!--配置 resourcemanager 的 scheduler 的内部通讯地址 --><property><name> yarn.resourcemanager.scheduler.address </name><value> Hadoop01 :8030 </value></property><!--配置 resoucemanager 的资源调度的内部通讯地址 --><property><name> yarn.resourcemanager.resource-tracker.address </name><value> Hadoop01 :8031 </value></property><!--配置 resourcemanager 的管理员的内部通讯地址 --><property><name> yarn.resourcemanager.admin.address </name><value> Hadoop01 :8033 </value></property><!--配置 resourcemanager 的 web ui 的监控⻚⾯ --><property><name> yarn.resourcemanager.webapp.address </name><value> Hadoop01 :8088 </value></property></configuration>
8.6配置hadoop-env.sh
[root@ Hadoop01 hadoop] # vi hadoop-env.sh.........# The java implementation to use.export JAVA_HOME = /usr/local/jdk.........
8.7配置slaves⽂件
# 此⽂件⽤于指定 datanode 守护进程所在的机器节点主机名[root@ Hadoop01 hadoop] # vi slavesHadoop01Hadoop02Hadoop03
8.8配置yarn-env.sh⽂件
# 此⽂件可以不配置,不过,最好还是修改⼀下 yarn 的 jdk 环境⽐较好[root@ Hadoop01 hadoop] # vi yarn-env.sh.........# some Java parametersexport JAVA_HOME = /usr/local/jdkif [ " $JAVA_HOME " ! = "" ]; then#echo "run java in $JAVA_HOME"JAVA_HOME = $JAVA_HOMEfi.........
9.配置另外两台机器
提示:本⽅法适⽤于多台虚拟机已经提前搭建出来的场景。--1. 同步hadoop到slave节点上[root@Hadoop01~]# cd /usr/local[root@Hadoop01 local]# scp -r ./hadoop Hadoop02:/usr/local/[root@Hadoop01 local]# scp -r ./hadoop Hadoop03:/usr/local/--2. 同步/etc/profile到slave节点上[root@Hadoop01 local]# scp /etc/profile Hadoop02:/etc/[root@Hadoop01 local]# scp /etc/profile Hadoop03:/etc/--3. 如果slave节点上的jdk也没有安装,别忘记同步jdk。--4. 检查是否同步了/etc/hosts⽂件
10.格式化NameNode
10.1
注意事项(针对搭建过伪分布式的)
格式化完成 NameNode 后,会在 core-site.xml 中的配置 hadoop.tmp.dir 的路径下⽣成集群相关的⽂件。如果之前在伪分布式的时候已经格式化完成,并且这个路径已经⽣成了,需要先将这个⽬录⼿动删除掉,然后再格式化集群,否则会导致集群启动失败, NameNode 和 DataNode ⽆法建⽴连接。
10.2在Hadoop01机器上运⾏命令
[root@Hadoop01 ~] # hdfs namenode -format
11.启动集群
1. 启动脚本-- start-dfs.sh : ⽤于启动 hdfs 集群的脚本-- start-yarn.sh : ⽤于启动 yarn 守护进程-- start-all.sh : ⽤于启动 hdfs 和 yarn2. 关闭脚本-- stop-dfs.sh : ⽤于关闭 hdfs 集群的脚本-- stop-yarn.sh : ⽤于关闭 yarn 守护进程-- stop-all.sh : ⽤于关闭 hdfs 和 yarn3. 单个守护进程脚本-- hadoop-daemons.sh : ⽤于单独启动或关闭 hdfs 的某⼀个守护进程的脚本-- hadoop-daemon.sh : ⽤于单独启动或关闭 hdfs 的某⼀个守护进程的脚本reg:hadoop-daemon.sh [start|stop][namenode|datanode|secondarynamenode]-- yarn-daemons.sh : ⽤于单独启动或关闭 hdfs 的某⼀个守护进程的脚本-- yarn-daemon.sh : ⽤于单独启动或关闭 hdfs 的某⼀个守护进程的脚本reg:yarn-daemon.sh [start|stop][resourcemanager|nodemanager]