HDFS的上传流程

命令:hdfs dfs -put  xxx.wmv   /hdfs的文件夹


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


步骤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下,从头到尾依次拷贝,拷贝好的数据块会应答发送的数据块)

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

考虑要素:

  1. HDFS集群的DN有很多台节点。
  2. 节点内部的网络数据传输, 速度最快.
  3. 机架内可以安装多台服务器, 节点之间网络带宽, 由于机架之间的网络带宽.

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

  1. 第一个block副本放在客户端所在的服务器的datanode中。
  2. 第二个block副本放置在本机架内的其它数据节点datanode上
  3. 第三个block副本放置在不同机架的随机某个节点上。(防止某个机架数据丢失)

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

  1. 第一个block副本,放在client所在的节点
  2. 第二个block副本,放在另一个机架上的某个节点上。
  3. 第三个block副本,放在第二个机架的不同节点上。

步骤4/存储后期:

最后DN正常对NN发送六个小时一次的块汇报以及三秒一次的心跳(NN对DN的管理)

块汇报(block report):dn保存block块,同时保存block的数字指纹,定期计算数字指纹与保存的数字指纹是否一致,内容不一致就不一样,来判断是否被篡改损坏.如果损坏,不再发送块报告(六小时一次),NN发掘没有汇报后,删除损坏的block,从已有副本因子进行数据同步给该损坏区域.

心跳:接收dn的磁盘信息,硬盘健康状况.较为频繁,默认三秒.


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目录


补充:

个人随笔,转载注明

HDFS的上传流程以及windows-idea操作文件上传的注意的更多相关文章

  1. pscp使用详解 Windows与Linux文件互传工具

    pscp使用详解 Windows与Linux文件互传工具 pscp使用方法详解:pscp是putty安装包所带的远程文件传输工具,是一款十分常见windows与linux系统之间文件互传的工具,使用方 ...

  2. jm解决乱码问题-参数化-数据库操作-文件上传下载

    jm解决乱码问题-参数化-数据库操作-文件上传下载 如果JM出果运行结果是乱码(解决中文BODY乱码的问题) 找到JM的安装路径,例如:C:\apache-jmeter-3.1\bin 用UE打开jm ...

  3. 【转帖】Linux上搭建Samba,实现windows与Linux文件数据同步

    Linux上搭建Samba,实现windows与Linux文件数据同步 2018年06月09日 :: m_nanle_xiaobudiu 阅读数 15812更多 分类专栏: Linux Samba 版 ...

  4. 将windows下的文件上传到Linux服务器上

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lx_Frolf/article/deta ...

  5. jmeter操作 — 文件上传、下载

    一.上传/下载的过程.        上传的过程就是你把你本地的文件,扔到服务器上的这么一个过程.        下载呢,就是把服务器上的文件拿过来,然后存到你本地的这么一个过程.        总结 ...

  6. Jmeter骚操作—文件上传、下载

    最近很多同学都在问jmeter上传.下载文件的脚本怎么做,要压测上传.下载文件的功能,脚本怎么做,网上查了都说的很含糊,这次呢,咱们就好好的把jmeter的上传下载文件好好缕缕,都整明白了,怎么个过程 ...

  7. PHP 图片上传工具类(支持多文件上传)

    ====================ImageUploadTool======================== <?php class ImageUploadTool { private ...

  8. Struts2文件上传(基于表单的文件上传)

    •Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目   •Commons-Fil ...

  9. 常见的文件上传方法有哪些?Ajax文件上传原理是什么?

    Ajaxfileupload,Ajaxupload,JqueryUploadify无刷新式的文件上传,在一个页面里嵌入一个Iframe,然后在Iframe使用原生的Post表单提交.

随机推荐

  1. python之字符串strip、rstrip、lstrip的方法

    1.描述 strip():用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列 rstrip():用于移除字符串右边指定的字符(默认为空格或换行符)或字符序列 lstrip():用于移除字符串 ...

  2. Linux CentOS7.x 升级内核的方法

    一.概述 在数据中心基础环境中,Linux系统使用很普遍,但是有时候会遇到应用程序需要运行在高版本的内核上或者有时候系统自身要求需要升级内核,我们要综合考虑升级内核的风险. 二.升级内核的方法 1.查 ...

  3. Qt开发Activex笔记(一):环境搭建、基础开发流程和演示Demo

    前言   使用C#开发动画,绘图性能跟不上,更换方案使用Qt开发Qt的控件制作成OCX以供C#调用,而activex则是ocx的更高级形式.  QtCreator是没有Active控件项目的,所有需要 ...

  4. cookie,session,token之间的联系与区别

    发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应,  尤其是我不用 ...

  5. MATLAB中将mat文件转为txt格式文件

    直接保存为txt文件: 可以用fprintf函数,来代替save函数 比如现在我有一个变量a=[0.1223   345.4544] 如果我想保存它的话,可以用下面的程序: fid = fopen(' ...

  6. 图像处理中Stride的理解

    一行有 11 个像素(Width = 11), 对一个 32 位(每个像素 4 字节)的图像, Stride = 11 * 4 = 44. 但还有个字节对齐的问题, 譬如: 一行有 11 个像素(Wi ...

  7. 洛谷p2216 多次单调队列,扫描矩阵中的最大值减去最小值最的固定大小子矩阵

    #include <iostream> #include <cstdio> #include <cstring> using namespace std; int ...

  8. gradle中的build script详解

    目录 简介 project和task 一个例子 task详细讲解 task脚本 task依赖 动态task 默认task build script的外部依赖 gradle中的build script详 ...

  9. TensorFlow & Machine Learning

    TensorFlow & Machine Learning TensorFlow 实战 传统方式 规则 + 数据集 => 答案 无监督学习 机器学习 神经元网络 答案 + 数据集 =&g ...

  10. Github history viewer

    Github history viewer https://github.githistory.xyz/ https://github.com/pomber/git-history https://c ...