Hadoop 是 Apache 软件基金会旗下的一个开源的分布式计算平台。
Hadoop 提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理;
海量数据的存储和海量数据的分析计算问题。也就是 Hadoop 的两大核心:HDFS 和 MapReduce。
Common(基础组件):(工具包, RPC 框架) JNDI 和 RPC
HDFS(Hadoop Distributed File System 分布式文件系统) :HDFS是以分布式进行存储的文件系统,主要负责集群数据的存储与读取。
HDFS的设计特点*:
1、大数据文件,非常适合上T级别的大文件或者一堆大数据文件的存储。
2、文件分块存储,HDFS会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多。
3、流式数据访问,一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。
4、廉价硬件,HDFS可以应用在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。
5、硬件故障,HDFS认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。
HDFS的master/slave构架:
一个HDFS集群是有一个Namenode和一定数目的Datanode组成。Namenode是一个中心服务器,负责管理文件系统的namespace和客户端对文件的访问。Datanode在集群中一般是一个节点一个,负责管理节点上它们附带的存储。在内部,一个文件其实分成一个或多个block,这些block存储在Datanode集合里。Namenode执行文件系统的namespace操作,例如打开、关闭、重命名文件和目录,同时决定block到具体Datanode节点的映射。Datanode在Namenode的指挥下进行block的创建、删除和复制。Namenode和Datanode都是设计成可以跑在普通的廉价的运行linux的机器上。
HDFS的关键元素:
Block:将一个文件进行分块,通常是64M。
NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一一台主机专门保存,当然这台主机如果出错,NameNode就失效了。在Hadoop2.**开始支持activity-standy模式----如果主NameNode失效,启动备用主机运行NameNode。
DataNode:分布在廉价的计算机上,用于存储Block块文件。
HDFS架构图:
Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告*(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode*上所有数据块的列表。
MapReduce(Map 和 Reduce 分布式运算编程框架) :MapReduce是一种计算模型,用于大规模数据集(大于1TB)的并行计算。“Map”对数据集上的独立元素进行指定的操作,生成键值对形式中间结果;“Reduce”则对之间结果中相同“键”的所有“值”进行规约,以得到最终结果。
当你向MapReduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。Reduce任务的主要目标就是把前面若干个Map的输出汇总到一起并输出。
MapReduce流程图
步骤1:首先对输入数据源进行切片
步骤2:master调度worker执行map任务
步骤3:worker读取输入源片段
步骤4:worker执行map任务,将任务输出保存在本地
步骤5:master调度worker执行reduce任务,reduce worker读取map任务的输出文件
步骤6:执行reduce任务,将任务输出保存到HDFS
参考资料
HDFS Java API:http://hadoop.apache.org/core/docs/current/api/
HDFS源代码*:http://hadoop.apache.org/core/version_control.html*
由图可以看出,Hadoop1.X内核主要由分布式存储系统(HDFS)和分布式计算框架(MapReduce)两个系统组成,而Hadoop2.X主要新增了资源管理框架YARN。
Hadoop 1.X 生态几乎是以 MapReduce 为核心的,但是慢慢的发展,其扩展性差、资源利用率低、可靠性 等问题都越来越让人觉得不爽,于是才产生了 YARN,并且 Hadoop 2.X 生态都是以 YARN 为核心。
经过多年的发展,Hadoop生态圈不断完善和成熟,目前已经包含了多个子项目。除了核心的HDFS和MapReduce以外,Hadoop生态圈还包括Hive、ZooKeeper、HBase、Sqoop、Flume等功能组件。
Hadoop是由Apache Lucence创始人Doug Cutting创建的,Lucence是一个应用广泛的文本搜索系统库。
Hadoop的发展历程如下图所示:
Hadoop源自2002年的Apache Nutch项目——一个开源的网络搜索引擎并且也是Lucence项目的一部分。在2002年的时候,Nutch项目遇到了棘手的难题,该搜索引擎框架无法扩展到拥有数十亿网页的网络。
在 2003年和2004年, Googles 分别公布了 GFS 和 Mapreduce 两篇论文。 Doug Cutting 和 Mike Cafarella 发现这与他们的想法不尽相同,且更加完美,完全脱离了人工运维的状态,实现了自动化。
在经过一系列周密考虑和详细总结后,2006 年, Dog Cutting 放奔创业,随后几经周折加入了 yahoo 公司(Nutch 的部分也被正式引入),机缘巧合下,他以自己儿子的一个玩具大象的名字 Hadoop 命名了该项。当系统进入 Yahoo 以后,项目逐渐发展并成熟了起来。首先是集群规模,从最开始几十台机器的规模发展到能支持上千个节点的机器,中间做了很多工程性质的工作;然后是除搜索以外的业务开发, Yahoo 逐步将自己广告系统的数据挖掘相关工作也迁移到了 Hadoop 上,使 Hadoop 系统进一步成熟化了。
2007 年,纽约时报在 100 个亚马逊的虚拟机服务器上使用 Hadoop 转换了 4TB 的图片数据更加加深了人们对 Hadoop 的印象。
2008年4月,Hadoop打破世界纪录,成为最快排序1TB数据的系统,它采用一个由910个节点构成的集群进行运算,排序时间只用了209s。
在2009年5月,Hadoop更是把1TB数据排序时间缩短到62s。
2011年, Yahoo将 Hadoop 团队独立出来,成立了ー个子公司 Hortonworks,专门提供 Hadoop 相关的服务。
Hadoop从此名声大噪,迅速发展成为大数据时代最具影响力的开源分布式开发平台,并成为事实上的大数据处理标准。
Hadoop 是一个能够让用户轻松架构和使用的分布式计算的平台。用户可以轻松地在 Hadoop 开发和运行处理海量数据的应用程序。其优点主要有以下几个:
2020年全国大数据技能竞赛青椒课堂培训:https://www.qingjiaoclass.com/tenant/qyzpbaerkbax/course/datum/1383/11222/37200?selfScenarioId=37200&materialId=1127228
不知道你们打得开不 好像要参加了这个比赛才能打开
1、Apache Hadoop:是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目*(HDFS)和支持MapReduce*分布式计算的软件架构。
2、Apache Hive:是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
3、Apache Pig:是一个基于Hadoop的大规模数据分析工具,它提供的SQL-LIKE语言叫PigLatin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。
4、Apache HBase:是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PCServer上搭建起大规模结构化存储集群。
5、Apache Sqoop:是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(MySQL,Oracle,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
6、Apache Zookeeper:*是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。
7、Apache Mahout:是基于Hadoop的机器学习和数据挖掘的一个分布式框架。Mahout用MapReduce*实现了部分数据挖掘算法,解决了并行挖掘的问题。
8、Apache Cassandra:是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存简单格式数据,集GoogleBigTable的数据模型与AmazonDynamo*的完全分布式的架构于一身。
9、Apache Avro:是一个数据序列化系统,设计用于支持数据密集型,大批量数据交换的应用。Avro是新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC*机制。
10、 Apache Ambari:是一种基于Web的工具,支持Hadoop*集群的供应、管理和监控。
11、 Apache Chukwa:是一个开源的用于监控大型分布式系统的数据收集系统,它可以将各种各样类型的数据收集成适合Hadoop处理的文件保存在HDFS中供Hadoop进行各种MapReduce操作。
12、 Apache Hama:是一个基于HDFS的BSP(BulkSynchronousParallel)并行计算框架,Hama可用于包括图、矩阵和网络算法在内的大规模、大数据计算。
13、 Apache Flume:是一个分布的、可靠的、高可用的海量日志聚合的系统,可用于日志数据收集,日志数据处理,日志数据传输。
14、 Apache Giraph:是一个可伸缩的分布式迭代图处理系统,基于Hadoop平台,灵感来自BSP(bulksynchronousparallel)和Google的Pregel。
15、 Apache Oozie:是一个工作流引擎服务器,用于管理和协调运行在Hadoop平台上(HDFS、Pig和MapReduce)的任务。
16、 Apache Crunch:是基于Google的FlumeJava库编写的Java库,用于创建MapReduce程序。与Hive,Pig类似,Crunch提供了用于实现如连接数据、执行聚合和排序记录等常见任务的模式库。
17、 Apache Whirr:是一套运行于云服务的类库(包括Hadoop),可提供高度的互补性。Whirr学支持AmazonEC2和Rackspace的服务。
18、 Apache Bigtop:是一个对Hadoop及其周边生态进行打包,分发和测试的工具。
19、 Apache HCatalog:是基于Hadoop的数据表和存储管理,实现中央的元数据和模式管理,跨越Hadoop和RDBMS,利用Pig和Hive提供关系视图。
20、 Cloudera Hue:是一个基于WEB的监控和管理系统,实现对HDFS,MapReduce/YARN,HBase,Hive,Pig的web化操作和管理。
/hcatalog/):是基于Hadoop的数据表和存储管理,实现中央的元数据和模式管理,跨越Hadoop和RDBMS*,利用Pig和Hive提供关系视图。
20、 Cloudera Hue:是一个基于WEB的监控和管理系统,实现对HDFS,MapReduce/YARN,HBase,Hive,Pig的web化操作和管理。