版本3.1.3
环境搭建
虚拟机配置JDK后解压hadoop压缩包即可,踩坑:虚拟机网络配置完后,windows能ping通,远程登录拒绝。关闭虚拟机后仍然可以ping通,发现虚拟机设置的是windows中已经存在的ip,修改虚拟机ip后重试登录成功
Hadoop目录
(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
Hadoop3.x组成
HDFS数据存储
1.NameNode 存储文件的元数据,如文件名、目录结构、文件属性,以及每个文件的块列表和所在块的DataNode等,类似于数据库索引
2.DataNode 存储文件块数据,块数据的校验和
3.Secondary NameNode(2nn) 每隔一段时间对NameNode元数据进行备份
Yarn资源调度
1.ResourceManager 整个集群资源的管理者
2.ApplicationMaster 单个任务运行管理者
3.NodeManager 单个节点服务器资源管理者
4.Container 容器,相当于一台服务器,类似docker
MapReduce计算
1.Map阶段并行处理数据输入
2.Reduce阶段对Map阶段结果进行汇总
Common辅助工具
关系总结(暂时的认知可能不对,后续学习后会更新):比如3台服务器,对于YARN首先每台服务器都有自己的NodeManager,然后ResourceManager在其中一台服务器上用于管理整个集群资源。HDFS每台服务器都有自己的DataNode用于存放实际的数据,然后有一个NameNode存在于一台服务器上用于充当索引的角色,还有一个服务器运行着2nn用于备份NameNode的元数据。
基本流程线(暂时的认知可能不对,后续学习后会更新):客户端请求进入后首先到达ResourceManager,由ResourceManager提供所需的资源后NodeManager创建Container,然后ApplicationMaster启动任务,进入map阶段,找到结果后reduce阶段写出数据到DataNode,接着伴随2nn备份。
集群配置
配置
本地虚拟机开启了3台服务器,分别命名为hadoop102,hadoop103,hadoop104
由于机器配置限制故将NameNode和ResourceManager和2nn部署到不同服务器上
核心配置文件
路径
cd $HADOOP_HOME/etc/hadoop
core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的用户-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>dmz</value>
</property>
</configuration>
hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
hadoop-3.1.3/etc/hadoop/workers
追加
hadoop102
hadoop103
hadoop104
最后将改动的配置文件复制到其他2台服务器相同地方
启动集群
如果是第一次启动需要在配置NameNode的节点上先格式化NameNode以生成集群id
hdfs namenode -format
然后启动HDFS
sbin/start-dfs.sh
在配置了ResourceManager的节点启动YARN
sbin/start-yarn.sh