1 本地模式搭建
1.1 本地模式介绍
- 特点:
本地模式,即运⾏在单台机器上,没有分布式思想,使用的是本地⽂件系统。
- ⽤途:
本地模式主要⽤于对MapReduce程序的逻辑进⾏调试,确保程序的正确。由于在本地模式下测试和调试MapReduce程序较为方便,因此,这种模式适宜用在开发阶段。
1.2 平台软件说明
平台&软件 | 说明 |
操作系统 | Windows7 或 Windows 10 或 Mac OS |
虚拟软件 | VMWare 或 Parallels Desktop(Mac Only) |
虚拟机 | 主机名: oak-ubuntu,IP地址: 192.168.10.128 |
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.3 环境搭建
1.3.1 JDK的安装
1. 检查是否已经安装过或是否有内置的JDK,如果有,将其卸载
# 卸载之前的原因,主要是需要保证安装的JDK版本的正确性。
[root@oak-ubuntu ~]# rpm -qa | grep jdk #如果有,请卸载
[root@oak-ubuntu ~]# rpm -e xxxxxxxx --nodeps #将查询到的内置jdk强制卸载
2. 上传jdk1.8到指定路径
使⽤MobaXterm或者FinalShell直接上传即可,上传到 /root/softwares 下
3. 解压jdk到/usr/local/下
[root@oak-ubuntu ~]# cd /root/softwares
[root@oak-ubuntu ~]# tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local
4. 更名操作
# 更改名字,是为了后续时候的时候⽅便,不⽤再写后⾯的版本号
[root@oak-ubuntu ~]# cd /usr/local
[root@oak-ubuntu local]# mv jdk1.8.0_221/ jdk-1.8.0
5. 配置环境变量
[root@oak-ubuntu local]# vim /etc/profile
...上述内容省略,在末尾添加即可...
# Java Environment
export JAVA_HOME=/usr/local/jdk-1.8.0
export PATH=$PATH:$JAVA_HOME/bin
6. 重新引导,使得环境变量⽣效
[root@oak-ubuntu local]# source /etc/profile
7. 验证,验证自己的Java环境是否搭建完成
[root@oak-ubuntu local]# java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
[root@oak-ubuntu local]# javac
...
1.3.2 Hadoop的安装
1. 上传Hadoop到Linux
使⽤MobaXterm或者FinalShell上传到 /root/softwares 下即可
2. 解压
[root@oak-ubuntu ~]# cd /root/softwares
[root@oak-ubuntu ~]# tar -zxvf hadoop-2.7.6.tar.gz -C /usr/local
3. 配置Hadoop的环境变量
[root@oak-ubuntu ~]# vim /etc/profile
...上述内容省略,在最下⽅添加即可...
# Hadoop Environment
export HADOOP_HOME=/usr/local/hadoop-2.7.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
4.重新引导,使得环境变量⽣效
[root@oak-ubuntu local]# source /etc/profile
5.验证是否配置成功
[root@oak-ubuntu local]# hadoop version
Hadoop 2.7.6
Subversion https://shv@git-wip-us.apache.org/repos/asf/hadoop.git -r 085099c66cf28be31604560c376fa282e69282b8
Compiled by kshvachk on 2018-04-18T01:33Z
Compiled with protoc 2.5.0
From source with checksum 71e2695531cb3360ab74598755d036
This command was run using /usr/local/hadoop2.7/share/hadoop/common/hadoop-common-2.7.6.jar
1.3.3 Hadoop目录说明
[root@oak-ubuntu hadoop2.7]# ll
total 116
drwxr-xr-x. 2 20415 101 194 Apr 18 2018 bin
drwxr-xr-x. 3 20415 101 20 Apr 18 2018 etc
drwxr-xr-x. 2 20415 101 106 Apr 18 2018 include
drwxr-xr-x. 3 20415 101 20 Apr 18 2018 lib
drwxr-xr-x. 2 20415 101 239 Apr 18 2018 libexec
-rw-r--r--. 1 20415 101 86424 Apr 18 2018 LICENSE.txt
drwxr-xr-x. 3 root root 4096 Jul 30 08:39 logs
-rw-r--r--. 1 20415 101 14978 Apr 18 2018 NOTICE.txt
-rw-r--r--. 1 20415 101 1366 Apr 18 2018 README.txt
drwxr-xr-x. 2 20415 101 4096 Apr 18 2018 sbin
drwxr-xr-x. 3 20415 101 20 Jun 29 17:18 share
drwxr-xr-x 4 root root 37 Jul 23 20:56 tmp
- bin => hadoop的⼆进制执⾏命令⽂件存储⽬录
- sbin => hadoop的执⾏脚本存储⽬录
- etc => hadoop的配置⽂件存储⽬录
- lib/libexec => hadoop的资源库存储⽬录
- share => hadoop的共享资源、开发⼯具和案例存储⽬录
- include => hadoop的⼯具脚本存储⽬录
2 伪分布式集群搭建
2.1. 伪分布式模式介绍
1.特点
- 在⼀台机器上安装,使⽤的是分布式思想,即分布式⽂件系统,⾮本地⽂件系 统。
- Hdfs涉及到的相关守护进程(namenode,datanode,secondarynamenode) 都运⾏在⼀台机器上,都是独⽴的java进程。
2. ⽤途
⽐Standalone mode 多了代码调试功能,允许检查内存使⽤情况,HDFS输⼊输出,以及其他的守护进程交互。
2.2. 平台软件说明
平台&软件 | 说明 |
操作系统 | Windows7 或 Windows 10 或 Mac OS |
虚拟软件 | VMWare 或 Parallels Desktop(Mac Only) |
虚拟机 | 主机名: oak-ubuntu,IP地址: 192.168.10.128 |
SSH⼯具 | MobaXterm(Windows) 或 FinalShell(Mac) |
软件包上传路径 | /root/softwares |
软件安装路径 | /usr/local |
JDK | jdk-8u221-linux-x64.tar.gz |
Hadoop | hadoop-2.7.6.tar.gz |
⽤户 | root |
2.3 伪分布式搭建环境准备
1. 总纲
1. 确保防⽕墙是关闭状态。
2. 确保NAT模式和静态IP的确定 (192.168.10.101)
3. 确保/etc/hosts⽂件⾥, ip和hostname的映射关系
4. 确保免密登陆localhost有效
5. jdk和hadoop的环境变量配置
2. 防⽕墙关闭确认
[root@oak-ubuntu ~]# systemctl stop firewalld
[root@oak-ubuntu ~]# systemctl disable firewalld.service
[root@oak-ubuntu ~]# systemctl stop NetworkManager
[root@oak-ubuntu ~]# systemctl disable NetworkManager
#最好也把selinux关闭掉,这是linux系统的⼀个安全机制,进⼊⽂件中将SELINUX设置为disabled
[root@oak-ubuntu ~]# vi /etc/selinux/config
.........
SELINUX=disabled
.........
3. 配置/etc/hosts⽂件
-- 进⼊hosts⽂件,配置⼀下ip和hostname
[root@oak-ubuntu ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4
localhost4.localdomain4
::1 localhost localhost.localdomain localhost6
localhost6.localdomain6
192.168.10.128 oak-ubuntu <====添加本机的静态IP和本机的主机名之间的映射关系
4. 确保ssh对localhost的免密登陆认证有效
# 1. 使⽤rsa加密技术,⽣成公钥和私钥。⼀路回⻋即可
[root@oak-ubuntu ~]# ssh-keygen -t rsa
# 2. 进⼊~/.ssh⽬录下,使⽤ssh-copy-id命令
[root@oak-ubuntu .ssh]# ssh-copy-id root@localhost
# 3. 进⾏验证,去掉第⼀次的询问(yes/no)
[hadoop@oak-ubuntu .ssh]# ssh localhost
5. 安装Jdk和Hadoop,配置相关环境变量
-1. 上传和解压两个软件包
[root@oak-ubuntu ~]# tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local/
[root@oak-ubuntu ~]# tar -zxvf hadoop-2.7.6.tar.gz -C /usr/local/
-2. 进⼊local⾥,给两个软件更名
[root@oak-ubuntu ~]# cd /usr/local/
[root@oak-ubuntu local]# mv 1.8.0_221/ jdk
[root@oak-ubuntu local]# mv hadoop-2.7.6/ hadoop
-3. 配置环境变量
[hadoop@oak-ubuntu local]# vi /etc/profile
.....省略...........
#java environment
export JAVA_HOME=/usr/local/jdk-1.8.0
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
#hadoop environment
export HADOOP_HOME=/usr/local/hadoop-2.7.6
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
2.4 伪分布式相关⽂件配置
1. core-site.xml的配置
[root@oak-ubuntu ~]# cd $HADOOP_HOME/etc/hadoop
[root@oak-ubuntu hadoop]# vi core-site.xml
<configuration>
<!-- 配置分布式⽂件系统的schema和ip以及port,默认8020-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:8020/</value>
</property>
</configuration>
扩展: hadoop1.x的默认端⼝是9000,hadoop2.x的默认端⼝是8020,使⽤哪⼀个都可以
2. hdfs-site.xml的配置
[root@oak-ubuntu hadoop]# vi hdfs-site.xml
<configuration>
<!-- 配置副本数,注意,伪分布模式只能是1。-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
3. hadoop-env.sh的配置:指定jdk的环境
[root@oak-ubuntu hadoop]# vi hadoop-env.sh
................
# The java implementation to use.
export JAVA_HOME=/usr/local/jdk-1.8.0
..................
2.5 格式化NameNode
1. 格式化命令
#只需要第一次搭建hdfs的时候执行,以后不能执行。如果执行会将所有数据的数据清除
[root@oak-ubuntu hadoop]# hdfs namenode -format
2.6 启动HDFS
1. 启动伪分布式
[root@oak-ubuntu hadoop]# start-dfs.sh
2. 启动滚动信息
3. jps命令查看守护进程
从上图可以看到,启动脚本会开启分布式⽂件系统上的相关进程:
namenode
datanode
secondarynamenode
2.7 WebUI查看
可以在浏览器上输⼊:192.168.10.101:50070 来查看⼀下伪分布式集群的信息
--1. 浏览⼀下⻚⾯上提示的ClusterID,BlockPoolID
--2. 查看⼀下活跃节点(Live Nodes)的个数,应该是1个
Compiled:编译 hadoop是由kshvachk⼯具集成的
Cluster ID:集群id
Block Pool ID:datanode节点的block池的id,每个datanode节点的都要⼀样
2.8 程序案例演示:wordcount程序
1. 准备要统计的两个⽂件,存储到/root/data/下
--1. 创建data⽬录
[root@oak-ubuntu hadoop]# mkdir ~/data
--2. 将以下两个⽂件上传到data⽬录下
- poetry1.txt
- poetry2.txt
2. 在hdfs上创建存储⽬录
[root@oak-ubuntu hadoop]# hdfs dfs -mkdir /input
3. 将本地⽂件系统上的上传到hdfs上,并在web上查看⼀下
[root@oak-ubuntu hadoop]$ hdfs dfs -put ~/data/poetry* /input/
4. 运⾏⾃带的单词统计程序wordcount
[root@oak-ubuntu hadoop]# cd $HADOOP_HOME
[root@oak-ubuntu hadoop]# hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /input /out
5. 查看webui
6. 查看part-r-00000⽂件
[root@oak-ubuntu hadoop]# hdfs dfs -cat /out/part-r-00000
3 完全分布式集群搭建
3.1. 完全分布式模式介绍
完全分布式,指的是在真实环境下,使⽤多台机器,共同配合,来构建⼀个完整的分布式
⽂件系统。
在真实环境中,hdfs中的相关守护进程也会分布在不同的机器中,⽐如:
-1. namenode守护进程尽可能的单独部署在⼀台硬件性能相对来说⽐较好的机器中。
-2. 其他的每台机器上都会部署⼀个datanode守护进程,⼀般的硬件环境即可。
-3. secondarynamenode守护进程最好不要和namenode在同⼀台机器上。
3.2. 平台软件说明
平台&软件 | 说明 |
操作系统 | Windows7 或 Windows 10 或 Mac OS |
虚拟软件 | VMWare 或 Parallels Desktop(Mac Only) |
虚拟机 | 主机名: hadoop01,IP地址: 192.168.10.101 主机名: hadoop02,IP地址: 192.168.10.102 主机名: hadoop03,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 |
注意:
实际⽣产环境中,不会使⽤root⽤户来搭建和管理hdfs,⽽是使⽤普通⽤户。这⾥为了⽅便学习,我们才使⽤的root⽤户。
ps:
1.如果你是从伪分布式过来的,最好先把伪分布式的相关守护进程关闭:stop-all.sh
2.删除原来伪分布式的相关设置
如果原来使⽤的是默认路径,现在已经没有⽤了
如果原来使⽤的跟现在全分布式路径⼀样,因为这⾥跟之前的初始化的内容不⼀样,⽽且
这个⽂件要让系统⾃动⽣成
综上:要删除掉namenode和datanode的⽬录
3.3. 守护进程布局
部署hdfs完全分布式的同时搭建⼀下yarn。hdfs和yarn的相关守护进程的布局如下:
hadoop01: namenode,datanode,ResourceManager,nodemanager
hadoop02: datanode,nodemanager,secondarynamenode
hadoop03: datanode,nodemanager
3.4 完全分布式搭建环境准备
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
.........
情况说明: 如果安装好三台机器,三台机器的防⽕墙都需要单独关闭和设置开机不启动。如果准备使⽤克隆⽅式,只关闭hadoop01机器即可。下⾯的配置也是如此。
3. 静态IP和主机名配置
--1. 配置静态IP(确保NAT模式)
[root@hadoop01 ~]# vi /etc/sysconfig/networkscripts/ifcfg-ens33
............
BOOTPROTO=static # 将dhcp改为static
............
ONBOOT=yes # 将no改为yes
IPADDR=192.168.10.101 # 添加IPADDR属性和ip地址
PREFIX=24 # 添加
NETMASK=255.255.255.0或者PREFIX=24
GATEWAY=192.168.10.2 # 添加⽹关GATEWAY
DNS1=114.114.114.114 # 添加DNS1和备份DNS
DNS2=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/hostname
hadoop01
4. 配置/etc/hosts⽂件
[root@hadoop01 ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4
localhost4.localdomain4
::1 localhost localhost.localdomain localhost6
localhost6.localdomain6
192.168.10.101 hadoop01 #添加本机的静态IP和本机的主机名之间的映射关系
192.168.10.102 hadoop02
192.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. 时间同步
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 environment
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
#hadoop environment
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
3.5 Hadoop的配置⽂件
1. 在完全分布式集群的配置中,需要配置的是4个配置⽂件
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
2. 这⼏个配置⽂件有默认的配置,命名为default
core-default.xml
hdfs-default.xml
mapred-default.xml
yarn-default.xml
3. 我们可以将默认的配置⽂件找出来,看看默认的配置
[root@hadoop01 share]# cd /usr/local/hadoop/share
[root@hadoop01 share]# find -name "*-default.xml" -exec cp {} ~/defaultXml \;
4. 属性的优先级
代码中配置的属性 > *-site.xml > *-default.xml
3.6 完全分布式配置
1. 配置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>
2. 配置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>
3. 配置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>
4. 配置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.auxservices.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.resourcetracker.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>
5. 配置hadoop-env.sh
[root@hadoop01 hadoop]# vi hadoop-env.sh
.........
# The java implementation to use.
export JAVA_HOME=/usr/local/jdk-1.8.0
.........
6. 配置slaves⽂件
# 此⽂件⽤于指定datanode守护进程所在的机器节点主机名
[root@hadoop01 hadoop]# vi slaves
hadoop01
hadoop02
hadoop03
7. 配置yarn-env.sh⽂件
# 此⽂件可以不配置,不过,最好还是修改⼀下yarn的jdk环境⽐较好
[root@hadoop01 hadoop]# vi yarn-env.sh
.........
# some Java parameters
export JAVA_HOME=/usr/local/jdk-1.8.0
if [ "$JAVA_HOME" != "" ]; then
#echo "run java in $JAVA_HOME"
JAVA_HOME=$JAVA_HOME
fi
.........
3.7 另外两台机器配置说明
两种⽅式可选择配置另外几台机器的hadoop:
⽅式⼀: “scp”进⾏同步
提示:本⽅法适⽤于多台虚拟机已经提前搭建出来的场景。
--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⽂件
⽅式⼆: 克隆hadoop01虚拟机
提示:本⽅法适⽤于还没有安装slave虚拟机的场景。通过克隆hadoop01节点的⽅
式,来克隆⼀个hadoop02和hadoop03机器节点,这种⽅式就不⽤重复安装环境
和配置⽂件了,效率⾮常⾼,节省了⼤部分时间(免密认证的秘钥对都是相同的⼀套)。
--1. 打开⼀个新克隆出来的虚拟机,修改主机名
[root@hadoop01 ~]# hostnamectl set-hostname hadoop02
--2. 修改ip地址
[root@hadoop01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
.........省略.........
IPADDR=192.168.10.102 <==修改为hadoop02对应的ip地
址
.........省略........
--3. 重启⽹络服务
[root@hadoop01 ~]# systemctl restart network
--4. 其他新克隆的虚拟机重复以上1~3步
--5. 免密登陆的验证
从hadoop01机器上,连接其他的每⼀个节点,验证免密是否好使,同时去掉第
⼀次的询问步骤
--6. 建议:每台机器在重启⽹络服务后,最好reboot⼀下。
3.8 格式化NameNode
1. 注意事项
格式化完成NameNode后,会在core-site.xml中的配置hadoop.tmp.dir的路 径下⽣成集群相关的⽂件。如果之前在伪分布式的时候已经格式化完成,并且这个路 径已经⽣成了,需要先将这个⽬录⼿动删除掉,然后再格式化集群,否则会导致集群 启动失败,NameNode和DataNode⽆法建⽴连接。
2. 在hadoop01机器上运⾏命令
[root@hadoop01 ~]# hdfs namenode -format
3. 格式化的相关信息解读
--1. ⽣成⼀个集群唯⼀标识符:clusterid
--2. ⽣成⼀个块池唯⼀标识符:blockPoolId
--3. ⽣成namenode进程管理内容(fsimage)的存储路径:
默认配置⽂件属性hadoop.tmp.dir指定的路径下⽣成dfs/name⽬录
--4. ⽣成镜像⽂件fsimage,记录分布式⽂件系统根路径的元数据
--5. 其他信息都可以查看⼀下,⽐如块的副本数,集群的fsOwner等。
3.9 启动集群
1. 启动脚本和关闭脚本介绍
1. 启动脚本
-- start-dfs.sh :⽤于启动hdfs集群的脚本
-- start-yarn.sh :⽤于启动yarn守护进程
-- start-all.sh :⽤于启动hdfs和yarn
2. 关闭脚本
-- stop-dfs.sh :⽤于关闭hdfs集群的脚本
-- stop-yarn.sh :⽤于关闭yarn守护进程
-- stop-all.sh :⽤于关闭hdfs和yarn
3. 单个守护进程脚本
-- 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]
2. 启动hdfs
1. 使⽤start-dfs.sh,启动 hdfs
2. 启动过程解析
- 启动集群中的各个机器节点上的分布式⽂件系统的守护进程
⼀个namenode和resourcemanager以及secondarynamenode
多个datanode和nodemanager
- 在namenode守护进程管理内容的⽬录下⽣成edit⽇志⽂件
- 在每个datanode所在节点下⽣成${hadoop.tmp.dir}/dfs/data⽬录,
3. jps查看进程
--1. 在hadoop01上运⾏jps指令,会有如下进程
namenode
datanode
--2. 在hadoop02上运⾏jps指令,会有如下进程
secondarynamenode
datanode
--3. 在hadoop03上运⾏jps指令,会有如下进程
datanode
注意:
如果哪台机器的相关守护进程没有开启,那么,就查看哪台机器上的守护进程对应的⽇志log⽂件,注意,启动脚本运⾏时提醒的⽇志后缀是*.out,⽽我们 查看的是*.log⽂件。此⽂件的位置:${HADOOP_HOME}/logs/⾥。
4. WebUI查看
3. 启动yarn
1. 使⽤start-yarn.sh脚本
2. jps查看
--1. 在hadoop01上运⾏jps指令,会多出有如下进程
resoucemanager
nodemanager
--2. 在hadoop02上运⾏jps指令,会多出有如下进程
nodemanager
--3. 在hadoop03上运⾏jps指令,会多出有如下进程
nodemanager
3. webui查看
3.10 集群守护进程不能开启的情况
1. 格式化集群时,报错原因
- 当前⽤户使⽤不当
- /etc/hosts⾥的映射关系填写错误
- 免密登录认证异常
- jdk环境变量配置错误
- 防⽕墙没有关闭
2. namenode进程没有启动的原因:
- 当前⽤户使⽤不当
- 重新格式化时,忘记删除${hadoop.tmp.dir}⽬录下的内容
- ⽹络震荡,造成edit⽇志⽂件的事务ID序号不连续
3. datanode出现问题的原因
- /etc/hosts⾥的映射关系填写错误
- 免密登录异常
- 重新格式化时,忘记删除${hadoop.tmp.dir}⽬录下的内容,造成
datanode的唯⼀标识符不在新集群中。
4. 上述问题暴⼒解决办法:重新格式化
如果想重新格式化,那么需要先删除每台机器上的${hadoop.tmp.dir}指定路
径下的所有内容,然后再格式化:最好也把logs⽬录下的内容也清空,因为⽇志内容已
经是前⼀个废弃集群的⽇志信息了,留着也⽆⽤。