hdfs介绍
hdfs如何存储数据?
首先有一个namenode,连着多个datanode。假设默认一个datanode大小为500G.当一个客户端不停的传输数据,如果分布式系统的磁盘空间被占满了,hdfs会横向扩展datanode节点。
如果上传的文件是1T,会怎么样?
当上传一个1T文件的时候,hdfs系统会讲当前文件按照BLOCK块进行切割并存储,默认blocksize为128M。
如果某个块丢失,怎么办?
每个块都会在其他个节点存有副本,默认dfs.repelication = 3.有两个副本。
用到最多的类为:hdfs.DistrbutedFileSystem
hdfs很多情况下是由众多廉价机组成的。
适合处理大数据。
适合分析数据,不适于修改数据。上传、下载
hdfs架构

心跳机制
datanode:该节点定时给namenode做心跳汇报,汇报自己还活着,默认每3秒汇报一次。
hdfs文件副本和块存储
元数据管理
namenode是管理元数据的,
fsimage是最终存储元数据的,保存全部的元数据信息
editslog:用于记录当前操作的日志,最新的一条记录会记录到edits.

1.发起通知:发起元数据合并的通知(checkpoint检查点)
2.namenode接收到通知后,生成一个新的edits临时文件,用于接收client的元数据写入
3.以http协议发送到2nn,进行元数据合并
4.元数据合并
5.将最终的合并元数据文件发送给namenode
6.生成edits.new临时文件改名为edits.
元数据合并的触发条件:1、每隔一个小时 2、数据达到100万条。
hdfs的读写流程
写入:

读取:

要从HDFS中删除文件夹,可以使用以下命令:
hadoop fs -rm -r -skipTrash /folder_name
hdfs集群刚启动,前30s默认是处于安全期的。
hdfs的高级使用命令使用hdfs不能使用hadoop
hdfs API操作
cdh版本
maven库
https://www.cloudera.com/documentation/enterprise/release-notes/topics/cdh_vd_cdh5_maven_repo.html
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
添加依赖
https://www.cloudera.com/documentation/enterprise/release-notes/topics/cdh_vd_cdh5_maven_repo_514x.html
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.0-mr1-cdh5.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0-cdh5.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.6.0-cdh5.14.0</version>
</dependency>
hdfs api开发中 winutils问题解决
1、将解压缩出来的hadoop工程复制到一个没有中文、空格的路径中。
2、在windows中配置环境变量 HADOOP_HOME 和 Path
3、将hadoop.dll复制到System32中
4、重启电脑
440

被折叠的 条评论
为什么被折叠?



