hdfs的datanode工作原理
datanode的作用:
(1)提供真实文件数据的存储服务。
(2)文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block.
配置在hdfs-site.xml中配置: dfs.block.size
(3)不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间Replication。多复本。默认是三个。也可以在hdfs-site.xml中配置:
如下修改副本数量为1(因为只有一个节点):
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
下面进行测试:
(1)首先删除hdfs所有的所有文件:
[root@localhost ~]# hadoop fs -ls hdfs://localhost:9000/
Found items
-rwxrwxrwx hadoop supergroup -- : hdfs://localhost:9000/install.log
drwx------ - root supergroup -- : hdfs://localhost:9000/tmp
drwxr-xr-x - root supergroup -- : hdfs://localhost:9000/user
drwxr-xr-x - root supergroup -- : hdfs://localhost:9000/wordcount
[root@localhost ~]# hadoop fs -rm -r hdfs://localhost:9000/* #删除文件
// :: INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = minutes, Emptier interval = minutes.
Deleted hdfs://localhost:9000/install.log
// :: INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = minutes, Emptier interval = minutes.
Deleted hdfs://localhost:9000/tmp
// :: INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = minutes, Emptier interval = minutes.
Deleted hdfs://localhost:9000/user
// :: INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = minutes, Emptier interval = minutes.
Deleted hdfs://localhost:9000/wordcount
[root@localhost ~]# hadoop fs -ls hdfs://localhost:9000/
[root@localhost ~]#
(2)上传一个文件:
[root@localhost java]# ll
total
drwxr-xr-x. uucp Jun jdk1..0_65
-rw-r--r--. root root Apr : jdk-7u65-linux-i586.tar.gz
[root@localhost java]# hadoop fs -put ./jdk-7u65-linux-i586.tar.gz / #上传文件到hdfs根目录
[root@localhost java]# hadoop fs -ls /
Found items
-rw-r--r-- root supergroup -- : /jdk-7u65-linux-i586.tar.gz
(3)到本地hdfs存放文件的地方查看文件:
[root@localhost finalized]# pwd #hdfs存放文件的地方
/opt/hadoop/hadoop-2.4.1/data/dfs/data/current/BP-1623988768-127.0.0.1-1523440267982/current/finalized
[root@localhost finalized]# ll #查看文件
total
-rw-r--r--. root root Apr : blk_1073741855
-rw-r--r--. root root Apr : blk_1073741855_1031.meta
-rw-r--r--. root root Apr : blk_1073741856
-rw-r--r--. root root Apr : blk_1073741856_1032.meta
(1)发现/opt/hadoop/hadoop-2.4.1/data/dfs/data/current/BP-1623988768-127.0.0.1-1523440267982/current/finalized是hdfs存放文件的路径。
(2)存放的文件以blk_blkId命名,且一个文件对应一个元数据信息,且同一个文件的不同blk的blkId(block ID)是连续的。上面上传的文件被分成2个block
(3)上面的blk_1073741855是第一个block,大小为134217728,计算:134217728/1024/1024=128,也就是第一个blk的大小正好的128M。加上下面的blk正好是文件的大小
或者
以下面这种方式查看文件大小:
[root@localhost finalized]# du -h ./*
128M ./blk_1073741855
1.1M ./blk_1073741855_1031.meta
9.0M ./blk_1073741856
72K ./blk_1073741856_1032.meta
(4)实际上block就是文件,只是因为文件被拆分,所以如果我们如果将文件合并就可以像处理原始文件一样处理文件。这也是hdfs的机制,将文件按默认块大小分割开,最后按照顺序将块合并组成源文件。
将文件拷贝到用户工作目录:
[root@localhost finalized]# cp ./blk_1073741855 ~/
[root@localhost finalized]# cp ./blk_1073741856 ~/
合并两个block并查看合并后的文件大小:(合并后的大小等于上传的源文件大小)
[root@localhost ~]# cat ./blk_1073741856 >> ./blk_1073741855 #合并文件
[root@localhost ~]# ll | grep blk
-rw-r--r--. root root Apr : blk_1073741855
-rw-r--r--. root root Apr : blk_1073741856
查看文件类型并且解压缩文件:
[root@localhost ~]# file ./blk_1073741855 #查看文件类型
./blk_1073741855: gzip compressed data, from Unix, last modified: Mon Jun ::
[root@localhost ~]# tar -zxvf ./blk_1073741855
解压缩后结果:
[root@localhost ~]# ls
anaconda-ks.cfg blk_1073741855 blk_1073741856 install.log install.log.syslog jdk1..0_65 startHadoop.sh test
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd jdk1..0_65/bin/
[root@localhost bin]# ./java -version
java version "1.7.0_65"
Java(TM) SE Runtime Environment (build 1.7.0_65-b17)
Java HotSpot(TM) Client VM (build 24.65-b04, mixed mode)
总结:
datanode实际上是将文件按block分开,每个block的大小可以设定,默认每个block为128M(一个block对应一个meta元数据信息),也就是如果文件不够128M是一个block,如果是129M就会被分成两个block(第一个128M,第二个1M)。当我们访问文件的时候,hdfs会将block按顺序合并之后返回给我们,我们也就得到完整的文件。
hdfs的datanode工作原理的更多相关文章
- 第四次作业 描述HDFS体系结构、工作原理与流程
1.用自己的图,描述HDFS体系结构.工作原理与流程. 读数据的流程 2.伪分布式安装Hadoop.
- hdfs namenode/datanode工作机制
一. namenode工作机制 1. 客户端上传文件时,namenode先检查有没有同名的文件,如果有,则直接返回错误信息.如果没有,则根据要上传文件的大小以及block的大小,算出需要分成几个blo ...
- HDFS中DataNode工作机制
1.DataNode工作机制 1)一个数据块在datanode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据(包括数据块的长度,块数据的校验和,以及时间戳). 2)DataNod ...
- DataNode工作原理(四)
DataNode的作用:提供真实文件数据的存储服务.以文件块进行存储. 文件块(block):最基本的存储单位.对文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺 ...
- 大数据 --> 分布式文件系统HDFS的工作原理
分布式文件系统HDFS的工作原理 Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数 ...
- NameNode与DataNode的工作原理剖析
NameNode与DataNode的工作原理剖析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS写数据流程 >.客户端通过Distributed FileSyst ...
- Hadoop分布式文件系统HDFS的工作原理
Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应 ...
- HDFS的工作原理扫扫盲
问题导读: 1.什么是分布式文件系统? 2.怎样分离元数据和数据? 3.HDFS的原理是什么? Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个 ...
- 【转载】Hadoop分布式文件系统HDFS的工作原理详述
转载请注明来自36大数据(36dsj.com):36大数据 » Hadoop分布式文件系统HDFS的工作原理详述 转注:读了这篇文章以后,觉得内容比较易懂,所以分享过来支持一下. Hadoop分布式文 ...
随机推荐
- 使用Dede破解Delphi软件实战
昨日练习了一把如何破解Delphi软件.下面和大家分享一下破解的过程,对初学者,希望有授之以渔的作用. 首先分析我们的目标软件,不要问我破解的是什么软件.保护知识产权,要从娃娃抓取. 目标软件是一个销 ...
- angular 延迟更新方法
失去焦点后更新: <input ng-model="name" ng-model-options="{updateOn:'blur'}" />{{n ...
- HDU4681_String
这个题目是这样的. 给你三个字符串A,B,C,(C一定是A和B的一个公共子序列). 现在要求你构造出一个串D,使得D同时为A和B的子序列,且C是D的一个连续子串.求D的最大可能长度. 很简单的一个DP ...
- BZOJ 2131 圈地计划(最小割+黑白染色)
类似于happiness的一道题,容易想到最小割的做法. 但是不同的是那一道题是相邻的如果相同则有收益,这题是相邻的不同才有收益. 转化到建图上面时,会发现,两个相邻的点连的边容量会是负数.. 有一种 ...
- 【bzoj4425】[Nwerc2015]Assigning Workstations分配工作站 贪心+堆
题目描述 佩内洛普是新建立的超级计算机的管理员中的一员. 她的工作是分配工作站给到这里来运行他们的计算研究任务的研究人员. 佩内洛普非常懒惰,不喜欢为到达的研究者们解锁机器. 她可以从在她的办公桌远程 ...
- Spring Boot系列教程六:日志输出配置log4j2
一.前言 spring boot支持的日志框架有,logback,Log4j2,Log4j和Java Util Logging,默认使用的是logback日志框架,笔者一直在使用log4j2,并且 ...
- Unity3D手游开发日记(2) - 技能系统架构设计
我想把技能做的比较牛逼,所以项目一开始我就在思考,是否需要一个灵活自由的技能系统架构设计,传统的技能设计,做法都是填excel表,技能需要什么,都填表里,很死板,比如有的技能只需要1个特效,有的要10 ...
- HDU.1846 Brave Game (博弈论 巴什博弈)
HDU.1846 Brave Game (博弈论 巴什博弈) 题意分析 巴什博奕裸题 博弈论快速入门 代码总览 include <bits/stdc++.h> using namespac ...
- linux下shell显示-bash-3.2$ 不显示路径解决方法
linux操作下脚本不小心误删了很多东西,变成了下面的样子 在linux shell中不显示路径了,用起来很不方便. 如何改为显示路径的shell呢 步骤如下: vi ~/.bash_profi ...
- 并发时-修改Linux系统下的最大文件描述符限制
通常我们通过终端连接到linux系统后执行ulimit -n 命令可以看到本次登录的session其文件描述符的限制,如下: $ulimit -n1024 当然可以通过ulimit -SHn 1024 ...