Hadoop的核心是HDFS和MapReduce.
HDFS是解决海量大数据文件存储问题
是目前应用最广泛的分布式文件系统
目录
HDFS的演变
HDFS基本概念
特点:
HDFS架构和原理
HDFS存储架构
hdfs文件读写原理
HDFS写数据流程
hdfs读数据原理
读数据流程
HDFS的shell操作
HDFS的api操作
HDFS的演变
从谷歌的GFS演变而来。
解决单点故障问题:党存储数据块的服务器中突然有一台及其宕机,我们就无法正常的获取文件,这个问题称为单点故障问题。针对这个问题,可以采用备份机制解决。
NameNode记录着文件有多少个block,每个block存储在那个服务器上,以及它们的副本数为多少
DataNode负责存储block数据块。
HDFS基本概念
hdfs基本框架 Namenode DatanodeBlock数据块(文件切片),逻辑上的概念,默认128MB大小。
机架
存储Block要存在同一个机架上的不同主机。机架感知
元数据:
特点: 优点:高容错 流式数据访问 支持超大文件 高数据吞吐量
缺点:高延迟,
不适合小文件存取,
不适合并发写入
ps:小文件,元数据信息也是一样存。一样占用那么多空间………………会浪费空间啥的
HDFS架构和原理
集群正常运行时,元数据存在在namenode内存中。 为了防止namenode挂掉后数据丢失,会对元数据进行持久化处理,保存到磁盘上!!
元数据信息:大约占150个字节左右。可以说namenode内存大小决定整个集群的规模. namenode管理元数据时,隔一段时间会将元数据持久化处理,保存在内存上。
元数据持久化的文件:fsimage edits SecondaryNamedode管理这两个文件。 SecondaryNamenode辅助Namenode进行元数据的管理。
HDFS存储架构
当在HDFS存一个文件时,会存储元数据信息,占一条元数据信息。大概每个元数据信息在150个字节左右。当上传越来越多,,越来越占用namenode内存。从另一方面来说,namenode大小其实决定了整个集群的规模。
datanode,具体存放真实数据,隔一段时间会向namenode发送心跳包,告诉namenode,自己有效,是可用的。若某一台没有发送心跳包,就会确诊为宕机,block随之丢失。
namenode会对block的副本检查,完整性检查。
………………还有啥机架感知的。
hdfs文件读写原理
HDFS写数据流程
第一步:发出RPC请求,请求上传文件。(RPC:远程过程调用)
第二步: Namenode 检查元数据文件的目录树 eg:1.txt 如果存在,不能上传,不存在可以上传
第三步:告诉客户端,可以上传
第四步:请求上传第一个block
第五步:寻找多个可用的datanode.检查datanode的信息池(每个datanode存储量啊,是否可用啊)
第六步:namenode返回可用的dn列表 DataNode_01 DataNode_02 DataNode_03
第七步: 客户端和datanode之间建立管道(pipeline) datanode和datanode之间也会建立管道
第八步:返回管道建立完毕的信息。
第九步:客户端和datano建立数据流~~~ 开始发送数据!!!
第十步:以package为单位发送数据。默认64k大小
第十一步:ACK确认信息 ,告诉pacakage收到了。发一个pacakage给一个ACK应答
第十二步:通知客户端block发送完毕。告诉客户端,可以发送下一个block了
hdfs读数据原理
读数据流程
第一步:客户端发送RPC请求,获取被读取文件block数据块所在位置。
第二步:namenode返回dn地址列表
第三步:会挑选。与dn建立数据传输流,读取block
第四步:客户端将读取的block合并成一个完整的文件
HDFS的shell操作
图形界面的shell
命令行式shell
HDFS shell- hadoop fs :既可以操作hdfs,也可以操作任何文件系统fs.hadoop dfs :主要针对HDFShdfs fds :专门操作hdfs
- text 将源文件输出为文本格式
更多命令使用详情可登录Hadoop官方文档进行查阅:
文件系统各种shell命令Hadoop官方文档
ls
mkdir命令
-p递归创建
查看
put命令
多了个install.log文件
案例:
ps:当时老师教的时候,做了上传日志的案例,但不是自动采集
步骤:
这些环境变量有的再配一次是为了保证环境变量绝对可靠。
vi upload2HDFS.sh 创建脚本文件
upload2HDFS.sh 里面内容:
vi upload2HDFS.sh
0 0 * * * /shell/upload2HDFS
全部写进 upload2HDFS.sh
HDFS的api操作
HDFS的api操作简述:Windows配置 hadoop运行环境
hadoop.dll: hadoop 动态链接库
第一步:
第二步:
第三步:
第四步:关闭Windows重启
HDFS Java API 介绍
下篇文章再记录 HDFS的Java API 操作案例了~~~



