NameNode
内存
本地磁盘
fsimage
edits
格式化HDFS,目的就是生成fsimage
0->format
1->fsimage
2->start namenode
read fsimage
3->start datanode
注册
block report
-------------------------------------
4->create dir /user/zhangbk/tmp ->write [edits]
5->put files /user/zhangbk/tmp ->write [edits]
6->delete file /user/zhangbk/tmp/test.txt ->write [edits]
第二次启动HDFS
1.namenode
read [fsimage]
read [edits]
gen write fsimage [new]
gen edits [null]
2->start namenode
read fsimage
3->start datanode
注册
block report
SecondaryNameNode
辅助namenode
本地磁盘
fsimage
edits
合并 -> new fsimage
安全模式safemode
等待datanode向它发送block report
datanodes blocks/total blocks = 99.999% 此时安全模式才会退出
操作:
查看文件系统的文件
不能改变文件系统的命名空间
创建文件夹
上传文件
删除文件
手动进入安全模式
bin/hdfs dfsadmin -safemode enter 启动
hdfs dfsadmin -safemode leave 关闭
MapReduce
思想:分而治之
map 对每一部分数据进行处理
reduce 合并所有的结果集
input -> map -> reduce -> output
数据传输的流通格式:<key,value>
map -> shuffle -> reduce
分组group
将相同的key的value合并在一起,放到一个集合中。
<hadoop,1>
-> <hadoop,list(1,1)>
<hadoop,1>
mapreduce运行模式
本地模式
yarn
NameNode 全权的管理数据块的复制
DataNode
心跳
块的报告
一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,
块数据的校验和,以及时间戳。
DataNode会定期向namenode上报块的信息。
Map Reduce数据类型
long -> LongWritable
Int -> IntWritable
String -> Text
排序
<key, value>
依据key比较
过程
step1:input
InputFormat 读取数据,转换成<key,value>
FileInputFormat
TextInputFormat
step2:map
Mapper
map(KEYIN, VALUEIN, KEYOUT, VALUEOUT)
默认情况下KEYIN:LongWritable
VALUEIN:Text
step3:shuffle
process map,output<key,value>
memory
spill,溢写到磁盘,可能有很多文件
分区partition
排序sort
很多小文件,spill
合并,merge
排序
大文件
step4:Reduce