一、 Hadoop的起源及发展史
Doug Cutting的全文检索引擎的架构Lucene, 在海量数据的处理上遇到了和google一样的难题.
Google公开了GFS和Mapreduce思想
Doug Cutting等人用了2年业余时间实现了HDFS 和Mapreduce机制
Goolge Hadoop
文件系统 GFS -> HDFS
计算 MapReduce -> Mapreduce
大表格 BigTable -> HBase
Doug Coutting: Hadoop之父
二、 hadoop的模块:
公共模块:
HDFS:
namenode
datanode
secondarynamenode
Yarn:
resourcemanger
nodemanager
application master
container
Hadoop主要组成:分布式文件系统HDFS和MapReduce计算模型
HDFS:
NameNode:元数据的管理(元数据:文件名,大小,副本数,各个副本在节点的位置…)
DataNode:用于具体数据的保存。
SecordayNamenode:元数据的同步。
Client:负责数据的请求(上传,读,写。。。)
Yearn:
Resourcemanager:全局任务的调度和资源的管理(Cpu,内存)
nodemanager: 所在节点的管理
Client:发起任务的请求
application master:负责管理某个任务,为应用申请资源,并分配内部任务的监控和容错
container:对环境的抽象,封装了CPU,内存等等多维资源。
三、 namenode启动过程
元数据的同步?
NameNode的元数据信息先往edits文件中写,当edits文件达到一定的阈值(3600秒或大小到64M)的时候,会开启合并的流程。
合并流程
1.当开始合并的时候,
SecondaryNameNode会把edits和fsimage拷贝到所在服务器所在内存中,
合并生成名为fsimage.ckpt的文件。
2.将fsimage.ckpt文件拷贝到NameNode上,
删除原有的fsimage,
并将fsimage.ckpt重命名为fsimage。
3.当SecondaryNameNode将edits和fsimage拷贝走之后,
NameNode会立刻生成一个edits.new文件,用于记录新来的元数据,
当合并完成之后,原有的edits文件才会被删除,
并将edits.new文件重命名为edits文件,
开启下一轮流程
4. 配置hdfs-site.xml=
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
<description>The number of seconds between two periodic checkpoints.</description>
</property>
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
</property>
四、 HDFS特点
优点:
1. 处理超大文件
这里的超大文件通常是指百MB、数百TB大小的文件。
目前在实际应用中,HDFS已经能用来存储管理PB级的数据了。
2. 流式的访问数据
HDFS的设计建立在更多地响应"一次写入、多次读取"任务的基础上。
在多数情况下,分析任务都会涉及数据集中的大部分数据.
请求读取整个数据集要比读取一条记录更加高效。
3. 运行于廉价的商用机器集群上
Hadoop设计对硬件需求比较低,而无需昂贵的高可用性机器上。
廉价的商用机故障情况的概率较高。
设计HDFS时要充分考虑数据的可靠性,安全性及高可用性。
缺点:
1. 不适合低延迟数据访问
2. 适合存储大数据集,存储大文件利用更高
HDFS的设计目标是流式访问大数据集
因为Namenode把文件系统的元数据放置在内存中,
所以文件系统所能容纳的文件数目是由Namenode的内存大小来决定。
一般来说,每一个文件、文件夹和Block需要占据150字节左右的空间,
存储大文件利用更高.
3. 不支持随机的修改操作