大数据
Hadoop
hadoop:包含分布式文件系统和分布式计算的一个框架。 HDFS,mapreduce
hadoop项目模块包括4部分:
Hadoop Common --工具类
Hadoop Distributed System(HDFS) --分布式文件系统
Hadoop YARN --分布式资源管理
Hadoop MapReduce --分布式计算框架
Hadoop-HDFS
存储模型:字节
文件线性切割成块Block 偏移量offset:块的第一个字节面向原文件的下标,eg:第一个块的偏移量是0
架构模型:主从
文件数据分为 元数据MetaData 和 文件数据
(主)NameNode字节保存文件元数据:单节点 posix
生成目录树,不同于ls
(从)DataNode字节保存文件Block数据:多节点
客户端HdfsClient先找主再找从
NN
数据元数据
基于内存存储 快 不会和磁盘发生交换,但要持久化
NameNode的metadate信息在启动后会加载到内存
metadata存储到磁盘文件名为“fsimage”
edits记录对metadata的操作日志。。。redis
持久化的2种方式:快照 fsimage–需要大量IO 写日志文件 edits log-只记录用户操作
注意:都不保存位置信息,以免客户端找到主,从没有启动,进而没有文件陷入等待
NameNode主要功能:
接受客户端的读写服务
收集DataNode汇报的Block列表信息
–NameNode保存metadata信息包括
•文件owership和permissions •文件大小,时间
Block块 不可调整大小,不支持修改文件
block列表:block偏移量(稳定值) 不含位置信息
DN
本地磁盘目录存储数据(Block),文件形式
DN还有个Block块(md5)存储元数据信息,用户取出数据时外界算法对比md5以此鉴别数据完整性
Block每副本位置由DataNode上报 副本 同等级 含义类克隆
副本放置策略/机架策略:
第一个副本和第二个副本不在同一个机架上,第三个副本放置在和第二个副本相同机架节点
NN&DN
启动DN时会向NN汇报block信息
DN向NN发送心跳保持与其联系3s/次 10min lost 此时需要copy其上的block到其他DN
安全模式
SNN
不是NN的备份(但可以做备份),它的主要工作是帮助NN合并edits log,减少NN启动时间。
SNN执行合并时机
•根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒
•根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB
HDFS优点
–高容错性
•数据自动保存多个副本 • 副本丢失后,自动恢复
–适合批处理
•移动计算而非数据 •数据位置暴露给计算框架(Block偏移量)
–适合大数据处理
•GB 、TB 、甚至PB 级数据 •百万规模以上的文件数 •10K+ 节点
–可构建在廉价机器上
•通过多副本提高可靠性 •提供了容错和恢复 机制
HDFS缺点
–低延迟数据访问
•比如毫秒级 •低延迟与高吞吐率
–小文件存取
•占用NameNode 大量内存 •寻道时间超过读取时间
–并发写入、文件随机修改
•一个文件只能有一个写者 •仅支持append
写流程
注意:
将大文件分成小包并(管道/同时)分给每个DN上的块
由心跳汇报情况给NN,若DN坏1,2个则NN自动发布命令采用新的DN写入
读流程
注意:
距离优先(离客户端近的先读取,在本地的读本地)NN会返回给客户端距离列表,近的先读,读完客户端进行存储,再读下一个DN
读取时可以读取任意块的能力,可以在某块上进行计算数据,因此HDFS很好的支撑了计算层的本地化读取
使用Shell命令执行Hadoop自带的WordCount
首先切换到/data目录下,使用vim编辑一个data.txt文件,内容为(hello world hello hadoop hello ipieuvre)
cd /data
vim data.txt
在HDFS的根下创建in目录,并将/data下的data.txt文件上传到HDFS中的in目录
hadoop fs -put /data/data.txt /in
执行hadoop jar命令,在hadoop的/apps/hadoop/share/hadoop/mapreduce路径下存在hadoop-mapreduce-examples-2.6.0-cdh5.4.5.jar包,我们执行其中的worldcount类,数据来源为HDFS的/in目录,数据输出到HDFS的/out目录
hadoop jar /apps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.4.5.jar wordcount /in /out
查看HDFS中的/out目录
hadoop fs -ls /out
hadoop fs -cat /out/*