目录
1. 完全分布式模式介绍
完全分布式,指的是在真实环境下,使⽤多台机器,共同配合,来构建⼀个完整的分布式 ⽂件系统。在真实环境中, hdfs 中的相关守护进程也会分布在不同的机器中,⽐如:-1. namenode 守护进程尽可能的单独部署在⼀台硬件性能相对来说⽐较好的机器中。-2. 其他的每台机器上都会部署⼀个 datanode 守护进程,⼀般的硬件环境即可。-3. secondarynamenode 守护进程最好不要和 namenode 在同⼀台机器上。
2. 平台软件说明
平台&软件 | 说明 |
---|---|
操作系统 | Windows7 或 Windows 10 或 Mac OS |
虚拟软件 | VMWare 或 Parallels Desktop(Mac Only) |
虚拟机 | 主机名: hadoop01,IP地址: 192.168.10.101
主机名:
hadoop
02,
IP
地址
:
192.168.10.102
主机名:
hadoop
03,
IP
地址
:
192.168.10.103
|
SSH⼯具 | MobaXterm(Windows) 或 FinalShell(Mac) |
软件包上传路径 | /root/softwares |
软件安装路径 | /usr/local |
JDK | jdk-8u221-linux-x64.tar.gz |
Hadoop | hadoop-2.7.6.tar.gz |
⽤户 | root |
注意,注意,注意:1. 如果你是从伪分布式过来的,最好先把伪分布式的相关守护进程关闭: stop-all.sh2. 删除原来伪分布式的相关设置如果原来使⽤的是默认路径 , 现在已经没有⽤了如果原来使⽤的跟现在全分布式路径⼀样 , 因为这⾥跟之前的初始化的内容不⼀样 , ⽽且这个⽂件要让系统⾃动⽣成综上 : 要删除掉 namenode 和 datanode 的⽬录
3. 守护进程布局
hadoop01 : namenode,datanode,ResourceManager,nodemanagerhadoop02 : datanode,nodemanager,secondarynamenodehadoop03 : datanode,nodemanager
4. 完全分布式搭建环境准备
4.1. 总纲
-1. 三台机器的防⽕墙必须是关闭的 .-2. 确保三台机器的⽹络配置畅通 (NAT 模式,静态 IP ,主机名的配置 )-3. 确保 /etc/hosts ⽂件配置了 ip 和 hostname 的映射关系-4. 确保配置了三台机器的免密登陆认证(克隆会更加⽅便)-5. 确保所有机器时间同步-6. jdk 和 hadoop 的环境变量配置
4.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.........
情况说明: 如果安装好三台机器,三台机器的防⽕墙都需要单独关闭和设置开 机不启动。如果准备使⽤克隆⽅式,只关闭hadoop01 机器即可。下⾯的配置也 是如此。
4.3. 静态IP和主机名配置
--1. 配置静态 IP (确保 NAT 模式)[root@hadoop01 ~] # vi /etc/sysconfig/network-scripts/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.4. 配置/etc/hosts⽂件
[root@hadoop01~] # vi /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4:: 1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.10.101 hadoop01 #添加本机的静态IP 和本机的主机名之间的映 射关系192.168.10.102 hadoop02192.168.10.103 hadoop03
4.5. 免密登陆认证
-1 . 分别3台机器 使⽤ rsa 加密技术,⽣成公钥和私钥。⼀路回⻋即可[root@hadoop01 ~] # cd ~[root@hadoop01 ~] # ssh-keygen -t rsa[root@hadoop02 ~] # cd ~[root@hadoop02 ~] # ssh-keygen -t rsa[root@hadoop03 ~] # cd ~[root@hadoop03 ~] # ssh-keygen -t rsa
-2.将公钥写入认证文件这一步是将自己的公钥写入认证文件
[root@hadoop01 ~]# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
-3.连接其他2台机器,将他们的密钥也写入认证文件
[root@hadoop01 ~]# ssh root@hadoop02 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
[root@hadoop01 ~]# ssh root@hadoop03 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_key
查看认证文件的内容
[root@hadoop01 ~]# cat ~/.ssh/authorized_keys
发现里面有 hadoop01 hadoop02 hadoop03 的密钥
将认证文件复制到其他主机 注:这里是由于第一次连接还要输入密码。scp命令常用于传输文件。
[root@hadoop01 ~]# scp ~/.ssh/authorized_keys root@hadoop02:~/.ssh/authorized_keys
[root@hadoop01 ~]# scp ~/.ssh/authorized_keys root@hadoop03:~/.ssh/authorized_keys
免密登录测试
[root@hadoop01 ~]# ssh hadoop01
[root@hadoop01 ~]# ssh hadoop02
[root@hadoop01 ~]# ssh hadoop03
推出命令 exit
后面不用输入密码切换就成功了
4.6. 时间同步
4.6.1. 同步⽹络的时间
# 同步时间,需要使⽤ ntpdate 命令,如果没有可以使⽤ yum安装。yum install ntpdate# 使⽤ ntpdate 同步⽹络上的时间服务器的时间,例如 : time.windows.com、 ntp.aliyun.com[root@hadoop01 ~] # ntpdate -u ntp.aliyun.com定时同步# 可以将时间同步做成⼀个定时任务,每隔⼀段时间就同步⼀下⽹络的时间[root@hadoop01 ~] # crontab -e* * * * * /usr/sbin/ntpdate -u ntp.aliyun.com #输入然后保存退出
4.6.2. ⾃定义时间服务器
可以不用设置的
如果集群没有联⽹,那么可以⾃⼰搭建⼀个时间服务器,让集群中的所有机器都同步局域⽹内的时间服务器。
# 1 选择集群中的某⼀台机器作为时间服务器,例如 hadoop01# 2 保证这台服务器安装了 ntp.x86_64 。# 3 保证 ntpd 服务运⾏ ......[root@hadoop01 ~] # sudo service ntpd start# 开机⾃启动 :[root@hadoop01 ~] # chkconfig ntpd on# 4 配置相应⽂件:[root@hadoop01 ~] # vi /etc/ntp.conf# Hosts on local network are less restricted.# restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap# 添加集群中的⽹络段位restrict 192 .168.10.0 mask 255 .255.255.0 nomodify notrap# Use public servers from the pool.ntp.org project.# Please consider joining the pool(http://www.pool.ntp.org/join.html).# 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 -master 作为服务器# 5 其他机器要保证安装 ntpdate.x86_64# 6 其他机器要使⽤ root 定义定时器*/1 * * * * /usr/sbin/ntpdate -u hadoop01
4.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-4 . 生效文件[hadoop@hadoop01 local] # source /etc/profile
5. Hadoop的配置⽂件
core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml
5.1完全分布式配置
[root@hadoop01 ~]# cd /usr/local/hadoop/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>
[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> hadoop 01:50070 </value></property></configuration>
[root@hadoop01 hadoop]# cp mapred-site.xml.template mapred-site.xml[root@hadooop01 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> hadoop 01:19888 </value></property></configuration>
[root@hadooop01 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>
[root@hadoop01hadoop] # vi hadoop-env.sh.........# The java implementation to use.export JAVA_HOME = /usr/local/jdk.........
# 此⽂件⽤于指定 datanode 守护进程所在的机器节点主机名[root@hadoop01 hadoop] # vi slaveshadoop01hadoop02hadoop03
# 此⽂件可以不配置,不过,最好还是修改⼀下 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.........
6. 另外两台机器配置说明
提示:本⽅法适⽤于多台虚拟机已经提前搭建出来的场景。
--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 。[root@hadoop01 local] # scp -r ./jdk hadoop02:/usr/local/[root@hadoop01 local] # scp -r ./jdk hadoop03:/usr/local/--4 . 检查是否同步了 /etc/hosts ⽂件--5 . 其他机器配置文件生效下[root@hadoop02 ~] # source /etc/profile[root@hadoop03 ~] # source /etc/profile
7. 格式化NameNode
[root@hadoop01 ~] # hdfs namenode -format
8. 启动集群
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]
[root@hadoop01 ~] # start-all.sh
hadoop01 : namenode,datanode,ResourceManager,nodemanagerhadoop02 : datanode,nodemanager,secondarynamenodehadoop03 : datanode,nodemanager
http://192.168.10.101:50070
http://192.168.10.101:8088
页面出来就集群搭建好了