大数据的5V特点:体量大,种类多,增长快,密度低,可靠性低
Hadoop
概述:1.0版本HDFS和MR,2.0版本是DHFS、MR、Yarn
HDFS:
主要由一个NameNode和多个DataNode组成,不适合存储大量的小文件
1)NameNode:存储元数据(文件对应的block、block位置、复本位置)在内存和磁盘中各有一份,内存中保证存储效率,磁盘中保证崩溃恢复。记录元数据的文件有2个,edits(记录操作)和fsimage(记录元数据信息)
2)DataNode:存储切分后的文件块信息到磁盘中,默认128M,复本默认3个。通过心跳机制与NameNode保持联系,报告状态。
3)Block:能够存储超大文件,并且可以快速备份。
4)SecondaryNameNode:辅助NameNode进行元数据的合并,触发合并操作条件有,空间(文件达到设置时)和时间(设置时间)两个
合并过程:在nn中edits创建新的edits.new文件 - sn通过http获取edits和fsimage进行合并 - 生成新的fsimage.ckpt (fsimage加载到内存重做edits生成新的fsimage) - 复制一份发送给nn - 重命名为fsimage,同时edits.new重命名为edits
多复本放置策略:
第一个复本:如果是集群内部提交,就在当前DataNode上,如果是客户端提交,NameNode选择比较空闲的DataNode放置
第二个复本:放在与第一个不同机架节点上
第三个复本:放在与第二个相同机架不同节点上。
(以下NN代表NameNode,DN代表DataNode,SN代表SecondaryNode)
读取流程:5步,
1.客户端向nn发送读取RPC请求
2.nn返回请求的元数据(block地址)
3.客户端选择最近的dn读取block
4.继续读取下一个block。
5.读取完成后会通知nn关闭文件
6.客户端读取完当前block后会进行验证,没有读取完成会继续请求地址读取block,如果出错,客户端通知NameNode并同时从副本中读取数据。
写入流程:6步
1.客户端向nn发送写入RPC请求
2.nn检查客户端权限和文件是否存在,
3.客户端将切分好的文件块打成包以队列的形式管理,并向nn申请block地址列表
4.开始以管道形式写入到所有的复本中(写到第一个dn上,dn写到其他dn上)。
5.最后dn返回状态信息,再由第一个dn发送状态信息给客户端。
6.通知NameNode关闭文件
7.如果传送过程中出现故障,执行下一个管道的写入,同时NameNode会分配一个新的DataNode地址重新写入。
HDFS特点:
优点:高容错性、支持大数据量存储,可扩展
缺点:低延迟访问、不支持大量小文件、不支持超强事物
MapperReduce
组成:管理者JobTracker 和工作者TaskTracker ,在2.0中加入Yarn分担了管理者的部分任务
数据本地化策略:为了节省带宽,将两个需要传输的数据任务放在同一台节点上,在mr中将数据切片发给不同的Mapper来执行,MapTask需要去访问DataNode,为了节省带宽使用了数据本地化策略
job的执行流程:
大致流程:客户端向资源管理器通过RPC请求资源申请资源,分配好相应的资源,进行作业的运行,当作业运行完成时,资源管理器回收资源
1.客户端提交mr的jar包给job
2.job与资源管理器通信,然后将jar包写入HDFS中
3.jobTracker进行初始化任务
4.读取HDFS上要处理的文件并切片(只是逻辑切片)
5.TashTrack通过心跳机制领取任务
6.下载所需的jar包和配置文件
7.TaskTracker启动一个子进程执行任务
8.将结果写到HDFS中
shuffle过程:
Mapper的 shuffle
1.当MapTasker接收到文件时,按行读取数据
2.每次都调用map方法将结果输出到缓冲区中。
3.在缓冲区中进行分区、排序、合并等操作
4.当缓冲区容量达到阈值的0.8时,写到溢写文件中。
5.当最后所有都写完后做最后一次合并,如果最后溢写文件大于3会在次进行合并 。
Reduce的shuffle
1.ReduceTack通过Http方式得到输出文件的分区并且将数据进行合并排序
2.将相同的key做聚合、将值放入迭代器中
3.调用Reduce方法,将key和迭代器传入
shuffle调优:
调到map缓冲区,
合并之后进行压缩减少网络传输、
增加Reduce获取数据的线程数