hadoop简介
诞生背景:
Q1.硬盘存储容量快速增长;而访问速度增长缓慢。
A1.并行读取磁盘
Q2.并行读取的问题:高概率硬件故障、数据合并
A2.HDFS(hadoop distributed filesystem)、MapReduce
Hadoop提供了一个共享存储和分析的系统。存储是由HDFS实现,分析由MapReduce实现。
Hadoop子项目:
- MapReduce:分布式数据处理模式和执行环境
- HDFS:分布式文件系统
- Pig
- HBase:分布式、列存储数据库。使用HDFS作为底层存储,支持MapReduce批量数据计算和点查询
- ZooKeeper
- Hive:分布式数据仓库。管理HDFS中存储的数据。提供基于SQL的查询语言
HDFS在MR任务处理过程中提供了文件操作和存储等支持,MR在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成分布式集群的主要任务。
从MR视角来看:
MR框架是由一个单独运行在主节点上的Jobtracker和运行在每个集群从节点上的Tasktracker共同组成,主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上
MapReduce框架:
JobTracker可以运行于集群中的任意一台计算机上。TaskTracker负责执行任务,它必须运行在DataNode上,DataNode既是数据存储节点,也是计算节点。
当一个Job被提交时,JobTracker接受到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。
Tasktracker运行任务的同时,将进度报告送到Jobtracker。Jobtracker记录每个任务的进度情况。
如果TaskTracker出了故障,JobTracker会把任务转交给另一个空闲的TaskTracker重新运行。
MR编程框架
Hadoop上的并行应用程序开发是基于MR编程框架。
MR工作过程包括两个阶段:map阶段、reduce阶段;相应有具体定义的map函数、reduce函数
shuffle过程包括combine和partition
MR编程模型原理:
- 利用一个输入的key-value对集合来产生一个输出的key-value对集合。
- MR库通过Map和Reduce两个函数来实现这个框架。
- 用户自定义的map函数接受一个输入的key-value对,然后产生一个中间的key-value对的集合。MR把所有具有相同的key值的value结合在一起,然后传递个reduce函数。Reduce函数接受key和相关的value结合,reduce函数合并这些value值,形成一个较小的value集合。
分片(split)
为每个分片创建一个map任务,来运行用户自定义的map函数,分析每个分片
许多的分片意味着处理每个分片的时间与处理整个数据的时间相比是微不足道的。但是若过分片过小,管理分片和创建map任务的总时间将会影响这行的总时间
理想的分片大小往往是一个HDFS的大小(默认64MB),减少网络传输的消耗
因此,map的数据输入和执行都在一个节点时,Hadoop的性能最佳
细节
如果某个节点上的map任务在输出给reduce之前失败了,可以再另一个节点上重新运行
reduce的输出一般在HDFS中