大数据处理系统学习笔记(二)之Hadoop

这次总结一下hadoop的相关知识点,主要参考了以下三个链接

第三章:Hadoop的一些基本概念

分布式计算框架Hadoop原理及架构全解

Hadoop基本原理

和维基页面Apache_HadoopMapReduce


现在常见的有三大分布式计算系统:Hadoop,Spark和Storm。前两个由Apache开发,后一个由Twitter开发。Hadoop使用硬盘存储数据,数据持久性强但是受硬盘读写速度影响数据处理速度受限,适合离线处理复杂度高的数据;Spark使用内存处理数据,处理速度快断电后易丢失,适合于在线快速处理数据;Storm通过网络实时处理并传回数据,每秒可处理的请求要高出Spark几个数量级,适合实时处理大数据流。


Hadoop是一个开源的并行计算框架与分布式文件系统,由Apache软件基金会所开发。Hadoop的核心部分由Hadoop Common,HDFS和MapReduce组成。

Hadoop Common package提供了文件系统和操作系统级别的抽象,为启动Hadoop做准备。

HDFS

HDFS的全称是Hadoop Distributed File System,是一个分布式的,高扩展的,可移植的文件系统,以Java写成,并提供了shell commands和Java API,通常被用来在多台机器上存储GB到TB级甚至PB级的海量数据,并通过在多台机器上冗余备份数据来保证reliability。Hadoop适用于海量数据,离线数据和复杂数据,并适用于离线计算。而且并行计算可大大加快数据处理速度。

HDFS以block为单位分割存储大型文件,一个block大小默认为64MB(不足64MB按照64MB存储),可更改,一个block会默认保存3个备份(replica),备份丢失或宕机时自动恢复,block按照key-value映射到内存中。block的大小和备份数量在上传到client时可以设置,文件上传成功后备份数量可更改,block大小不可更改。

大数据处理系统学习笔记(二)之Hadoop

HDFS架构示意图


HDFS采用master/salve架构,一个Hadoop集群包含一个NameNode(master)和多个DataNode(slave)。NameNode守护进程主要负责管理文件系统的命名空间和客户端对文件的访问,并保存文件系统的具体信息包括文件信息、文件被分割成具体block块的信息、以及每一个block块归属的DataNode的信息。client的请求需先经过NameNode。NameNode的数据有fsimage(文件系统的信息等元数据镜像文件)和edits(元数据操作日志)。元数据包括文件名,inode数、数据块位置等,存储在NameNode上,而数据则是文件的实际内容,存储在DataNode上。NameNode维护一张block列表和一张DataNode列表。

DataNode守护进程在一个集群中存在多个,通常一个物理节点有一个DataNode,管理节点上的存储,将存储划分为多个block块,管理block块信息,同时周期性的将其所有的block块信息发送给NameNode。NameNode会告诉Client应该去哪个DataNode寻找数据,Client直接与那个DataNode进行通信来取用数据。同时DataNode与其他DataNode通信来完成数据block的冗余备份。

NameNode指导DataNode执行底层的IO任务,由于NameNode工作量大,所以不会兼任DataNode功能和执行MapReduce计算,唯一风险就是NameNode宕机后整个集群会失效。

Secondary NameNode是一个监测HDFS集群状态的辅助守护进程,它通常独占一台服务器,该服务器不会运行其他DataNode或者TaskTracker守护进程,不接收或者记录HDFS的任何实时变化 只与NameNode通信,感觉集群所配置的时间间隔获取HDFS元数据的快照。SNN的快照有助于减少停机时间,降低数据丢失风险。NameNode失效后使用SNN作为主要的NameNode手动配置集群。

HDFS写过程:Client向NameNode发起文件写请求;NameNode返回给Client一些可写入的DataNode的信息,让Client直接联系相应的DataNode进行写操作,并记录使用的DataNode和文件的元数据;Client将文件按照block分割并发送给各个DataNode请求保存;DataNode保存完毕后通知Client。文件一致性是在写操作时完成。

HDFS读过程:Client询问NameNode在哪里找文件;NameNode返回给Client存有文件的DataNode的IP和数据块的ID;Client检查数据块ID并联系相应的DataNode读数据;DataNode返回数据给Client并在数据读取结束后关闭通信。Client组合读到的数据块组成原始文件。

HDFS的文件默认规则是一次写多次读,任何时候只有一个writer的存在。

HDFS有三类典型错误:DataNode节点失败,网络故障和数据损坏。

节点监测:正常运行时DataNode会周期性发送心跳数据和blockreport给NameNode,若NameNode在一定时间内未收到该DataNode的信息则会认为这个DataNode已崩溃并从集群中移除该DataNode并启动进程恢复数据。通常NameNode会检查备份数量,若数量低于要求则主动创建必需的备份。备份文件存放策略是rack-aware:With the default replication value, 3 data is stored on three nodes: two on the same rack, and one on a different rack。HDFS会优先读取最近的备份,为了降低带宽消耗和读取延迟。

写容错:写操作时有DataNode未回复确认则调整策略跳过该失败DataNode。读容错:选择其他DataNode数据读取。

安全模式:系统启动进入安全模式后不允许修改和删除操作,直到模式结束。该模式为了启动检查各个DataNode上数据块的安全性。

MapReduce

MapReduce是一个编程模型,为了在一个集群上使用并行的,分布式的算法处理和生成大规模数据。由map和reduce两个步骤组成。Map阶段执行filtering和sorting(比如按照名将学生分组),Reduce阶段执行summary(统计每一组有多少学生)。可以同时并行处理多个task,管理系统不同部分的通信和数据传输,提供了冗余和容错性。MapReduce可以发生在file system(非结构化)里和database(结构化)里。

大数据处理系统学习笔记(二)之Hadoop

MapReduce流程

MapReduce由三个操作构成:map:每个worker node使用map函数对local data进行操作,并写到temporary storage,master node确保每次只处理一个备份;shuffle:worker node按照output keys重新分布数据,保证一个worker node上只处理同一个key的数据;reduce:worker node并行处理按照每个key每一组的output data。

Job Tracker和Task Tracker是MapReduce中的进程。

Job Tracker是应用程序和Hadoop之间的守护进程,提交代码到集群上后Job Tracker会确定执行计划,决定处理哪些文件,为不同任务分配不同节点并监控任务运行,支持失败后自动重启,重启次数预先定义。一个集群只有一个Job Tracker,运行在集群的主节点上。Job Tracker一般部署在NameNode上。

Task Tracker管理任务在每个节点上的运行情况,并定期与Job Tracker不断通信,如果Job Tracker在一定时间内未收到Task Tracker发出的心跳,则认为这个Task Tracker已崩溃,将任务提交给另一个节点。Task Tracker一般部署在DataNode上。

大数据处理系统学习笔记(二)之Hadoop

Hadoop处理流程

到2014年,Google不再使用MapReduce作为首选的大数据处理模型,Apache Mahout的发展变得more capable and less disk-oriented mechanisms that incorporated full map and reduce capabilities。