一、前言
本人认为,学习一门技术首先需要系统的了解技术整个框架,才能让自己对这门技术的理解更进一步。同时,先有理论,后有技术的出现。这代表着,我们需要在学习好理论基础的前提上完成实践的操作,这样才能算上入门。而本人的学习笔记,主要先结合网络资源对理论进行深入理解,后在此基础上实践。
二、Hadoop框架
2.1 Google的三驾马车
了解Hadoop组成框架之前,我们需要认识Google公司的三架马车。Google公司最出名的,不只是开发了一个强悍的搜索引擎,还在于Google公司创造了三种革命性技术,即Google三架马车:GFS、MapReduce、BigTable。并且,Google公司在04到06年还发表了关于这三种技术的重要论文,极大普及了大众对大量数据进行分布式处理的知识盲区,进而促进了Hadoop出现。
2.2 Hadoop的组成
对于Hadoop2.x而言,主要的框架以及功能为:
MapReduce | 负责计算 |
HDFS | 负责数据存储 |
Yarn | 负责资源调度 |
Common | 辅助工具 |
无论是2.x或者是3.x版本中,Hadoop的框架中始终有Yarn、MapReduce和HDFS的存在。由此可见,它们对于Hadoop的意义。因此,我们需要深入了解这三种 “ 功能 ” 。
2.2.1 HDFS架构
HDFS包含了NameNode、DataNode、SecondaryNameNode,分别对应着Hadoop集群启动时各个节点的部分启动项。同时,在通过JPS语句查询Hadoop启动项时,我们可以看到Hadoop集群只启动了1个NameNode节点和N个DataNode,以及1个ScondaryNameNode,其中N代表的是集群节点数。同时通过各节点的启动项,我们也能反向推出HDFS是属于主/从结构的模型。
HDFS各个Node的功能,可以理解为:
NameNode | 存储文件的元数据 |
DataNode | 存储文件块数据,以及数据的校验和 |
SecondaryNameNode | 监控HDFS状态的辅助后台程序 |
其中,NameNode与DataNode都储存着文件的数据。不过,NameNode是存储的是描述DataNode的数据的数据,而DataNode存储的是以块存储的数据,即我们需要的数据。
Tips:在HDFS中会将超过默认值128MB的文件进行分块储存。因此,当我们需要人为的处理块储存数据时,只需要将所有块中的文件进行组合拼接即可。
SecondaryNameNode,顾名思义就是作为NameNode的备份,但是它不同于其他备份逻辑,SecondaryNameNode的备份逻辑是冷备份。
冷备份是指,NameNode在每一次ShutDown后通过操作系统命令对数据进行备份,类似于我们在Vmare虚拟机上面对操作系统进行快照的备份。因此,我们可以将SecondaryNameNode这种冷备份理解为每隔一段时间获得NameNode的快照。
2.2.2 YARN架构
YARN包含了ResourceManager、NodeManager、ApplicationMaster、Container。我们在启动Hadoop集群中,会发现在JPS命令结果中有1个ResourceManager和N个NodeManage。在NodeManage中存在着ApplicationMaster负责分配工作,并与ResourceManager协商调用资源Container。
ResourceManager的功能理解:
处理客户端请求 |
监控NodeManager |
启动或监控ApplicationMaster |
资源的分配与调度 |
NodeManager的功能理解:
管理单个节点上的资源 |
处理ResourceManager的命令 |
处理ApplicationMaster的命令 |
ApplicationMaster的功能理解:
Container管理 |
为应用程序(实例)申请空间,分配工作 |
工作的监控与容错 |
Container的功能理解:作为YARN中的抽象资源,封装了节点上多维度数据。
2.2.3 MapReduce架构
MapReduce在各种现代高级编程语言当中都有其身影,而在这所有编程语言当中它都是始终分为Map和Reduce。在Hadoop集群中,MapReduce并不存在于JPS查询后的启动项中,它由YARN架构调用。
通过上图,其实我们不难理解Map阶段就是对job中的数据进行并行化处理,再通过Reduce阶段对结果进行汇总。
并行化处理:MapReduce根据Job对数据矢量进行切片,多个Map进行相间操作。
理解完MapReduce的基本逻辑,我们接下来需要回答一个问题,在上文并行化处理中提及的Job是什么?
本人认为现阶段基本上计算机的很多技术都是可以通过英文翻译得到它的大致,那么Job在中文中的意思为工作,所以我们就可以大致认为Job在整个Hadoop集群中就是一个工作的意思。因此,根据我们对工作的理解,就可以认为Client(客户端)调用job.waitForCompletion方法,跟Hadoop集群去提交一个作业。MapReduce能够在Hadoop集群中进行作业,所以Client提交的是一个MapReduce作业。Client提交完作业后,需要跟ResourceManager申请一个ID去分清属于自己提交的作业,ResourceManager会返回作业ID、Job资源提交路径,并将Job添加到容器调度器中。
2.3 大数据技术生态体系
了解完基本的Hadoop架构后,我们再了解一下大数据技术生态体系。
(图源来自尚硅谷)
其中,Hive、Mahout、Spark Mlib、Spark R、Spark Sql都属于非实时数据处理;而Spark Streaming和Storm属于实时数据处理。
每篇一个小知识:现如今比较火的Flink对标的是Spark
非实时数据处理,并不是指本意上的非实时,而是批处理。而实时数据处理,指的是流处理。
文件日志,我们可以理解为User的每一步操作形成日志。
无论我们配置Kafka,或者是Hadoop,我们都会发现网络上大部分教程都需要我们配置Zookeeper。这是因为Zookeeper在集群配置信息上,为我们提供了简便的操作。类似于之前的外卖需要我们记住每家商家的电话号码,而现在我们只需要打开美团、饿了么等App即可购买一样,它为我们配置集群提供一致性服务。
三、NTP集群时间同步配置
了解上文中的Hadoop架构后,我们可以清晰的认识到一个贯穿于Hadoop集群的东西,时间。可以说当Client开始提交一个作业时,Hadoop就开始记录下Client请求过程的时间戳。因此,对于Hadoop集群来说,需要有一个统一时间来避免时间差距过大导致的Hadoop集群报错。
3.1 Yum配置
在所有节点(master、slave1、slave2)上输入
yum clean all
yum makecache
yum -y install ntp
如果没有报错,恭喜你在NTP配置中已经完成了一半了。如果报错了,则需要将Yum重新卸载后重装。
3.2 NTP配置
在所有节点下,对server.*进行注释,用#注释
在master节点下输入,并添加master主机的network地址作为每一次时间同步的根据。
vim /etc/ntp.conf #编辑
restrict 127.0.0.1 #添加
restrict ::1 #添加
restrict 192.168.x.0 mask 255.255.255.0 #添加Master主机的NETWORK地址
server 127.127.1.0 #添加
fudge 127.127.1.0 stratum 10 #添加
在slave1和slave2节点下,添加
vim /etc/ntp.conf #编辑
restrict 127.0.0.1
restrict ::1
server 192.168.x.y #192.168.x.y是master主机IP地址
对所有节点,进行重启ntp服务
systemctl restart ntpd
在某个节点下,查看NTP服务状态
ntpq -p
-------------------------------------------------------------结束------------------------------------------------------------
Hadoop2.7.7集群配置https://blog.csdn.net/Libre813/article/details/120296824