Hadoop基础-HDFS数据清理过程之校验过程代码分析

摘要:
否则,将追究法律责任。作为一名高级大数据开发工程师,你不仅需要了解hadoop的内部运行机制,还需要掌握hadoop编写过程中的消息分析。为了掌握这三项技能,我们可以练习HDFS的编写过程,并学习几行代码如何帮助我们在其内部实现数据传输。1、 想法代码调试简介1˃。编写测试代码1/*2@author:尹正杰3日志:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/4EMAIL:y1053419035@qq.com5*/6packagecn.org.yinzhengjie。hdfs;78 importorg.apache.hadoop.conf.Configuration;9importorg.apach.hadoop.fs。FSDataOutputStream;10importorg.apach.hadoop.fs。文件系统;11importorg.apach.hadoop.fs。路径12进口。欠条;1314导入java.io。文件输入流;15导入java.io。IOException;1617publicclassWriterToHdfs{18publicstaticvoidmaintrowsIOException{19//将访问hdfs的用户名设置为“yinzhengjie”20System.setProperty;21Configurationconf=newConfiguration();22FileSystemfs=FileSystem.get;23//定义要在hdfs中写入的路径。不要忘记将core-site.xml文件放在resources目录中!然后检查大小应为“7+4x2=15”即校验和为15字节,

                 Hadoop基础-HDFS数据清理过程之校验过程代码分析

                                          作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  

  想称为一名高级大数据开发工程师,不但需要了解hadoop内部的运行机制,还需要掌握hadoop在写入过程中的报文分析。当然代码的调试步骤是一个开发必须得会的技能!想要掌握这三个技能,我们就可以拿HDFS写入过程来练练手,了解一下平时就几行的代码在它的内部是如何帮我们实现数据传输的。

一.Idea代码调试简介

1>.编写测试代码

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.hdfs;
 7 
 8 import org.apache.hadoop.conf.Configuration;
 9 import org.apache.hadoop.fs.FSDataOutputStream;
10 import org.apache.hadoop.fs.FileSystem;
11 import org.apache.hadoop.fs.Path;
12 import org.apache.hadoop.io.IOUtils;
13 
14 import java.io.FileInputStream;
15 import java.io.IOException;
16 
17 public class WriterToHdfs {
18     public static void main(String[] args) throws IOException {
19         //设置访问hdfs的用户名为“yinzhengjie”
20         System.setProperty("HADOOP_USER_NAME","yinzhengjie");
21         Configuration conf = new Configuration();
22         FileSystem fs = FileSystem.get(conf);
23         //定义需要在hdfs中写入的路径,别忘记把core-site.xml文件放在resources目录下哟!并fs.defaultFS的值设置为"hdfs://s101:8020"
24         Path p = new Path("/yinzhengjie.sql");
25         //通过fs对象create方法创建一个输出流,第一个参数是hdfs路径,第二个参数表示当hdfs中存在时是否覆盖
26         FSDataOutputStream fos = fs.create(p,true);
27         FileInputStream fis = new FileInputStream("D:\10.Java\IDE\yhinzhengjieData\MyHadoop\yinzhengjie.sql");
28         //通过hadoop提供的IOUtils工具类对拷数据
29         IOUtils.copyBytes(fis,fos,1024);
30         fis.close();
31         fos.close();
32     }
33 }

2>.进入调试模式

Hadoop基础-HDFS数据清理过程之校验过程代码分析第1张

3>.查看源码执行过程,流程控制按键介绍:

Hadoop基础-HDFS数据清理过程之校验过程代码分析第2张

4>.断点列表管理

Hadoop基础-HDFS数据清理过程之校验过程代码分析第3张

 

二.查看 “FileSystem fs = FileSystem.get(conf)” 的由来

1>.查看conf的返回值

Hadoop基础-HDFS数据清理过程之校验过程代码分析第4张

2>.进入FileSystem.get方法(我们需要在return那一行右击就可以弹出图中的对话框,其实不用刻意去选中getDefaultUri)

 Hadoop基础-HDFS数据清理过程之校验过程代码分析第5张

3>.查看“getDefaultUri(conf)”返回的参数

Hadoop基础-HDFS数据清理过程之校验过程代码分析第6张

4>.通过“CACHE.get(uri, conf)”返回文件系统

Hadoop基础-HDFS数据清理过程之校验过程代码分析第7张

5>.返回文件系统

Hadoop基础-HDFS数据清理过程之校验过程代码分析第8张

三.查看“fs.create(p, true)”创建流的详细过程

1>.单步进入“fs.create(p, true)”创建流

 Hadoop基础-HDFS数据清理过程之校验过程代码分析第9张

2>.经过断电跟踪,发现最后返回的是HDFSOutputStream,也就是创建流,此时还没有真正的写入数据

Hadoop基础-HDFS数据清理过程之校验过程代码分析第10张

3>.在写入过程中进入到write1方法

 Hadoop基础-HDFS数据清理过程之校验过程代码分析第11张

4>.再进入到FlushBuffer,目的是清理chunk

 Hadoop基础-HDFS数据清理过程之校验过程代码分析第12张

5>.验证chunk大小为512字节

Hadoop基础-HDFS数据清理过程之校验过程代码分析第13张

6>.我们通过打断点的方式查出来chunk的大小为512字节,这个大小意思的是每个512字节就会进行一次校验。

 Hadoop基础-HDFS数据清理过程之校验过程代码分析第14张

7>.使用“sum.calculateChunkedSums”来计算校验和,使用循环冗余校验(CRC32C),大小4个字节

Hadoop基础-HDFS数据清理过程之校验过程代码分析第15张

四.知识点小结

1>.chunk数据块

  第一:通过断点调试估计大家也知道chunk的做作用了,它就是数据块,512字节,在上面调试代码中看到的"sum.getBytesChecksum()"的大小就是512,它的意思就是每个512字节进行依次校验;

  第二:上图调试中的"sum.caculateChunkedSums"是来计算校验和的,使用 循环冗余校验(CRC32C),占用4个字节;

2>.data数据

  数据包括两个方面,估计你也猜到了,没错,就是真实数据和校验数据。校验数据大小 = 7字节头 + 检验和个数(每512字节进行依次校验)  x 4

   不管你信不信,反转我是信了,我们举个例子,如下:

 Hadoop基础-HDFS数据清理过程之校验过程代码分析第16张

  比如上面的“blk_1073741826”大小是700字节,将其除以512字节,商为2(如果有余数的话商要加1)。那么校验大小就应该是"7 + 4 x 2 = 15",即校验和为15字节,

 

免责声明:文章转载自《Hadoop基础-HDFS数据清理过程之校验过程代码分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇常见的性能测试误区解决mac系统中npm全局安装提示没有权限的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JSR303实现数据校验案例

JSR303实现数据校验案例 1、导包 <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator --> <dependency> <groupId>org.hibernate</groupId>...

pyspark 安装配置【linux &amp;amp;&amp;amp; win】

一、windows 安装 1、下载spark http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.3.1/spark-2.3.1-bin-hadoop2.7.tgz 2、配置spark 环境变量 set SPARK_HOME=d:spark2.3.1set PATH=%SPARK_HO...

Hadoop企业级应用

  Hadoop专业解决方案之构建Hadoop企业级应用   一、大数据的挑战   大数据面对挑战是你必须重新思考构建数据分析应用的方式。传统方式的应用构建是基于数据存储在不支持大数据处理的基础之上。这主要是因为一下原因:   1.传统应用的基础设施是基于传统数据库访问模式设计的,它不支持Hadoop;   2.数据存储在Hadoop之上,实时访问集群...

Hadoop集群的hbase介绍、搭建、环境、安装

1、hbase的介绍(自行百度hbase,比我总结的全面具体) HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系...

win7下idea远程连接hadoop,运行wordCount

1.将hadoop-2.6.1.tar.gz解压到本地 配置环境变量 HADOOP_HOME  E:kaifahadoop-2.6.1hadoop-2.6.1 HADOOP_BIN_PATH %HADOOP_HOME%in HADOOP_PREFIX %HADOOP_HOME% 配置path E:kaifajdk1.7.0_21in;%HADOOP_HOM...

flume kafka 配置指南

1、官方网站也有配置: https://flume.apache.org/FlumeUserGuide.html#kafka-source 2、clodera 官方配置 https://www.cloudera.com/documentation/kafka/2-0-x/topics/kafka_flume.html 1 tier1.sources =...