hadoop介绍(一)
1、hadoop介绍[*] hadoop是一个开源分布式计算平台框架基于apache协议发布由java语言开发。官网地址http://hadoop.apache.org/
[*] hadoop两大核心组件HDFS分布式文件系统为分布式计算提供了数据存储和mapreduce应用程序被分区成许多小部分而每个部分都能在集群中的任意节点上运行一句话就是任务的分解和结果的汇总
[*] 其他两个模块Common、YARN
[*] 和hadoop相关的项目Ambari、Avro、Cassandra、Chukwa、Hbase、Hive、Mahout、Pig、Spark、Tez、Zookeeper
2、hadoop应用
hadoop支持由廉价的计算机搭建集群有强大的冗余机制。
hadoop在各大互联网企业中应用广泛百度使用hadoop进行搜索日志的分析和网页数据的挖掘工作淘宝使用hadoop存储并处理电子商务交易相关数据facebook使用hadoop进行数据分析和机器学习。
还有哪些企业在使用hadoop http://wiki.apache.org/hadoop/PoweredBy
3、hadoop组件介绍
[*] Common为其他组件提供常用工具支持。
[*] YARN作业调度和集群管理的框架。
[*] Ambari: 是 Apache Software Foundation 中的一个项目。就 Ambari 的作用来说就是创建、管理、监视 Hadoop 的集群但是这里的 Hadoop 是广义指的是 Hadoop 整个生态圈例如 HiveHbaseSqoopZookeeper 等。用一句话来说Ambari 就是为了让 Hadoop 以及相关的大数据软件更容易使用的一个工具。http://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/index.html
[*] AvroAvro是Hadoop中的一个子项目也是Apache中一个独立的项目Avro是一个基于二进制数据传输高性能的中间件。在Hadoop的其他项目中例如HBase(Ref)和Hive(Ref)的Client端与服务端的数据传输也采用了这个工具。Avro是一个数据序列化的系统。Avro 可以将数据结构或对象转化成便于存储或传输的格式。Avro设计之初就用来支持数据密集型应用适合于远程或本地大规模数据的存储和交换。http://www.open-open.com/lib/view/open1369363962228.html
[*] Cassandra可扩展的多主数据库不存在单点故障。
[*] Chukwa是数据收集系统用于监控和分析大型分布式系统的数据。
[*] HBase是一个分布式面向列的数据库。
[*] Hive最早由facebook设计是建立在hadoop基础之上的数据仓库它提供了一些用于数据整理、特殊查询和分析在hadoop文件中数据集工具。
[*] Mahout可扩展的机器学习和数据挖掘库。
[*] Pig是一种高级语言和并行计算可执行框架它是一个对大型数据集分析和评估的平台。
[*] Spark一个快速和通用计算的Hadoop数据引擎。和mapreduce类似但是要比mapreduce快。它提供了一个简单而丰富的编程模型支持多种应用包括ETL、机器学习、数据流处理、图形计算。 参考文档http://www.techweb.com.cn/network/system/2016-01-25/2267414.shtml
[*] Tez是Apache最新的支持DAG作业的开源计算框架它可以将多个有依赖的作业转换为一个作业从而大幅提升DAG作业的性能。Tez并不直接面向最终用户事实上它允许开发者为最终用户构建性能更快、扩展性更好的应用程序。Hadoop传统上是一个大量数据批处理平台。但是有很多用例需要近乎实时的查询处理性能。还有一些工作则不太适合MapReduce例如机器学习。Tez的目的就是帮助Hadoop处理这些用例场景。
[*] ZooKeeperZooKeeper是一组工具用来配置和支持分布式调度。一个重要功能就是对所有节点进行配置的同步。它能处理分布式应用的“部分失败”问题。部分失败是分布式处理系统的固有特征即发送者无法知道接收者是否收到消息它的出现可能和网络传输问题、接收进程意外死掉等有关系。ZooKeeper是Hadoop生态系统的一部分但又远不止如此它能支持更多类似的分布式平台和系统如JubatusCassender等等。而且HBase明确指出至少需要一个ZooKeeper实例的支持。
4、HDFS概述
HDFS设计思想来源于Google的GFS是GFS的开源实现。
HDFS要解决的问题
(1) 存储超大文件比如TB级别(2) 防止文件丢失
HDFS的特点
(1) 可以存储超大文件
(2) 只允许对一个已经打开的文件顺序写入还可以在现有文件的末尾追加。要想修改一个文件追加内容除外只能删除后再重写
(3) 可以使用廉价的硬件平台搭建通过容错策略来保证数据的高可用默认存储3份数据任何一份丢失可以自动恢复
HDFS的缺点
(1) 数据访问延迟比较高因为它的设计场景是用于大吞吐量数据HDFS是单master所有文件都要经过它当请求数据量很大时延迟就增加了
(2)文件数受限和NameNode有关系
(3) 不支持多用户写入也不支持文件任意修改
5、HDFS核心概念
HDFS的几个概念
[*] 数据块:block大文件会被分割成多个block进行存储block大小默认为64MB。每一个block会在多个datanode上存储多份副本默认是3份。
[*] namenodenamenode:负责管理文件目录、文件和block的对应关系以及block和datanode的对应关系。
[*] SecondaryNameNode:分担namenode的工作量是NameNode的冷备份它的主要工作是合并fsimage元数据镜像文件和fsedits元数据操作日志然后再发给namenode。
[*] datanodedatanode:就负责存储了当然大部分容错机制都是在datanode上实现的。
[*] rack 是指机柜的意思一个block的三个副本通常会保存到两个或者两个以上的机柜中当然是机柜中的服务器这样做的目的是做防灾容错因为发生一个机柜掉电或者一个机柜的交换机挂了的概率还是蛮高的。
6、HDFS工作流程
[*] HDFS写流程
HDFS写文件流程:
[*] Client向远程的Namenode发起RPC请求;
[*] Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常
[*] 当客户端开始写入文件的时候,会将文件切分成多个packets,并向Namenode申请blocks,获取用来存储replicas的合适的datanodes列表,列表的大小根据在Namenode中对replication的设置而定。
[*] 此时会形成一个pipline用来传输packet。
[*] packet以流的方式写入第一个datanode,该datanode把packet存储之后,再将其传递给下一个datanode,直到最后一个datanode。
[*] 最后一个datanode成功存储之后会返回一个ack传递至客户端,在客户端,客户端确认ack后继续写入下一个packet。
[*] 如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持replicas设定的数量。
HDFS读流程
HDFS读文件流程
[*] Client向远程的Namenode发起RPC请求
[*] Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的DataNode地址
[*] Client会选取离自己最接近的DataNode来读取block
[*] 读取完当前block的数据后,关闭与当前的DataNode连接,并为读取下一个block寻找最佳的DataNode
[*] 当读完列表的block后,且文件读取还没有结束,client会继续向Namenode获取下一批的block列表
[*] 读取完block会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读
7、MapReduce模型
[*] MapReduce 是大规模数据(TB 级)计算的利器,Map 和Reduce 是它的主要思想,来源于函数式编程语言。
[*] Map负责将数据打散,Reduce负责对数据进行聚集,用户只需要实现map 和reduce 两个接口,即可完成TB级数据的计算。
[*] 常见的应用包括:日志分析和数据挖掘等数据分析应用。另外,还可用于科学数据计算,如圆周率PI 的计算等。
[*] 当我们提交一个计算作业时,MapReduce会首先把计算作业拆分成若干个Map 任务,然后分配到不同的节点上去执行,每一个Map 任务处理输入数据中的一部分,当Map 任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce 任务的输入数据。Reduce 任务的主要目标就是把前面若干个Map 的输出汇总到一起并输出
MapReduce 执行过程
Mapper任务的执行过程
每个 Mapper任务是一个 java 进程,它会读取 HDFS中的文件,解析成很多的键值对,经过我们map方法处理后,转换为很多的键值对再输出;把 Mapper任务的运行过程分为六个阶段。
[*] 第一阶段是把输入文件按照一定的标准分片(InputSplit),每个输入片的大小是固定的。
[*] 第二阶段是对输入片中的记录按照一定的规则解析成键值对。
[*] 第三阶段是调用 Mapper类中的 map 方法。
[*] l第四阶段是按照一定的规则对第三阶段输出的键值对进行分区。
[*] 第五阶段是对每个分区中的键值对进行排序。
[*] 第六阶段是对数据进行归纳处理,也就是 reduce处理。键相等的键值对会调用一次reduce方法。
Reducer任务的执行过程
每个 Reducer 任务是一个 java 进程。Reducer 任务接收 Mapper任务的输出,归约处理后写入到 HDFS中。可以分为3个阶段
[*] 第一阶段是 Reducer 任务会主动从 Mapper任务复制其输出的键值对。 Mapper任务可能会有很多,因此 Reducer会复制多个Mapper的输出。
[*] 第二阶段是把复制到 Reducer本地数据,全部进行合并,即把分散的数据合并成一个大的数据。再对合并后的数据排序。
[*] 第三阶段是对排序后的键值对调用reduce方法。键相等的键值对调用一次 reduce方法,每次调用会产生零个或者多个键值对。最后把这些输出的键值对写入到HDFS文件中
讨债公司
蓝月传奇辅助
蓝月辅助 强烈支持楼主ing……
页:
[1]