了解大数据
首先,搞清楚hadoop在处理大数据的定位在哪里html
什么是大数据?为何要处理大数据?
数据量大(Volume) 数据类别复杂(Variety) 数据处理速度快(Velocity) 数据真实性高(Veracity) 合起来被称为4V。程序员
处理大数据是为了挖掘数据中的隐含价值网络
如何处理大数据?
集中式计算VS分布式计算架构
集中式计算:经过不断增长处理器的个数来加强耽搁计算机的计算能力,从而提升处理的速度。须要的内存很大,计算的速度很快。app
分布式计算:一组经过网络链接的计算机,造成一个分散的系统。将须要处理的大量数据分散成多个部分,交由系统中的耽搁计算机分别处理,最后将这些计算结果合并获得最终结果。(MapReduce的核心思想)框架
Hadoop是怎么产生的
技术基础
google三驾马车:GFS、MapReduce和BigTable。Hadoop是在google三驾马车基础上的开源实现。分布式
- GFS(Google File System)分布式文件系统,对应Hadoop当中的HDFS。
- MapReduce分布式计算框架,也是Hadoop处理大数据的核心思想。
- BigTable是基于GFS的数据存储系统,对应Hadoop的HBase。
三大分布式计算系统
Hadoop,Spark,Storm是主流的三大分布式计算系统函数
Spark VS Hadoopoop
Hadoop使用硬盘来存储数据,而Spark是将数据存在内存中的,所以Spark何以提供超过Hadoop 100倍的计算速度。内存断电后会丢失,因此Spark不
适用于须要长期保存的数据。大数据
Storm VS Hadoop
Storm在Hadoop基础上提供了实时运算的特性,能够实时处理大数据流。不一样于Hadoop和Spark,Storm不进行数据的搜集和存储工做,直接经过网络接受并实时处理数据,而后直接经过网络实时传回结果。
因此三者适用于的应用场景分别为:
- Hadoop经常使用于离线的复杂的大数据处理
- Spark经常使用于离线的快速的大数据处理
- Storm经常使用于在线实时的大数据处理
Hadoop定义
Hadoop是什么
Hadoop是一个可以对大量数据进行分布式处理的软件框架
Hadoop特色
- 可靠。Hadoop假设计算元素和存储会失败,因此会维护多个工做数据的副本,对失败的节点会从新处理
- 高效。经过并行方式工做,加快处理速度。
- 可伸缩。能够处理PB级的数据。
- 高扩展。能够方便地扩展到数以千计的节点。
- 低成本。Hadoop是开源的,Hadoop节点能够是很便宜的机器。
应用场景
Hadoop适用于:海量数据,离线数据,复杂数据
场景1:数据分析,如海量日志分析,商品推荐,用户行为分析
场景2:离线计算,(异构计算+分布式计算)天文计算
场景3:海量数据存储,如Facebook的存储集群。
更多应用场景
Hadoop原理
HDFS
HDFS(Hadoop File System),是Hadoop的分布式文件存储系统
- 将大文件分解为多个Block,每一个Block保存多个副本。提供容错机制,副本丢失或者宕机时自动恢复。
- 默认每一个Block保存3个副本,64M为1个Block。
- 将Block按照key-value映射到内存当中。
HDFS架构图以下:

NameNode
HDFS使用主从结构,NameNode是Master节点,是领导。全部的客户端的读写请求,都须要首先请求NameNode。
NameNode存储
- fsimage:元数据镜像文件(文件系统的目录树,文件的元数据信息)。元数据信息包括文件的信息,文件对应的block信息(版本信息,类型信息,和checksum),以及每个block所在的DataNode的信息。
- edits:元数据的操做日志
DataNode
DataNode是Slave,负责真正存储全部的block内容,以及数据块的读写操做
NameNode,DataNode,rack只是一些逻辑上的概念。NameNode和DataNode多是一台机器也多是,相邻的一台机器,不少DataNode可能处于同一台机器。rack是逻辑上比DataNode更大的概念,多是一台机器,一台机柜,也多是一个机房。经过使文件的备份更普遍地分布到不一样的rack,DataNode上能够保证数据的可靠性。
HDFS写入数据
- Client拆分文件为64M一块。
- Client向NameNode发送写数据请求。
- NameNode节点,记录block信息。并返回可用的DataNode。
- Client向DataNode发送block1,2,3….;发送过程是以流式写入。流式写入,数据流向为DataNode1->DataNode2->DataNode3(1,2,3为经过规则选出来的可用的DataNode)
- 发送完毕后告知NameNode
- NameNode告知Client发送完成
在写数据的时候:
- 写1T文件,咱们须要3T的存储,3T的网络流量贷款。
- 在执行读或写的过程当中,NameNode和DataNode经过HeartBeat进行保存通讯,肯定DataNode活着。若是发现DataNode死掉了,就将死掉的DataNode上的数据,放到其余节点去。读取时,要读其余节点去。
- 挂掉一个节点,不要紧,还有其余节点能够备份;甚至,挂掉某一个机架,也不要紧;其余机架上,也有备份。
HDFS读取数据
- Client向NameNode发送读请求
- NameNode查看MetaData信息,返回文件的block位置
- 根据必定规则(优先选择附近的数据),按顺序读取block
更多内容
MapReduce
Map是把一组数据一对一的映射为另外的一组数据,其映射的规则由一个map函数来指定。Reduce是对一组数据进行归约,这个归约的规则由一个reduce函数指定。
整个的MapReduce执行过程能够表示为:
(input)<k1, v1> => map => <k2, v2> => combine => <k2, v2’> => reduce => <k3, v3>(output)
也能够表示为流程图:

- 分割:把输入数据分割成不相关的若干键/值对(key1/value1)集合,做为input
- 映射:这些键/值对会由多个map任务来并行地处理。输出一些中间键/值对key2/value2集合
- 排序:MapReduce会对map的输出(key2/value2)按照key2进行排序(便于归并)
- conbine:属于同一个key2的全部value2组合在一块儿做为reduce任务的输入(至关于提早reduce,减少key2的数量,减少reduce的负担)
- Partition:将mapper的输出分配到reducer;(Map的中间结果一般用”hash(key) mod R”这个结果做为标准)
- 规约:由reduce任务计算出最终结果并输出key3/value3。
程序员须要作的
- 单机程序须要处理数据读取和写入、数据处理
- Hadoop程序须要实现map和reduce函数
- map和reduce之间的数据传输、排序,容错处理等由Hadoop MapReduce和HDFS自动完成。