HDFS的上传流程以及windows-idea操作文件上传的注意

HDFS上传流程 命令:hdfs dfs -put xxx.wmv /hdfs的文件夹

image



cd进入到要上传文件的当前目录,再输入hdfs命令上传,注意-put后tab可以自动补全, 最后加上你要上传到hdfs的NN文件路径,/表示根目录。

image

步骤1:

client接受到Linux操作命令,要求上传文件到hdfs的存储空间中,将关于文件的元数据信息发送到NameNode.

步骤2:

NN对上传文件进行校验,文件夹是否存在等;计算出需要分为几个block块存储,分别几个副本因子,存储到哪几个服务器.

计算出要上传的文件需要几个block,以及对应几个副本
block0 128M [dn11,dn12,dn13]
block1 128M [dn11,dn12,dn13]
block2 44M [dn11,dn12,dn13]

步骤3:

将计算结果返回给客户端(操作发送文件的Linux系统),需要分块的切block块,不需要的直接发送数据给DataNode(DN可能有多个,按照实现规定好的放在哪个datanode下,从头到尾依次拷贝,拷贝好的数据块会应答发送的数据块)

image

副本存放机制—机架感知(rack-aware):
考虑要素:

HDFS集群的DN有很多台节点。

节点内部的网络数据传输, 速度最快.

机架内可以安装多台服务器, 节点之间网络带宽, 由于机架之间的网络带宽.

机架感知-副本存放策略(hadoop2.7.6以前)--旧版本

第一个block副本放在客户端所在的服务器的datanode中。

第二个block副本放置在本机架内的其它数据节点datanode上

第三个block副本放置在不同机架的随机某个节点上。(防止某个机架数据丢失)

image

副本存放策略(hadoop2.8.4以后)--新版本

第一个block副本,放在client所在的节点

第二个block副本,放在另一个机架上的某个节点上。

第三个block副本,放在第二个机架的不同节点上。

image

步骤4/存储后期:

最后DN正常对NN发送六个小时一次的块汇报以及三秒一次的心跳(NN对DN的管理)
块汇报(block report):dn保存block块,同时保存block的数字指纹,定期计算数字指纹与保存的数字指纹是否一致,内容不一致就不一样,来判断是否被篡改损坏.如果损坏,不再发送块报告(六小时一次),NN发掘没有汇报后,删除损坏的block,从已有副本因子进行数据同步给该损坏区域.
心跳:接收dn的磁盘信息,硬盘健康状况.较为频繁,默认三秒.

image

windows-idea操作注意:

@Test
public void test1() throws IOException {
// 1. 初始化配置
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://hadoop10:9000");
// 2. 获得操作hdfs的客户端。
FileSystem fs = FileSystem.get(conf);
// 使用客户端的方法(命令),操作hdfs
fs.copyFromLocalFile(new Path("D:/xxx.txt"), new Path("/data"));
// 3. 关闭资源。
if (fs != null) {
fs.close();
}
}

windows需要配置hadoop环境变量|改hosts ip映射文件 | 引入hadoop依赖 |

以及需要注意的这一个异常: Permission denied: user=Administrator,access=WRITE,inode="/hdfs":root:supergroup:drwxr-xr-x
解决办法: 为上传的hfds目录添加写w权限 hdfs dfs -chmod 777 /hdfs目录

补充:

image

个人随笔,转载注明

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsswyw.html