目录
Hadoop2.8 单机模式安装
1 Hadoop安装模式概述
2 软件准备
3 Hadoop2.8单机模式安装过程
Task 1 安装JDK
Task 2 安装Hadoop
4 安装总结
资源参考
Hadoop2.8 伪分布模式安装
1 Hadoop2.8伪分布模式安装过程
Task 1 节点准备
Task 2 HDFS安装配置
Task 3 YARN安装配置
2 安装总结
3 附录
Hadoop2.8 完全分布式安装
1 安装概述
2 节点规划
3 节点准备
Step 1 准备虚拟机
Step 2 配置SSH免密
Step 3 准备JDK
4 Hadoop集群安装
Step 1 在单节点上安装配置Hadoop
Step 2 分发Hadoop
Step 3 格式化namenode
Step 4 验证Hadoop
5 附录
5.1 其他参考
5.2 FAQ
关闭集群:[root@vm01-openEuler package]# shutdown -h now
首先复制生成四台机器1个namenode,2个DataNode(完全分布式),1个kerberos kdc
注意在完成第一台节点的安装后进行复制,而不是环境搭建完在复制。
由于剩余三台机器都是由第一台复制出来的,所以主机名、密码以及IP地址都是相同的,在这里我们逐个修改。
登录进去后:vi /etc/hostname
修改四个节点的主机名,为了后续方便,在这里我将vm01、vm02、vm03更改为hadoop01、hadoop02、hadoop03。
修改网关:
cd /etc/sysconfig/network-scripts/
vi ifcfg-enp0s3
这里我将hadoop01网关设置为192.168.56.210;hadoop02:192.168.56.220;hadoop03:192.168.56.230;kerberos:192.168.56.240
然后对四台机器进行重启:reboot
结果展示如下:
hadoop01:
hadoop02:
hadoop03:
kerberos:
Hadoop2.8 单机模式安装
1 Hadoop安装模式概述
Hadoop的三种安装模式:
1.单机模式【本地模式Local (Standalone) Mode】
单机模式是Hadoop的默认模式
Hadoop所有组件(NameNode,DataNode...)都运行在同一个Java进程中
采用比较保守的最小配置,配置文件也通常为空
Hadoop完全运行在本地,不需要与其他节点交互(因此,单机模式不需要配置SSH免密码登陆)
单机模式不会使用HDFS,也不会加载任何Hadoop的守护进程
该模式主要用于开发调试MapReduce程序的应用逻辑
2.伪分布式模式【Pseudo-Distributed Mode,英 ['sjuːdəʊ]美 ['suːdoʊ]】
伪分布模式是在一台机器上模拟一个完整功能的微型集群
各个组件都拥有一个单独的Java虚拟机,它们之间通过网络套接字通讯
从伪分布模式开始(也就是包括完全分布式模式在内),需要配置SSH免密码登陆
Hadoop在伪分布模式下的操作和完全分布式相同,因此可用于学习和开发的目的
3.完全分布式模式【Fully-Distributed Mode】
Hadoop的正常安装方式
Hadoop分布在多台主机上,建立Hadoop集群
2 软件准备
操作系统:
virtual Box+openEuler20.03LTS
JDK 1.8
JDK1.8(1.7以上,64位,linux版本) 下载链接:Java Downloads | Oracle
Hadoop 2.8.5 下载链接:Apache Download Mirrors
SSH工具
MobaXterm
3 Hadoop2.8单机模式安装过程
Task 1 安装JDK
操作系统:
virtual Box+openEuler20.03LTS
JDK 1.8
JDK1.8(1.7以上,64位,linux版本) 下载链接:Java Downloads | Oracle
Hadoop 2.8.5 下载链接:Apache Download Mirrors
SSH工具
MobaXterm
Task 1 安装JDK
Step 1 使用ssh工具连接到虚拟机
虚拟机ip:192.168.56.200
Step 2 上传JDK到用户home目录
将下载好的linux版本的jdk通过MobaXterm工具拖放到用户home目录下的package,新建package文件夹,此处root的home目录是/root,即root/package:
Step 3 解压jdk
tar zxvf jdk-8u241-linux-x64.tar.gz
解压完成:
Step 4 将JDK移到安装位置
mv jdk1.8.0_241/ /usr/local/
移到完成:
Step 5 配置环境变量
vi /etc/profile
在文件结尾处添加:
export JAVA_HOME=/usr/local/jdk1.8.0_241 export PATH=$JAVA_HOME/bin:$PATH
运行结果:
保存退出。
Step 6 使配置生效,并验证jdk
source /etc/profile java -version
运行结果:
Task 2 安装Hadoop
Step 1 上传hadoop安装包至/root/package目录
通过MobaXterm工具将下载的hadoop安装包拖放至用户/root/package目录:
Step 2 解压hadoop安装包
tar zxvf hadoop-2.8.5.tar.gz
运行结果:
Step 3 将hadoop移到安装位置
mv hadoop-2.8.5 /opt
运行结果:
注意:
Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的
/usr:系统级的目录,可以理解为C:/Windows/,/usr/lib理解为C:/Windows/System32。
/usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。
/opt:用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。
源码放哪里?
/usr/src:系统级的源码目录。
/usr/local/src:用户级的源码目录。
Step 4 设置hadoop环境变量
vi /etc/profile
将Hadoop可执行文件添加到PATH变量中(可执行文件分别位于bin和sbin下),在profile文件结尾添加如下内容:
export HADOOP_HOME=/opt/hadoop-2.8.5 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
运行结果:
保存退出。
Step 5 使环境变量生效
source /etc/profile
Step 6 设置Hadoop使用的JDK
hadoop配置文件通常位于hadoop安装目录的etc/hadoop下面:
编辑hadoop-env.sh文件:
vi /opt/hadoop-2.8.5/etc/hadoop/hadoop-env.sh
修改JAVA_HOME一行:
将其替换为实际的java安装位置:
JAVA_HOME=/usr/local/jdk1.8.0_241
修改后文件:
保存退出。
Note:
这里要设置成实际使用的JDK位置,而不是系统环境变量中的JAVA_HOME,以免系统中有多个JDK存在时,Hadoop用错JDK
如果你忘记了Java的安装位置可以通过如下命令查看
echo $JAVA_HOME
或者:
which javac
Step 7 验证Hadoop安装
1)使用hadoop可以查看帮助:
2)查看Hadoop版本
hadoop version
运行结果:
3)单词统计测试
$ mkdir input $ cp /opt/hadoop-2.8.5/etc/hadoop/*.xml input hadoop jar /opt/hadoop-2.8.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount input output
运行过程:
$ cat output/*
单词统计结果:
Note:
如果出现如下警告:
WARN io.ReadaheadPool: Failed readahead on ifile EBADF: Bad file descriptor
表示在预读取文件时出现文件关闭错误,不用理会。
测试完成后切换到root目录,进行删除input和output文件夹
[root@hadoop01 ~]# rm -rf input/
[root@hadoop01 ~]# rm -rf output/
4 安装总结
本地模式只有一个Java进程(使用jps查看时看不到hadoop进程)
本地模式只是为了调试,不会使用hdfs,因此不需要格式化namenode节点,不要使用start-all start-dfs等启动,启动后也没有hdfs相关节点。
本地模式不需要配置免密登陆
本地模式不用理会防火墙
资源参考
单点模式安装:Apache Hadoop 2.10.1 – Hadoop: Setting up a Single Node Cluster.
Hadoop2.8 伪分布模式安装
1 Hadoop2.8伪分布模式安装过程
在前面完成hadoop单点模式安装的基础上进行下面的安装过程。
Task 1 节点准备
Step 1 关闭防火墙
执行如下命令关闭防火墙:
systemctl stop firewalld systemctl disable firewalld
Step 2 配置ssh免密
如果输入如下命令:
ssh localhost
出现类似下面询问密码的情形,那么我们需要配置免密登陆ssh。
1)生成公钥和私钥
ssh-keygen -t rsa
一路回车即可:
生成的公钥和私钥文件保存在当前用户home目录的.ssh目录下:
其中id_rsa为私钥,id_rsa.pub为公钥。
2)将公钥添加到ssh授信列表文件中
运行如下命令:
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
新创建的authorized_keys文件和下面类似:
3)验证ssh免密配置是否成功:
再次执行如下命令:
ssh localhost
执行效果如下,已经不再需要输入密码。
Note:
如果不配置ssh免密,或者免密配置不成功,则在启动hadoop时,启动进程会停下来要求你输入密码,如果不输入密码或者不正确则无法正常启动相应组件。
Task 2 HDFS安装配置
Step 1 配置HDFS
hadoop配置文件位于hadoop安装目录的etc/hadoop下:
1)配置core-site.xml文件:
使用vi编辑core-site.xml文件:
vi /opt/hadoop-2.8.5/etc/hadoop/core-site.xml
在文件中的添加如下内容:
fs.defaultFS hdfs://localhost:9000 hadoop.tmp.dir /opt/hadoop-2.8.5/tmp
修改后的文件如下:
Note:
configuration标签已存在,只需要添加property标签中的内容,此处使用的端口号是9000
9000端口用于客户端与集群NameNode节点进行rpc通讯,以前默认使用8020端口,现在8020端口被独立出来仅用于DataNode与NameNode的心跳通讯,具体的hadoop常用端口可以参考附录部分。
注意,一定要配置hadoop的tmp目录,不要使用默认配置,hadoop官方安装文档使用默认配置,会在每次重新启动服务器时,tmp目录会被linux自动删除,这样将导致hadoop文件系统丢失,这样你又需要重新格式化hdfs,而以前的hdfs保存的文件也将丢失。
2)配置hdfs-site.xml文件
用vi编辑hdfs-site.xml文件:
vi /opt/hadoop-2.8.5/etc/hadoop/hdfs-site.xml
添加如下内容:
dfs.replication 1
最终文件如下:
Note:
configuration标签已存在,只需要添加property标签中的内容
对于伪分布模式,复制因子是1,切记!
Step 2 格式化HDFS系统
运行如下命令:
hdfs namenode -format
出现如下信息,表示hdfs格式化成功:
注意:根据前面core-site.xml文件中的配置,hdfs系统位于/opt/hadoop安装目录/tmp目录下。
Step 3 启动HDFS
通过以下命令启动NameNode和DataNode进程:
start-dfs.sh
运行结果:
Note:
Hadoop进程启动日志默认位于Hadoop安装目录的logs文件夹下
start-dfs.sh启动脚本在hadoop安装目录的sbin目录下。
通过jps可以查看hadoop启动后的java进程,如果包含SecondaryNameNode、DataNode和NameNode3个进程表示启动成功,其中SecondaryNameNode又叫检查节点。如果进程没有完全启动,请查看hadoop启动日志。
Step 4 验证hdfs系统
1)可以通过浏览器访问NameNode的web界面:
http://192.168.56.210:50070
Note:
在Hadoop3.x中NameNode的web界面端口改为9870
注意,此处ip为虚拟机上安装hadoop伪分布机器的ip。如果该页面无法访问,需要注意防火墙关闭步骤是否漏掉,执行如下命令重新关闭防火墙:
关闭防火墙 systemctl stop firewalld 开机禁用防火墙 systemctl disable firewalld
关闭防火墙执行效果:
2)验证MapReduce功能
1.在hdfs上创建文件夹:
hdfs dfs -mkdir /user hdfs dfs -mkdir /user/root
执行效果:
2.上传统计文件到hdfs
hdfs dfs -put /opt/hadoop-2.8.5/etc/hadoop/ input
执行效果:
Note:
默认情况下hdfs dfs -put命令会使用hdfs文件系统下的【/user/当前用户名】作为当前目录,因此如果使用相对路径要事先建立[/user/当前用户名]文件夹,否则在使用相对路径时会提示路径没有建立。
3.执行单词统计
hadoop jar /opt/hadoop-2.8.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount input output
执行效果:
4.查看统计结果:
[root@hadoop01 ~]# hdfs dfs -get output output [root@hadoop01 ~]# cat output/*
输出结果:
Note:
如果当前目录下存在output目录,需要事先删除。
测试完成后删除目录及结果:
[root@hadoop01 ~]# hdfs dfs -rm -r /user
[root@hadoop01 ~]# rm -rf output/
5.如需停止hdfs可以使用脚本:stop-dfs.sh
Task 3 YARN安装配置
前面在验证hadoop安装时所运行的mapreduce任务是基于本地运行,没有YARN参与,通常情况下,我们需要在YARN调度下运行MapReduce,此时我们需要额外配置ResourceManager和NodeManager进程。
YARN在伪分布模式的安装过程如下:
Step 1 配置YARN
1)配置mapred-site.xml文件
1.复制出mapred-site.xml文件
cp /opt/hadoop-2.8.5/etc/hadoop/mapred-site.xml.template /opt/hadoop-2.8.5/etc/hadoop/mapred-site.xml
2.使用vi添加如下内容:
vi /opt/hadoop-2.8.5/etc/hadoop/mapred-site.xml
注意仅添加property标签部分:
mapreduce.framework.name yarn
最终文件和如下类似:
2)配置yarn-site.xml文件
使用vi编辑yarn-site.xml文件:
vi /opt/hadoop-2.8.5/etc/hadoop/yarn-site.xml
添加如下内容:
yarn.nodemanager.aux-services mapreduce_shuffle
同样仅添加property标签中的内容,最终文件和下面类似:
Step 2 启动YARN
使用如下命令启动ResourceManager和NodeManager进程:
start-yarn.sh
启动完成:
注意,启动日志位于/opt/hadoop安装目录/logs下面。
Step 3 验证YARN
1)使用jps命令查看启动进程:
会出现ResourceManager和NodeManager进程。
2)访问ResoureManager的web界面:
http://192.168.56.210:8088
网页显示如下:
此时一个完整的hadoop伪分布式模式已经安装完成,你可以像前面一样运行wordcount程序,此时将使用YARN作为mapreduce 作业调度框架。
如需关闭hadoop集群执行如下脚本:
stop-dfs.sh stop-yarn.sh
2 安装总结
伪分布模式需要配置ssh免密
伪分布模式使用java进程模拟各个组件
伪分布模式将使用hdfs系统
伪分布模式可以配置YRAN执行MapReduce作业,如不配置默认使用本地模式执行MapReduce作业。
NameNode的web界面端口是50070
ResourceManager的web界面端口是8088
3 附录
伪分布模式需要配置ssh免密
伪分布模式使用java进程模拟各个组件
伪分布模式将使用hdfs系统
伪分布模式可以配置YRAN执行MapReduce作业,如不配置默认使用本地模式执行MapReduce作业。
NameNode的web界面端口是50070
ResourceManager的web界面端口是8088
1)单点模式安装:Apache Hadoop 2.10.1 – Hadoop: Setting up a Single Node Cluster.
2)Hadoop2.x常见web端口:
Note:
要访问MapReduce JobHistory Server,需要先用如下命令启动该服务:
mr-jobhistory-daemon.sh start historyserver
然后访问:
http://192.168.56.210:19888
默认情况下,start-dfs.sh、start-yarn.sh脚本,甚至使用start-all.sh脚本都不会启动该服务。
此时可以是jps命令检查启动情况:
3)Hadoop2.x常见端口
Hadoop、Hive、Hbase常用端口大全_zp17834994071的博客-CSDN博客_hbase 端口
3)Hadoop各版本下载链接:
Index of /dist/hadoop/common
Hadoop2.8 完全分布式安装
1 安装概述
此安装过程在伪分布安装的基础上继续安装,如果没有进行伪分布式安装,需要参考伪分布安装过程进行适当调整。
2 节点规划
| IP | 主机名 | 功能 |
|---|---|---|
| 192.168.56.210 | hadoop01 | NameNode/ResourceManager |
| 192.168.56.220 | hadoop02 | DataNode/NodeManager |
| 192.168.56.230 | hadoop03 | DataNode/NodeManager |
Note:
上面的规划为了节约虚拟机资源,但是,在实际的生产环境中,NameNode和ResourceManager,他们都是主节点,通常都各自安装在集群中独立的机器上。其他服务,比如Web App Proxy Server、MapReduce Job History Server则根据负载情况,选择运行在专属硬件上,或者和其他硬件共享。其他机器作为从节点,扮演DataNode和NodeManager角色(DataNode和NodeManager放在一起)。
3 节点准备
Step 1 准备虚拟机
1)准备3台虚拟机
3台虚拟机设置好固定IP地址,如果已经按伪分布方式安装了hadoop,则需要另外再准备2台虚拟机,并将这2台虚拟机设置好固定ip地址。3台虚拟机可以互相ping通。
2)修改主机名
在第一台机器(192.168.56.210)上执行如下命令
vi /etc/hostname
修改成如下图:
3)修改hosts文件
在第一台机器上运行如下命令:
vi /etc/hosts
按dd删除原有内容,然后添加如下内容:
192.168.56.210 hadoop01 192.168.56.220 hadoop02 192.168.56.230 hadoop03
编辑后的内容如下:
4)关闭防火墙
各个节点的防火墙都应关闭,运行如下命令:
systemctl stop firewalld systemctl disable firewalld
Note:
各个节点的防火墙都需关闭,如果不关闭,或者存在有节点忘记关闭的情况,会造成:
1 hadoop相关的web界面无法访问
2 在使用hdfs发生文件复制操作时比如 hdfs -put会提示有节点被排除在外,主要原因就是namenode和datanode间存在防火墙,彼此无法联系到对方。
修改其他节点
在第2~3台虚拟机上执行第2~4步完成各节点的主机名、hosts文件的修改以及关闭防火墙操作。
5)重启使配置生效
reboot
重启完成后,登陆到系统,从shell提示符中,确认主机名是否修改:
Step 2 配置SSH免密
为了各节点间不必输入密码登录各服务器,需要配置3台服务器互信,也就是ssh的免密钥登录。
1)在hadoop01节点上执行ssh-keygen -t rsa,连续回车生成/root/.ssh/id_rsa.pub文件:
[root@hadoop01 ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:So79o8ZpwJChdAdSS1VyxD6jgfnVLcN33GY5NaT7aTo root@hadoop01 The key's randomart image is: +---[RSA 2048]----+ | ..+oo++ .. | | .+...o. ...| |...++ . o . ... +| |. oo . = = o o.* | | o. = S + ..o .| | oB . . .| | .o+. + | | =.. Eo | | o.... .. | +----[SHA256]-----+
Note:
中间过程不需要任何输入,一直回车即可,如果以前生成过密钥,选择y覆盖。
生成的公钥和私钥:
id_rsa为私钥,id_rsa_pub为公钥
同样通过ssh登陆到hadoop02及hadoop03完成密钥生成操作,操作完成后,注意检查两个密钥文件是否存在。
2)收集各节点公钥生成授信列表文件(authorized_keys)
分别在hadoop01~03上运行如下命令:
cat /root/.ssh/id_rsa.pub
分别将cat命令显示的内容拷贝到一个临时的记事本当中,以下是搜集起来的3条公钥:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDi/HaA9aXUgYcqD/N4oVSlp+Wmex44b/k4V23PXOU6wbnptq6FXvoz86Bp3+wQ3aafxpCYP2NZ2IxeyDNK2DyDFvpXYeSteRydazB2+ICHAmMwXzv5a2MFEAiEqOTuUJ4gbOd3st9M53VVE0Ukz9I+4JCYalFsxxxzfWAUGYLbMqiHjPulY2Iy7ib3JvpkEv/5DpPtcnxgaiAty2LDdMe7lcd8aAfCaMpVDUxB/YCptQBKCJtEmTJfBPVIVjnO4T9bUmzC96GjQBqolPI9TAT/a5bQ8fjlZ57UDlHWbuiOFeJ8ZWpNkn564z8dyfFWduSyy8IkDe3D14MOQB4j5Zlp root@hadoop01
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRVkwoSx6bo+O2Isotcs5boZ6AfKMsU48pqD5I7rqPGX7UAWPMz0ovzM1YKZiwdwUyMyx+XqFtjNPzM6s9b8bQCxr9FtwFoozviCWu2wIDx4TIMhxTMRrKMGkmku7ONj2W6R2QfvGZVDHgNIE7NeSkHt8tvY7z51pf6XyKt3+LHZjiStvee1KX4fbh8jTH9pZrY0KYWMlizFgkMj5BvFM/8wD5XBusJLxb0BiEdKFeXhF+isTEzO9uuLdHMzfsQgPgptPGdlrFxNF3kx61DJT6m1WnEcvz44JaaqJfxv49c3vaPSQItGcWz2S2SAZVf1YJe5laAUAZadfyoehWgXob root@hadoop02
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBax05OyEh/Q/eh986jna4kveHSQuqE6J4O4kwYt93ywF2/nR1r4tc9/PTNzg3nyV8E8GuYduAycG6GK/q0ZBAOFL/Te+2jF8uUK4k0FMw6TyRf1ldlQdoDz6R4Nq/bUMkgUNiTGthvCeglbHi4ctrXMQM6u5TbgfmfMbQGQCZaWULR7ufyJ68VPL+VBqAjtBkDZlnLS6l5lWAFGxuNlEv+ZzHaGqHoMZiTmpeFrYbZNHITl0FwsBBaXMHq61yEBFMRlZP3MdeJuzWhho2XR6XAMY1eiWJXP2qSYd66D/gEwDfNCvmB0wSkOYyNRpI6URBt91N2zKdmYPhbIAonwvl root@hadoop03
上面的文件就是3台机器的公钥内容。需要把这些内容放到每台机器的authorized_keys文件中(默认和密钥对在同一个文件夹中,如不存在,需要自己建立)。
首先在hadoop01节点上通过如下命令建立受信列表文件:
[root@hadoop01 ~]# vi /root/.ssh/authorized_keys
将前面收集的内容拷贝到vi编辑器中,并保存退出:
Note:
如果authorized_keys以前有内容可以直接删除,查看3台机器的公钥无遗漏
3)将authorized_keys分发到其他节点
在hadoop01上执行如下命令,将authorized_keys文件远程拷贝到hadoop02和hadoop03节点:
scp /root/.ssh/authorized_keys root@hadoop02:/root/.ssh/authorized_keys scp /root/.ssh/authorized_keys root@hadoop03:/root/.ssh/authorized_keys
Note:
以上命令分两次执行,中间需要输入yes,并输入ssh访问密码。
4)验证免密设置
在每个节点上运行ssh命令,确保各个节点间不需要输入密码,第一次访问其他主机可能需要输入yes,运行结果与下图类似:
在这里遇到如下问题:
注意查看密钥文件有没有问题,如果没有问题则看看/etc/hosts 下的ip地址和主机名,这里我的密钥文件没问题,将hosts文件修改为如下:
使用远程拷贝命令传到hadoop02、hadoop03节点
[root@hadoop01 ~]# scp /etc/hosts root@hadoop02:/etc/hosts
[root@hadoop01 ~]# scp /etc/hosts root@hadoop03:/etc/hosts
Step 3 准备JDK
如果已经在hadoop01上完成了伪分布式安装,则此时已经装有jdk,只需要将jdk和环境变量分发到集群中的其他节点,如果没有在hadoop01上完成伪分布式安装,此处需要安装伪分布安装文档中关于jdk安装部分,安装及配置jdk。
此文档假设你已经在hadoop01上完成了伪分布式安装,下面的操作仅进行jdk机器配置的分发:
1)分发jdk
在hadoopnode1上执行如下命令:
scp -r /usr/local/jdk1.8.0_241/ root@hadoop02:/usr/local/ scp -r /usr/local/jdk1.8.0_241/ root@hadoop03:/usr/local/
Note:
scp -r参数表示递归拷贝,拷贝过程中不应再输入密码。
2)分发环境变量配置
在hadoop01上执行如下命令:
scp /etc/profile root@hadoop02:/etc/ scp /etc/profile root@hadoop03:/etc/
拷贝完成后,无需执行source命令,配置在下次ssh登陆时自动生效。
3)检查jdk是否可用
分别通过ssh命令登陆到hadoop02及hadoop03节点,运行java -version命令检查java版本:
4 Hadoop集群安装
Step 1 在单节点上安装配置Hadoop
1)在hadoop01上安装hadoop
本文档假设你已经在hadoop01上完成伪分布式安装,如果没有完成该步骤你需要将Hadoop安装包上传到hadoop01节点,并将其解压,移到到/opt目录下,具体操作参考伪分布式安装文档。
2)配置hadoop所使用的JDK
如果你已完成伪分布式安装,此步骤可以省略,否则需要编辑hadoop-env.sh文件正确设置jdk安装位置。
3)编辑core-site.xml文件
如果已完成伪分布安装,需要修改该配置文件,将配置中的localhost换成实际的namenode节点主机名:
vi /opt/hadoop-2.8.5/etc/hadoop/core-site.xml
配置如下:
fs.defaultFS hdfs://hadoop01:9000 hadoop.tmp.dir /opt/hadoop-2.8.5/tmp
最终文件内容和如下类似:
Note:
只需要将localhost修改成hadoop01其他设置不变
4)编辑hdfs-site.xml文件
使用vi编辑hdfs-site.xml文件,将复制因子修改为2(因为只规划了2个DataNode):
vi /opt/hadoop-2.8.5/etc/hadoop/hdfs-site.xml
修改后内容如下:
dfs.replication 2
修改结果:
5)编辑yarn-site.xml文件
vi /opt/hadoop-2.8.5/etc/hadoop/yarn-site.xml
添加resourcemanager主机名,最终内容和下面类似:
yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname hadoop01
修改后的结果:
6)编辑mapred-site文件
mapred-site文件和伪分布一样,无需做出修改,如果没有按伪分布安装,则需要拷贝出此文件,添加如下配置:
mapreduce.framework.name yarn
7)编辑slaves文件
此处和伪分布安装不同,需要在slaves中删除localhost,并添加实际的DataNode节点。
使用vi编辑slaves文件:
vi /opt/hadoop-2.8.5/etc/hadoop/slaves
删除原有的localhost,修改成如下内容:
hadoop02 hadoop03
修改后的结果:
8)设置hadoop环境变量
修改/etc/profile文件,设置hadoop环境变量,如果已完成伪分布式安装,此文件无需修改,如未完成安装需在此文件末尾添加hadoop环境变量,并使用source使环境变量生效:
export HADOOP_HOME=/opt/hadoop-2.8.5 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
最终的/etc/profile文件:
Step 2 分发Hadoop
1)清理伪分布安装的hdfs
如果从伪分布模式基础上进行的安装,因为伪分布已经启动过,此时hdfs系统有残留,在分发hadoop前,需要清理tmp文件夹,在namenode节点运行如下命令:
cd /opt/hadoop-2.8.5 rm -rf tmp
如果是全新安装,可以忽略此步
2)将hadoop01上的hadoop安装内容分发到各节点
在hadoop01上执行如下命令:
scp -r /opt/hadoop-2.8.5/ root@hadoop02:/opt scp -r /opt/hadoop-2.8.5/ root@hadoop03:/opt
3)将/etc/profile文件分发到各节点
如果在伪分布阶段已在/etc/profile文件中添加了hadoop环境变量,此处已经在前面安装jdk时分发过了,此处可以忽略。
后面的格式化及验证过程,基本上和伪分布式相同。
Step 3 格式化namenode
执行如下命令格式化namenode节点:
hdfs namenode -format
出现如下信息表示格式化成功:
Note
如果安装过伪分布式,则hdfs系统已经存在,注意选择y覆盖原有系统
hdfs格式化成功后,文件系统会在配置文件设置的目录下,此处为:/opt/hadoop安装目录/tmp
Step 4 验证Hadoop
1)启动HDFS
运行如下命令启动hdfs:
start-dfs.sh
运行结果:
Note:
第一次连接到其他服务器会要求输入yes,但不应该输入密码,因为已经配置了免密
会逐一启动1个namenode,2个datanode和一个secondarynamenode。
如果启动有问题,可以查看日志文件夹进行排查,日志位置默认为:/opt/hadoop安装目录/logs
在NameNode节点运行jps会看到如下进程:
分别在DataNode节点运行jps会看到如下进程:
Note
如果datanode进程不存在,需要查看datanode节点上的启动日志,大多数是datanode上的数据块无法在namenode上注册失败导致,可以通过以下步骤解决问题:
删除datanode节点下的hdfs系统,通常在当前datanode的/opt/hadoop安装目录/tmp/dfs下,直接进入tmp文件夹通过rm -rf dfs即可删除,分别删除启动不成功的datanode中的系统
在namenode上停止hdfs:stop-dfs.sh
在namenode上重新启动dfs:start-dfs.sh
特别注意,如果从伪分布系统上开始安装,在分发hadoop前需要清理tmp文件夹,把伪分布系统的hdfs清理干净。
2) 启动yarn
在hadoopnode1上运行如下命令:
start-yarn.sh
启动完成:
此时resourcemanager和nodemanager会分别启动,各自日志也在/opt/hadoop安装目录/logs下面,如有问题可以查看日志进行排查。
在hadoop01上运行jps会找打resourcemanager进程;分别在hadoop02和hadoop03上面运行jps会找到nodemanager进程:
3)访问web界面
1.NameNode的web界面:
2.yarn(resourceManager)的web界面:
Note
如果浏览器中无法显示相关页面,需要确认防火墙是否关闭,可以参考伪分布安装一节关闭防火墙。
4)验证mapreduce功能
该部分和伪分布安装中的验证mapreduce功能类似,此处仅简单描述。
在hdfs上创建文件夹:
在hadoop01上执行如下命令:
hdfs dfs -mkdir /user hdfs dfs -mkdir /user/root
上传统计文件到hdfs
hdfs dfs -put /opt/hadoop-2.8.5/etc/hadoop/ input
Note:
此处如果put不成功,报类似如下错误:
WARN hdfs.DataStreamer: DataStreamer Exception org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /user/root/input/mapred-env.cmd._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 2 datanode(s) running and 2 node(s) are excluded in this operation.大致意思是说,有2个datanode节点在运行,但是在复制文件时被排除在外,原因很可能是节点间datanode节点无法联系到namenode节点,你需要检查:
1 各个节点防火墙是否关闭
2 datanode节点上core-site.xml中namenode主机名是否配置错误。
1.执行单词统计
hadoop jar /opt/hadoop-2.8.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount input output
2.查看结果
hdfs dfs -get output output cat output/*
Note:
如果当前本地目录中存在output文件夹,请先删除该文件夹
关闭集群
stop-dfs.sh stop-yarn.sh
Note:
也可以使用下面的脚本启动和关闭集群,但系统已经不建议你使用:
start-all.sh stop-all.sh
5 附录
5.1 其他参考
完全分布式集群设置:
Apache Hadoop 2.10.1 – Hadoop Cluster Setup
5.2 FAQ
完全分布式集群设置:
Apache Hadoop 2.10.1 – Hadoop Cluster Setup
5.2 FAQ
Q1:DataNode无法注册数据块,通常会提示如下错误:
2021-11-08 09:34:53,595 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Block pool ID needed, but service not yet registered with NN, trace: java.lang.Exception
A:大多数是datanode上的数据块无法在namenode上注册失败导致,可以通过以下步骤解决问题:
删除datanode节点下的hdfs系统,通常在当前datanode的/opt/hadoop安装目录/tmp/dfs下,直接进入tmp文件夹通过rm -rf dfs即可删除,分别删除启动不成功的datanode中的系统
在namenode上停止hdfs:stop-dfs.sh
在namenode上重新启动dfs:start-dfs.sh
如果还不成功,可以重新格式化namenode
Q2: 在执行hdfs -put操作时,无法像hdfs上传文件,提示有datanode节点被排除。
WARN hdfs.DataStreamer: DataStreamer Exception org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /user/root/input/mapred-env.cmd.COPYING could only be replicated to 0 nodes instead of minReplication (=1). There are 2 datanode(s) running and 2 node(s) are excluded in this operation.
A:大致意思是说,有2个datanode节点在运行,但是在复制文件时被排除在外,原因很可能是节点间datanode节点无法联系到namenode节点,你需要检查:
1 )各个节点防火墙是否关闭
可以在各节点执行防火墙关闭命令:
systemctl stop firewalld systemctl disable firewalld
2 )datanode节点上core-site.xml中namenode主机名是否配置错误。



