大象起舞,天下太平,极客们应该知道我们的重量级人物Hadoop登场了。
提到Hadoop, 正所谓饮水思源,我们不得不提及一下Hadoop之父,其对技术界的影响,在近10年可谓重大, 他就是Doug Cutting, 其传奇人生及其大作这里不赘述了,大家可以Google/Bing一下,之后或许我们会推出一些技术大牛的介绍以及好书推荐。
值得提及的是Hadoop之所以诞生于2005-2006之际,是Doug当时受到来自
Google Lab公开发布的几篇paper启发,包括Map/Reduce(2004), Google
File System(GFS)-2003,Doug于2006年加入Yahoo, 在Yahoo的慧眼及大力推动下,山寨出身的Hadoop的运势如日中天。
老样子,Hadoop官网介绍,Hadoop是一个开源框架,适合运行在通用硬件,支持用简单程序模型分布式处理跨集群大数据集,支持从单一服务器到上千服务器的水平scale up。BTW, Hadoop的官网真是无法形容,毫无美感,文字堆砌,与后来的Docker, Spark等无法相提并论。毕竟这是一个颜值时代。
上架构图:
Hadoop 1.x架构刚开始比较简单,只有2个大的模块MapReduce和
HDFS, 其中MapReduce不单包含了分布式计算,还有集群资源管理,HDFS是Hadoop的核心分布式文件系统,提供了分布式高吞吐文件系统管理。
在后续的Hadoop 2.x版本中(目前稳定版本为2.7.x),
架构做了大幅改进,支持MapReduce批处理, Tez交互式,以及抽象独立的YARN负责job scheduling和集群资源管理,还有HDFS2,还有上图没有体现的
Common模块包含了一些公共功能,如安全认证以及支持其它模块基础功能。 同时,开放接口支持Online HBase, Streaming, In-Memory Spark等。
值得一提的是, 关于HDFS2,借鉴吸取了后起之秀Spark的计算模型,正所谓
“移动计算比移动数据更划算”, 之RDD之精髓。
好吧,先来介绍HDFS架构图:
HDFS毫无疑问的采用了master/slave架构, 一个HDFS集群是由一个NameNode和多个DataNodes组成。NameNode是一个中心服务器,负责管理文件系统的名字空间namespace以及客户端对文件的访问。DataNode一般是一个节点一个,负责管理它所在节点的存储。一个文件根据大小被拆分成一个或多个数据块,这些数据块存储在一组DataNode上,NameNode执行文件系统的操作,如打开,关闭,重命名等,同时也负责确定数据块到具体datanodes节点的映射。
datanode负责处理文件系统客户端的读写请求,在namenode的统一调度下进行数据的处理,如创建,删除,复制等。集群中单一的namenode结构大大简化了系统架构,namenode统一管理hdfs原数据,用户数据永远不会存放于
namenode。所有的hdfs通讯协议建立在tcp/ip之上。其中,client是向
namenode发起文件读写请求的,namenode再根据配置返回给client相应的
datanode信息。一个block默认配置会有3分备份。
细心的读者可能会发现,namenode是万能的,高效的,中央集权的。却隐隐存在巨大的单点故障风险,如果namenode出现故障,那整个hdfs都无法运作了,即非HA.
Hadoop 2.x后引入了HDFS2, 包含了2个namenode(目前支持2个),一个处于active状态,一个处于standby状态。当active出现问题时就自动切换,如何自动切换就借用了我们上一篇提到的zookeeper了,集群中的两个
namenode都在zookeeper中注册,zk负责监测namenode状态以及自动切换。说白了就是又引入一层来管理,计算机以及程序里的抽象与问题解决大多是引入新的一层或者角色来做到的。
另外读者可能也会注意到的是namenode是核心节点,维护着整个hdfs的元数据信息,但其容量是有限的,当namenode所在服务器内存无法装载后,整个hdfs集群就受制于他,这可无法支撑sale up成千上完的集群大数据。其解决办法为引入了hdfs Federation,即有多个hdfs集群。一个总集群中,可以虚拟出多个单独小集群,各个小集群间数据可以实时共享。
上图:
好了,hdfs到此,我们继续介绍第二个核心模块mapreduce。下图以著名的
wordcount为例,介绍m/r整体结构:
mr编程框架原理,利用一个输入的key-value对集合来产生一个输出的
key-value对集合。mr库通过map(映射)和reduce(化简)两个函数来实现,说到底其核心思想也就是我们大学学的数据结构中的分而治之算法吧。用户自定义的map函数接受一个输入key-value对,然后产生一个中间的key-value对的集合,mr把所有具有相同key值的value结合在一起,然后传递给reduce函数,reduce接受合并这些value值,形成一个较小的value 集合,reduce函数具备了在集群上大规模分布式数据处理的能力。与传统的分布式计算设计相比,mapreduce封装了并行处理,容错处理,本地化计算,负载均衡等细节。
上图中,reduce又包含了3个主要阶段,shuffle,sort和reduce。这里有必要提及一下shuffle:
shuffle操作就是针对多个map任务的输出按照不同的分区partition通过网络复制到不同的reduce任务节点上,这整个过程叫做shuffle。
继续介绍第三大核心YRAN:
整体架构中的yran
继续抽象:
YARN的内部细节架构:
YARN分层结构的本质是ResourceManager。它控制整个集群并管理应用程序向基础计算资源分配。ResourceManager将各个资源部份(计算,内存,带宽等)安排给基础nodemanager(YARN的每节点代理)。ResourceManger还与ApplicationMaster一起分配资源,与NodeManager一起监控基础应用。在上下文,承担了以前的TaskTracker的一些角色,ResourceManager承担了
JobTracker的角色。Hadoop 1.x架构受到了JobTracker的高度约束,
jobtracker负责整个集群的资源管理与作业调度,新的Hadoop 2.x打破了这种模型,ResourceManager管理资源,ApplicationMaster负责作业。YARN还允许使用Message Passing Interface通信模型,执行不同编程模型,包括图形,迭代式,机器学习等计算。
好了,上代码吧,没时间写了,官网word count:
“简单”明了,无需多数,作者简单加了引号,注意这段经典代码后来被Spark用来作为案例,几句就搞定了。
最后,我们来看一下Hadoop的生态系统:
Hadoop v2.x生态系统如日中天,百家争鸣。这里仅仅抛个引子。
好了,本文仅作为Hadoop的项目介绍就到此了,相信群里有很多Hadoop大牛技术专家,各位不灵赐教。
@erixhao
公众号: 技术极客TechBooster
相关推荐
Apache Kylin由eBay于2014年开源,并在2015年成为Apache顶级项目。它采用了Cube建模的方式,将复杂的OLAP(在线分析处理)查询转换为简单的Hadoop批处理任务,从而实现了对大数据的快速查询。Kylin通过预计算和存储...
解压“spark2.3.0-hadoop2.6.tgz”后,你需要对目录进行重命名以符合你的系统或项目需求。通常,你可以保留原始的目录结构,但将顶级目录名更改为更易于识别的名字,例如“my_spark_2.3.0”。 接下来,配置是关键...
它由Facebook开源,现已成为Apache软件基金会的顶级项目。Presto的核心设计理念是快速响应查询,支持多种数据源,包括Hive、Hadoop、Cassandra、MySQL等。在本案例中,我们关注的是`presto-hive-hadoop1-0.65.zip`,...
Hive最初由Facebook开发,后来成为Apache软件基金会的一个顶级项目,广泛应用于大数据处理领域。在这个"apache-hive-2.3.0-bin.tar.gz"压缩包中,包含了Apache Hive 2.3.0版本的所有二进制文件,用于在Linux系统上...
10. **扩展性与社区支持**: 作为 Apache 软件基金会的顶级项目,Phoenix 拥有活跃的社区,持续进行版本更新和功能增强。社区提供文档、教程和问题解答,帮助用户解决问题和充分利用 Phoenix。 通过解压 "apache-...
Hive最初由Facebook开发,后来成为Apache软件基金会的一个顶级项目,广泛应用于大数据处理领域。`apache-hive-3.1.2-bin.tar.gz`是Apache Hive 3.1.2版本的二进制发行版,适用于Linux/Unix环境。这个压缩包包含了...
2008年,Hadoop成为Apache的顶级项目。2011年,Hadoop发布1.0.0版本。2013年,Hadoop发布2.2.0版本。2016年,Hadoop发布Hadoop3.0-alpha版本。 Hadoop有三个大发行版本:Apache Hadoop、Cloudera CDH和Hortonworks ...
最初由salesforce开发,后来成为Apache基金会的顶级项目。Phoenix通过JDBC接口使得开发者能够使用标准的SQL语法来创建表、插入数据以及查询HBase中的数据,而不是直接使用HBase的API。这极大地简化了对HBase数据的...
Hive最初由Facebook开发,后来成为Apache软件基金会的一个顶级项目,广泛应用于大数据处理领域。在这个"apache-hive-3.1.2-bin.tar.zip"压缩包中,我们主要关注Hive 3.1.2版本的二进制安装文件。 Hive 3.1.2是Hive...
Kylin由eBay开源并在2014年贡献给了Apache软件基金会,现在已经发展成为Apache顶级项目。 在“apache-kylin-3.0.1-bin.tar.gz”这个安装包中,包含了运行Kylin所需的所有基础组件。以下是一些关键知识点: 1. **...
Hadoop,作为Apache软件基金会的一个顶级项目,是大数据处理领域的重要开源框架。Hadoop 3.1.1是其发展过程中的一个重要版本,它在前代的基础上进行了一系列优化和改进,提升了性能、稳定性和可扩展性。本文将详细...
### Hadoop开源项目分析 #### 一、Hadoop概述与背景 Hadoop作为一个分布式系统的基础架构,由Apache基金会开发和维护。它允许开发者无需深入了解分布式计算底层细节即可编写分布式程序,利用集群的强大处理能力...
- 成为Apache顶级项目后,Flume不再局限于日志数据,它可以处理各种事件数据,如网络流量、社交媒体数据、邮件消息等。 - Flume的核心组件包括Source(数据采集器)、Channel(缓冲通道)和Sink(接收器)。Source...
它是 Apache 软件基金会的一个顶级项目,旨在提供一个全面的数据治理解决方案,包括元数据管理、数据血缘追踪、数据分类和数据安全策略。通过 Atlas,你可以创建、管理和查询数据实体的元数据,从而帮助组织理解其...
### Apache Hadoop 知识点详解 #### 一、Apache Hadoop 概述 Apache Hadoop 是一个由 Apache Software Foundation 开发的开源软件框架,它主要用于处理和存储大规模数据集。该框架支持分布式计算,能够跨越多台...
- 项目孵化:像Apache Kudu这样的项目在成为ASF的顶级项目之前,会先经过孵化期,这代表了ASF对新项目的孵化与支持。 5. 未来展望: Hadoop生态系统将如何发展仍需关注。从技术的角度看,随着数据量的增长和数据...
顶级Apache开源项目Hadoop发布了1.0.0版。Hadoop是前雅虎开发者Doug Cutting开发的分布式计算平台,名字源于玩具象,至今已被数千家公司用于分析大容量数据。Hadoop 1.0.0主要是修正了bug,改进了性能和兼容性。它的...
- **Apache Hadoop项目**:Hadoop 在2008年被正式移交给 Apache Software Foundation,成为 Apache 的顶级项目之一。自那时起,Hadoop 不断发展和完善,支持更多的功能和服务。 #### 3. MapReduce基础 - **...
的介入和Doug Cutting的努力,NDFS和MapReduce演变为Hadoop,并在2008年成为Apache顶级项目。 Hadoop的核心组成部分包括: 1. Hadoop Common:包含了Hadoop运行所需的一系列通用工具和库,为其他Hadoop模块提供...