一.Hadoop的组成
对普通用户来说, Hadoop就是一个东西,一个整体,它能给我们提供无限的磁盘用来保存文件 ,可以使用提供强大的计算能力 。但是,我们要把它搭建起起来,就必须要了解它的基本组成,知道它的内部分工。
在Hadoop3.X中,hadoop一共有三个组成部分:MapReduce,Yarn,HDFS。它们的作用如下:
- MapReduce: 用来提供计算。
- HDFS:用来提供文件存储功能。
- Yarn: 用来协调调度。
二. HDFS
Hadoop Distributed File System, 简称HDFS,是一个分布式文件系统。在hadoop体系中,它用存储文件。
例如,当我们把一个文件(例如500M),保存到hadoop中时,它的背后要实现两个效果:
- 如果文件较大(>128M)把大文件拆小,并分别传输。
- 存储3份在不同的主机上。
在它的内部,有三个角色,分别如下:
(1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等。
(2)DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。
(3)Secondary NameNode(2nn): 每隔一段时间对NameNode元数据备份。
三.YARN
Yet Another Resource Negotiator,简称YARN,另一种资源协调者,是Hadoop的资源管理器。
(1)ResourceManager(RM):整个集群资源(内存,CPU等)的管理者
(2)NodeManager(NM): 单个节点服务器资源的管理者
Yarn和HDFS的关系说明:逻辑上分离,物理上在一起。
逻辑上分离:不是说非要启动HDFS集群才能启动YARN集群,不是先有哪个再有哪个?每个框都是一个进程,可能都运行在一台主机上,但是,属于不同的集群。
物理上在一起:每一台机器上都有NN, NM。
四.MapReduce
MapReduce用来提供计算的能力。它将计算过程分为两个阶段:Map和Reduce。
(1)Map阶段并行处理输入数据
(2)Reduce阶段对Map结果进行汇总
五.集群配置 规划
集群部署规划建议:
1.NameNode和SecondaryNameNode不要安装在同一台服务器
2.ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
根据我们的实际情况,我们配置如下
|------|-------------------|-----------------------------|----------------------------|
| | hadoop100 | hadoop101 | hadoop102 |
| HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
| YARN | NodeManager | ResourceManager NodeManager | NodeManager |
六.修改配置文件
这里一共有5个文件要配置:分别是core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml,workers。 五个配置文件都存放在$HADOOP_HOME/etc/hadoop这个路径下。
(1)core-site.xml核心配置文件
当前要操作的文件是:/opt/module/hadoop-3.1.3/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://hadoop100:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为root-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
(2)HDFS配置文件
接下来配置第二个文件,/opt/module/hadoop-3.1.3/etc/hadoop/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>hadoop100:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop102:9868</value>
</property>
</configuration>
(3)YARN配置文件
配置/opt/module/hadoop-3.1.3/etc/hadoop/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>hadoop101</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>
(4)MapReduce配置文件
配置/opt/module/hadoop-3.1.3/etc/hadoop/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>
(5)配置workers
要修改的文件是:/opt/module/hadoop-3.1.3/etc/hadoop/workers,在该文件中增加如下内容:
hadoop100
hadoop101
hadoop102
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
七. 同步分发配置文件
刚才我们是在hadoop100这台机器上进行了正确的设置,但是,其他的2台机器也要做相同的配置。所以我们用上一节课封装的xsync 命令来进行文件同步。
把这个配置文件同步给其他的主机,使用命令如下:
root@hadoop100 hadoop\]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/ ****八.启动**** ****集群**** (1)如果集群是第一次启动,需要在hadoop100节点(指定为namenode的节点)格式化NameNode(注意:格式化NameNode,会产生新的集群id) 命令是:hd。具体如下: \[root@hadoop100 hadoop-3.1.3\]$ hdfs namenode -format (2)启动HDFS \[root@hadoop100 hadoop-3.1.3\]$ sbin/start-dfs.sh 提醒:此时会报错不允许使用root用户来启动HDFS! 在环境变量中添加/etc/profile.d/my_env.sh #添root加环境变量 #告诉 Hadoop 使用 root 用户来启动和管理相应的服务 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root 同步给其他的机器,并使用source命令,让环境变量生效! 再来试一次。 (3)在配置了ResourceManager的节点(hadoop101)启动YARN \[root@hadoop101 hadoop-3.1.3\]$ sbin/start-yarn.sh 九.****查看集群运行效果**** (1)Web端查看HDFS的NameNode (a)浏览器中输入:[http://hadoop100:9870](http://hadoop100:9870 "http://hadoop100:9870")  (b)查看HDFS上存储的数据信息 (2)Web端查看YARN的ResourceManager (a)浏览器中输入:[http://hadoop101:8088](http://hadoop101:8088 "http://hadoop101:8088") (3)查看YARN上运行的Job信息  * ****十.重置集群**** 如果集群出现了异常,可以尝试如下操作(你将失去所有的数据,请谨慎) 1. 停止hdfs. stop-dfs.sh 2. 停止 yarn。 stop-yarn.sh 3. 删除 所有设备上的 /data, /log 4. 重新初始化集群。hdfs namenode -format 重新启动hdfs, yarn。 start-dfs.sh start-yarn.s