Hadoop个人心得笔记之HDFS读写删

                                       HDFS读写删

目录

                                       HDFS读写删

一、读流程

1.代码实现

二、写流程

1.代码实现

三、删流程

1.代码实现


一、读流程

  1. 客户端发起RPC请求到NameNode
  2. NameNode在收到请求之后会先校验这个文件上是否存在。如果存在,那么会将这个文件所对应的Block的存储地址放入一个队列(顺序)中返回给客户端
  3. 客户端收到队列之后会从队列中将每一个Block对应的地址来依次取出,从3个地址中取出一个较近的地址来进行读取
  4. 读取完一个Block之后,对这个Block进行一次checksum的验证 - 验证这个Block的数据总量是否准确;如果不一致,则说明该Block产生损坏,客户端会通知NameNode,然后再从其他节点上重新读取该Block
  5. 如果读完一个Block会读取下一个Block,直到这一次的所有的Block全部读完
  6. 客户端在读完这一批地址会向NameNode要下一批的地址
  7. 等读完所有的Block,客户端会给NameNode发送消息通知NameNode关闭文件

1.代码实现

	// 读取数据
	@Test
	public void get() throws IOException {
		Configuration conf = new Configuration();
		// 连接HDFS
		// uri:连接地址
		// conf:配置
		FileSystem fs = FileSystem.get(URI.create("hdfs://10.42.60.249:9000"), conf);
		// 打开文件,获取指向文件的输入流
		InputStream in = fs.open(new Path("/VERSION"));
		// 创建一个输出流
		FileOutputStream out = new FileOutputStream("a.txt");
		IOUtils.copyBytes(in, out, conf);
		// 关流
		in.close();
		out.close();
	}

 

二、写流程

  1. 客户端发起RPC请求到NameNode,这个请求包含对文件信息的描述
  2. NameNode收到请求之后,校验这个用户的权限;如果校验通过,则检查这个路径下是否有同名文件,如果没有同名文件,则允许写入
  3. NameNode计算这个文件需要的地址数量,然后会给每一块分配对应的地址,并且将地址放入队列中返回给客户端
  4. 客户端在收到地址之后,将数据进行封包(packets),写入DataNode
  5. 在写的时候,从分配的地址中选取一个较近的节点将数据写入。在写完一个Block之后,这个DataNode自动的通过Pipeline(管道,实际上基于NIO的Channel)将这个Block备份到其他节点上构成指定的复本数量
  6. 节点之间依次传递ACK信号表示备份成功,在客户端收到ACK之后会继续写下一个Block
  7. 客户端写完所有的Block之后会通知NameNode关流,此时这个文件更改为不可写

1.代码实现

// 上传文件
	@Test
	public void put() throws IOException, URISyntaxException, InterruptedException {
		Configuration conf = new Configuration();
		// 在代码中指定的配置优先于xml中的配置
		conf.set("dfs.replication", "1");
		FileSystem fs = FileSystem.get(new URI("hdfs://192.168.89.129:9000"), conf, "root");

		// 表示在HDFS上创建指定的文件
		OutputStream out = fs.create(new Path("/a.log"));
		FileInputStream in = new FileInputStream("C:\\gsLauncher.log");
		IOUtils.copyBytes(in, out, conf);
		in.close();
		out.close();

	}

三、删流程

  1. 客户端发起RPC请求到NameNode
  2. NameNode收到请求之后,校验这个文件是否存在,如果存在,校验这个客户端是否有删除权限,如果有权限则允许删除。
  3. 在通过校验之后,NameNode就会将这个操作记录到edits_inprogress文件中,然后修改内存中的元数据,最后向客户端返回ack表示删除成功。此时数据并没有从HDFS上移除
  4. NameNode等待DataNode的心跳,通过DataNode的心跳信息校验DataNode上是否有要删除的数据,如果有要删除的数据,则NameNode会给对应的DataNode发送指令删除指定的数据,DataNode在接收到指令才会删除。此时数据才真正从HDFS上移除

1.代码实现

@SuppressWarnings("deprecation")
	@Test
	public void delete() throws IOException, InterruptedException {

		Configuration conf = new Configuration();
		FileSystem fs = FileSystem.get(URI.create("hdfs://192.168.89.129:9000"), conf, "root");
		fs.delete(new Path("/VERSION"));

	}

 

GSKTR 通讯程序使用说明 1. 安装:把GSKTR.EXE、GSKTR.TXT、QE.EXE 拷贝于同一目录下。 GSKTR.EXE 本通讯软件的主程序。 GSKTR.TXT 本通讯软件的使用说明 GSKTR.EXE的 F1 功能使用它。 QE.EXE 用户程序的编辑软件 GSKTR.EXE的 F5 功能调用它。 2. 执行 GSKTR.EXE 文件。 3. F1 Help 功能:本软件的使用说明,输入ALT_X 退出。 4. F2 Transmit1 功能(CNC软件版本 >=V 2.22): PC 机发送文件到 CNC Please input file name:请输入将要发送到 CNC 的文件的文件名, 文件名输入后,回车即可。 备注:在CNC软件版本 V2.22及其以后的版本时使用。 5. F4 Transmit2 功能(CNC软件版本 V 1.0 --- V2.21): PC 机发送文件到 CNC Please input file name:请输入将要发送到 CNC 的文件的文件名, 文件名输入后,回车即可。 备注:在CNC软件版本 V 1.0 --- V2.21时使用。: 6. F3 Reveive 功能: PC 机接收来自 CNC 的文件 Please input file name:请输入将要存盘的文件名(把 CNC 送来 的文件存入 PC 机磁盘), 文件名输入后,回车即可。 7. F5 Edit 功能: 本软件调用 QE.EXE 来进行用户程序的编辑。 进入 QE.EXE 程序时,首先输入被编辑的用户文件名,然后回车进 入编辑状态,编辑完成后输入“ALT_X”,且回答 “Y(保存)” 或“N(放弃保存)”,退出 QE.EXE 程序。 8. F9 Setup 功能: 1)设置 PC 机串行口0 或串行口1 (输入0 或 1)。 2)设置波特率 (输入 0 到 9 之一)。 3)PC 机与 GSK992A、GSK996T、GSK928TC 等 CNC 通讯时,波特率 应设置为9600(即输入 5)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值