一 . Hadoop是什么?
【百度百科】一个分布式系统基础架构,由Apache基金会所开发,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的硬件上;而且它提供高传输率来访问应用程序的数据,适合那些有着超大数据集的应用程序,Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量数据提供了计算。
二 . hadoop能干什么
hadoop擅长日志分析,facebook就用hive来进行日志分析,2009年是facebook就又非编程人员的30%的人使用HiveQL进行数据分析;淘宝搜索中的自定义筛选也使用的Hive;利用pig还可以做高级的数据处理。
三 . hodoop的核心
- HDFS 分布式文件系统 为海量的数据提供了存储
- YARN 资源管理调度系统
- Mapreduce 分布式运算框架 为海量数据提供了计算。
四 . HDFS的架构
主从结构
- 主节点:namenode
- 从节点:有很多个datanode namenode负责:
- 接收用户操作请求
- 维护文件系统的目录结构 管理文件与block之间的关系,block与datanode之间的关系 datanode负责 存储文件
文件被分成block存储在磁盘上 为保证数据安全,文件会有多个副本
五 . Hadoop的特点
- 扩容能力:能可靠的存储和处理千兆字节(PB)数据。
- 成本低: 可以通过普通机器组成的服务器集群来分发以及处理数据,这些服务器集群总计可以达数千个节点。
- 高效率:通过分发数据,hadopp可以在数据所在的节点上并行地处理他们,这使得处理非常的快速。
- 可靠性:hadoop能自动的维护数据的多份副本,并且在任务失败后能自动地重新部署计算任务。
- hadoop是一个专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。
- hadoop的数据来源可以是任何形式,在处理半结构化和非结构化数据上与关系型数据库相比有更好的性能,具有更灵活的处理能力,不管任何数据形式最终会转化为key/value,key/value是基本数据单元。
六 . HDFS文件系统
Hdfs (hadoop分布式文件系统),它是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集的应用程序。
HDFS的设计特点:
- 大数据文件,非常适合上T级别的大文件或者一堆大数据文件的存储。
- 文件分块存储,HDFS会将一个完整的大文件平均分块存储到不同的计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高的多。
- 流式数据访问,一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。
- 廉价硬件,HDFS可以应用在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。
- 硬件故障,HDFS认为所有计算机都有可能出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其他某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。
HDFS的关键元素:
1、Block:将一个文件进行分块,通常是64M。
2、NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一一台主机专门保存,当然这台主机如果出错,NameNode就失效了。在Hadoop2.*开始支持activity-standy模式----如果主NameNode失效,启动备用主机运行NameNode。
3、DataNode:分布在廉价的计算机上,用于存储Block块文件。
HDFS的mater/slave构架:
一个HDFS集群是有一个Namenode和一定数目的Datanode组成。Namenode是一个中心服务器,负责管理文件系统的namespace的客户端对文件的访问。Datanode在集群中一般是一个节点一个,负责管理节点上他们附带的存储。在内部,一个文件其实分成一个或多个block,这些block存储子datanode集合里。Namenode执行文件系统的namespace操作,例如打开、关闭、重命名文件和目录,同时决定block到具体Datanode节点的映射。Datanode在namenode的指挥下进行block的创建和复制。namenode和datanode都是设计成可以跑在普通廉价的运行linux的机器上。
七 . MapReduce
MapResuce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。MapReduce将分成两个部分“Map(映射)”和“Reduce(归约)”
当你向MapResuce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。Resuce任务的主要目标就是把前面的若干个Map的输出汇总到一起并输出。
MapReduce流程图
步骤1:首先对输入数据源进行切片
步骤2:master调度worker执行map任务
步骤3:worker读取输入源片段
步骤4:worker执行map任务,将任务输出保存在本地
步骤5:master调度worker执行reduce任务,reduce worker读取map任务的输出文件
步骤6:执行reduce任务,将任务输出保存到HDFS