文章介绍:
本文将带领你进入Hadoop的生态世界,本文为Hadoop生态从0到1_理论篇(7日连载),后期会推出Hadoop生态从0到1_实践篇(7日连载)
目录:
- 生态总体关系图
- Hadoop的诞生与繁荣【故事驱动】
- Hadoop必须知道的那些事儿
- HDFS (Hadoop Distributed File System 分布式文件系统)
- YARN (Yet Another Resource Negotiator资源管理调度系统)
- MapReduce
- Hive
- HBase
- …
生态总体关系图
大数据的分布式存储与计算
Hadoop系统整体架构V1
Hadoop系统整体架构V2
Hive - SQL/MR编译器
Pig - Pig-Latin/MR编译器
Zookeeper - 分布式协同调度和锁
Avro - 接口开发工具
HBase - 基于列簇的分布式
NoSQLFlume/NG/Scribe - 日志流汇总工具
Mahout - 基于MR的算法库
Drill/Impala - 内存SQL引擎,Dremel开源实现
Thrift - 接口开发工具
Sqoop - ETL工具
Oozie - 工作流
Hadoop的诞生与繁荣【故事驱动】
Doug Cutting(一位大牛)主导的Apache Nutch项目是Hadoop软件的源头,该项目始于2002年,是Apache Lucene 的子项目之一。
Google在2003年于SOSP上发表了分布式文件系统的论文“The Google File System”–> 2004年,Nutch的分布式文件系统(NDFS)开始开发。
2004年,Google在OSDI上发表了题为“MapReduce: Simplified Data Processing on Large Clusters”的论文 --> Doug Cutting等人开始实现MapReduce计算框架并与NDFS(Nutch Distributed File System)结合起来,共同支持Nutch的主要算法。
2006年,它逐渐成为一套完整而独立的软件,已经到Yahoo!工作的Doug Cutting将这套大数据处理软件命名为Hadoop。
2008年初,Hadoop成为Apache的顶级项目,除Yahoo!之外在众多互联网企业中得到应用。此时的Hadoop系统又称为Hadoop v1,主要由两个核心组件构成:HDFS和MapReduce。
一些围绕在Hadoop周围的开源项目,为完善大数据处理的全生命周期提供了必要的配套和补充。这些软件常用的有ZooKeeper、Hive、Pig、HBase、Storm、Kafka、Flume、Sqoop、Oozie、Mahout等。
2012年5月,Hadoop v2的alpha版本发布,其中最重要的变化是在Hadoop核心组件中增加了YARN(Yet Another Resource Negotiator)。YARN的出现是为了把计算框架与资源管理彻底分离开,解决Hadoop v1由此带来的扩展性差、单点故障和不能同时支持多种计算框架的问题。YARN对标的恰好就是Google的Borg系统。至此,Hadoop方才能够与Google的大数据平台比肩。
Hadoop也成为自Linux以来最成功的开源软件,没有之一。
2013年出现了Spark,在全面兼容Hadoop原有组件的基础上,Spark通过更多的利用内存处理大幅提高系统性能。
Hadoop必须知道的那些事儿
Hadoop系统的三种安装模式
- 单机模式(默认)
Hadoop系统默认启动运行模式,仅作体验MapReduce使用。
配置文件均为空,Hadoop完全运行在本地
此时的Hadoop系统仅仅是一个独立的Java进程
不需要与其他节点交互,单机模式就不使用HDFS,也不加载任何其他Hadoop的守护进程
该模式主要用于开发调试MapReduce程序的应用逻辑
- 伪分布式
使用多个守护线程模拟分布的伪分布运行模式
在“单节点集群”上运行Hadoop,其中所有的守护进程都运行在同一台机器上。
该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。
- 完全分布式
就是真正多台机器来搭建分布式集群
Hadoop系统中的所有守护进程分别运行在一个集群中的不同机器上。
几个重要的配置文件:
core-site.xml 配置HDFS节点名称和地址
hdfs-site.xml 配置HDFS存储目录,复制数量
mapred-site.xml 配置mapreduce的jobtracker地址
HDFS
首先放一张简易但清晰的图表明HDFS在Hadoop系统的位置
什么是HDFS?
Hadoop Distributed File System
Hadoop Distributed File System (HDFS) is the primary storage system used by Hadoop applications.
HDFS creates multiple replicas of data blocks and distributes them on compute nodes throughout a cluster to enable reliable, extremely rapid computations.
HDFS简介
HDFS为了做到可靠性(reliability)创建了多份数据块(data blocks)的复制(replicas),并将它们放置在服务器群的计算节点中(compute nodes),MapReduce就可以在它们所在的节点上处理这些数据了。
HDFS能做什么
存储并管理PB级数据
处理非结构化数据
注重数据处理的吞吐量(latency不敏感)
write-once-read-many存取模式
任何一个节点失效,不影响HDFS服务
HDFS可以自动完成副本的复制
HDFS不适合做什么
存储小文件 (不建议使用)
大量的随机读 (不建议使用)
需要对文件的修改 (不支持)
物理部署图
HDFS系统架构
HDFS中的数据存储
HDFS中的文件
文件切分成块(默认大小64M),以块(block)为单位,每个块有多个副本存储在不同的机器(node)上,副本数可在文件生成时指定(默认3)。
NameNode是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的DataNode等等
DataNode在本地文件系统存储文件块数据,以及块数据的校验和
可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容。
HDFS — NameNode
Namenode是一个中心服务器,单一节点(简化系统的设计和实现),负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。
文件操作,NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过NameNode,只会询问它跟那个DataNode联系,否则NameNode会成为系统的瓶颈
⚠️NameNode 一般情况是独立存在于一个物理机中
副本存放在那些DataNode上由NameNode来控制,根据全局情况做出块放置决定,读取文件时NameNode尽量让用户先读取最近的副本,降低带块消耗和读取时延
Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了该Datanode上所有数据块的列表。
HDFS — DataNode
一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。
心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode 的心跳,则认为该节点不可用。
集群运行中可以安全加入和退出一些机器
Namenode 和 Secondary Namenode
Secondary Namenode可以理解成是NameNode的一个热备(备份)
HDFS Data Writing
HDFS Data Reading
HDFS文件校验
在文件创立时,每个数据块都产生校验和
校验和保存在.meta文件内
客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏
如果正在读取的数据块损坏,则可以继续读取其它副本
HDFS文件压缩
HDFS回收站
删除文件时,其实是放入回收站/trash
回收站里的文件可以快速恢复
可以设置一个时间阈值,当回收站里文件的存放时间超过这个阈值,就被彻底删除,并且释放占用的数据块
YARN
( 待续 … TEAM-AG )