一、Hadoop基本含义
Hadoop是Apache开源组织的一个分布式计算开源框架(http://hadoop.apache.org/),用java语言实现开源软件框架,实现在大量计算机组成的集群中主要解决海量数据的存储和海量数据的分忻计算问题。
Hadoop实现了一个分布式文件系统(Hadoop Distributed FileSystem,HDFS)。 HDFS具有高容错性的特点,并设计它用来部署在价格低廉的硬件上,而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。
Hadoop框架中最核心设计就是:HDFS和MapReduce,HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。这两部分是hadoop的核心。数据在Hadoop中处理的流程可以简单的按照下图来理解:数据通过Haddop的集群处理后得到结果,它是一个高性能处理海量数据集的工具 。
广义上来说,Hadoop通常是指一个更广泛的概念---Hadoop生态圈。
二、Hadoop发展历程
1) Haoop创始人Doug Cutting, 为了实现与Google类似的全文搜索功能,他在sDcene框架基础上进行优化升级,查询引学和索引引擎。
2) 2001年年底Lucene成为Apache基金会的一个子项目。
3) 对于海虽数据的场录,Lucene框架面对与Gogle同样的困难,存储海塑数据因难,检索海虽速度慢。
4) 学习和模Google解决这些问题的办法:微型版Nutch,
5) 可以说Google是Haoop的思想之源(Google在大数据方面的三篇论文)
CFS -> HDFS
Map-Reduce -> MR
BigTable -> HBase
6) 2003-2004年, Google公开了部分GES和MapReduce思想的细节,以此为基础Doug Cutting等人用了2年业余时间实现了DFS和MapReduoe机制,使Nutch性能飙升。
7) 2005年Hadoop作为Lncene的子项目Nutch的一部分正式引入Apache基金会。
8) 2006 年3月份,Map-Reduce和Nutch Distributed File System (NDFS)分别被纳入到Hadoop项目中, Hadoop就此正式诞生,标志着大数据时代来临。
9) 名字来源于Dog Cutting儿子的玩具大象
三、Hadoop发行版本
Hadoop三大发行版本:Apache、Cloudera、Hortonworks。
#1.Apache版本最原始(最基础)的版本,对于入门学习最好。2006
#2.Cloudera内部集成了很多大数据框架,对应产品CDH。2008
#3.Hortonworks文档较好,对应产品HDP。2011
ps:tonworks现在已经被Cloudera公司收购,推出新的品牌CDP。
1.Apache Hadoop
官网地址:http://hadoop.apache.org
下载地址:https://hadoop.apache.org/releases.html
2.Cloudera Hadoop
官网地址:https://www.cloudera.com/downloads/cdh
下载地址:https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_cdh_6_download.html
1)2008年成立的Cloudera是最早将Hadoop商用的公司,为合作伙伴提供Hadoop的商用解决方案,主要是包括支持、咨询服务、培训。
2)2009年Hadoop的创始人Doug Cutting也加盟Cloudera公司。Cloudera产品主要为CDH,Cloudera Manager,Cloudera Support
3)CDH是Cloudera的Hadoop发行版,完全开源,比Apache Hadoop在兼容性,安全性,稳定性上有所增强。Cloudera的标价为每年每个节点10000美元。
4)Cloudera Manager是集群的软件分发及管理监控平台,可以在几个小时内部署好一个Hadoop集群,并对集群的节点及服务进行实时监控。
3.Hortonworks Hadoop
官网地址:https://hortonworks.com/products/data-center/hdp/
下载地址:https://hortonworks.com/downloads/#data-platform
1)2011年成立的Hortonworks是雅虎与硅谷风投公司Benchmark Capital合资组建。
2)公司成立之初就吸纳了大约25名至30名专门研究Hadoop的雅虎工程师,上述工程师均在2005年开始协助雅虎开发Hadoop,贡献了Hadoop80%的代码。
3)Hortonworks的主打产品是Hortonworks Data Platform(HDP),也同样是100%开源的产品,HDP除常见的项目外还包括了Ambari,一款开源的安装和管理系统。
4)2018年Hortonworks目前已经被Cloudera公司收购。
四、Hadoop优势
1) 高可靠性: Hadop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
2) 高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点,支持动态扩展。
3) 高效性:在MapReduce的思想下, Hadop是并行工作的,以加快任务处理速度。
4) 高容错性:能够自动将失败的任务重新分配。
五、Hadoop组成
六、HDFS架构概述
1.HDFS基本概念
HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),它是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集(largedata set)的应用程序。
2.HDFS设计特点
1)大数据文件,非常适合上T级别的大文件或者一堆大数据文件的存储。
2)文件分块存储,HDFS会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多。
3)流式数据访问,一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。
4)廉价硬件,HDFS可以应用在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。
5)硬件故障,HDFS认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。
3.HDFS的master/slave构架
一个HDFS集群是有一个Namenode和一定数目的Datanode组成。Namenode是一个中心服务器,负责管理文件系统的namespace和客户端对文件的访问。Datanode在集群中一般是一个节点一个,负责管理节点上它们附带的存储。在内部,一个文件其实分成一个或多个block,这些block存储在Datanode集合里。Namenode执行文件系统的namespace操作,例如打开、关闭、重命名文件和目录,同时决定block到具体Datanode节点的映射。Datanode在Namenode的指挥下进行block的创建、删除和复制。Namenode和Datanode都是设计成可以跑在普通的廉价的运行linux的机器上。
4.HDFS的关键元素
#1.NameNode (nn) :存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限)以及每个文件的块列表和块所在的DatNode等。 --> 老板
全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数据块的列表。
#2.DataNode (dn): 在本地文件系统存储文件块数据,以及块数据的交验和。
#3.Seconday NameNode(2nn):每隔一段时间对NameNode元数据备份。 --> 秘书:辅助老板工作
#4.block默认大小为128m【hadoop2.0版本以上】,版本以下是 64M
原因:默认传输效率100M/s 寻址时间占传输时间的1% 寻址时间为10
七、YARN架构概述
1.YARN基本概念
Yarn是随着hadoop发展而催生的新框架,全称是Yet Another Resource Negotiator,可以翻译为“另一个资源管理器”。yarn取代了以前hadoop中jobtracker(后面简写JT)的角色,因为以前JT的任务过重,负责任务的调度、跟踪、失败重启等过程,而且只能运行mapreduce作业,不支持其他编程模式,这也限制了JT使用范围,而yarn应运而生,解决了这两个问题。
2.YARN的关键元素
#1.ResourceManager (RM) :整个集群资源(内存、CPU等) 的老大
1)处理客户端请求
2)启动/监控 ApplicationMaster
3)监控 NodeManager
4)资源分配与调度
#2.NodeManager (NM) :单个节点服务器资源老大
1)单个节点上的资源管理和任务管理
2)接收并处理来自 resourceManager 的命令
3)接收并处理来自 ApplicationMaster 的命令
4)管理抽象容器 container
5)定时向 RM 汇报本节点资源使用情况和各个 container 的运行状态
#3.ApplicationMaster (AM) :单个任务运行的老大
1)数据切分
2)为应用程序申请资源
3)任务监控与容错
4)负责协调来自 ResourceManager 的资源,开通监视容器的执行和资源使用
#4.Container: 容器,相当-台独立的服务器,里面封装了任务运行所需要的资源,如内存、CPU、 磁盘、网络等。
1)对任务运行环境的抽象
2)任务运行资源
3)任务启动命令
4)任务运行环境
说明1:客户端可以有多个.
说明2:集群上可以运行多个ApplicationMaster
说明3:每个NodeManager.上可以有多个Container
八、MapReduce架构概述
1.MapReduce基本概念
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。MapReduce将分成两个部分"Map(映射)"和"Reduce(归约)"。
当你向MapReduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。Reduce任务的主要目标就是把前面若干个Map的输出汇总到一起并输出。
2.MapReduce引用原因
1) 海量数据在单机上处理因为硬件资源限制,无法胜任
2) 而一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度
3) 引入 MapReduce 框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将 分布式计算中的复杂性交由框架来处理
3.MapReduce计算过程阶段
MapReduce将计算过程分为两个阶段:Map和Reduce
1)Map阶段并行处理输入数据
2)Reduce阶段对Map结果进行汇总
4.MapReduce工作流程
步骤1:首先对输入数据源进行切片
步骤2:master调度worker执行map任务
步骤3:worker读取输入源片段
步骤4:worker执行map任务,将任务输出保存在本地
步骤5:master调度worker执行reduce任务,reduce worker读取map任务的输出文件
步骤6:执行reduce任务,将任务输出保存到HDFS
九、HDFS、YARN、MapReduce三者关系
十、大数据技术生态体系
1)Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
2)Flume:Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;
3)Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统;
4)Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。
5)Flink:Flink是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多。
6)Oozie:Oozie是一个管理Hadoop作业(job)的工作流程调度管理系统。
7)Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
8)Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
9)ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
十一、Hadoop家族体系
#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化操作和管理。
十二、推荐系统框架图