本文共 1540 字,大约阅读时间需要 5 分钟。
Hadoop是什么
狭义hadoop是一个分布式大数据处理框架,包含组件hdfs、mapreduce、yarn
广义是一个生态系统,包括storm实时计算框架、flume数据采集、hive数据仓库工具、hbase非关系型数据库、zookeeper分布式协调服务、kafka消息队列等
主要解决,海量数据的存储和海量数据的计算问题
Hadoop优势
高可靠性:它维护多个工作数据副本,在出现故障时可以对失败的节点重新分布处理
高效性:在MapReduce思想下,Hadoop是并行工作的,以加快任务处理速度
高扩展性:在集群间分配任务数据,可方便扩展数以千计的节点
Hadoop组成
1)HDFS:分布式文件系统。
2)MapReduce:分布式离线并行计算框架
3)YARN:作业调度与集群资源管理框架
Mapreduce核心功能
将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上
Mapreduce优点
高容错:在出现故障时可对失败的节点重新分布处理,比如一台机器宕机,它可以把计算任务转移到另外一个节点运行
高扩展性:可通过增加机器来扩展计算能力
易于编程:简单的实现一些接口,就可以完成一个分布式程序
Mapreduce缺点
不擅长实时计算(无法像mysql一样,毫秒级返回结果)
不擅长流式计算(流式计算输入数据是动态的,而MapReduce输入数据是静态)
不擅长DAG(有向图)计算(先写到磁盘,再读取,大量磁盘IO)
Mapreduce三类实例进程
Maptask:map阶段流程处理
Reducetask:reduce阶段流程处理
MrAppMaster:负责调度
MapReduce编程规范
1、Mapper阶段
自定义mapper继承mapper类,输入输都是kv格式,业务逻辑写在map方法中,maptask对每一个<k,v>调用一次map
2、Reduce阶段
自定义reduce继承reduce类,输入是map的输出kv类型,业务逻辑在reduce方法中,reducetask对每一个k调用一次reduce
3、Driver阶段
相当于yarn的客户端,关联map reduce,提交的是封装mapper reduce 的job对象到集群
什么是序列化,反序列化
序列化就是把内存中的对象,转换成字节序列以便于存储
反序列化就是将收到字节序列,转换成内存中的对象
为什么不使用serialable接口?
Java序列化是一个重量级序列化框架(Serializable),对象被序列化后,会附带很多额外的信息(校验信息,header,继
承体系等),不便于在网络中高效传输
Writeable特点
紧凑:紧凑的格式能充分利用网络带宽
快速:减少了序列化和反序列化的性能开销
常用的数据类型对应的hadoop数据序列化类型
Mapreduce中的shuffle过程
1)Map方法之后Reduce方法之前这段处理过程叫Shuffle
2)map()方法输出的kv对,放到环形缓冲区;环形缓冲区默认大小100m,环形缓冲区达到80%时,进行溢写;溢写前对数据进行排序,排序按照对key的索引进行字典顺序排序(快排);溢写产生大量溢写文件,需要对溢写文件进行归并排序;对溢写的文件也可以进行Combiner操作,前提是汇总操作,求平均值不行。最后将文件按照分区存储到磁盘,等待Reduce端拉取。
3)每个Reduce拉取Map端对应分区的数据。拉取数据后先存储到内存中,内存不够了,再存储到磁盘。拉取完所有数据后,采用归并排序将内存和磁盘中的数据都进行排序。在进入Reduce方法前,可以对数据进行分组操作
转载地址:http://ysazi.baihongyu.com/