HDFS体系结构


Namenode


是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息metadate和每个文件对应的数据块列表。

功能:接收用户的操作请求。

metadate信息包括:

1、文件的owership和permission。

2、文件包含哪些block块

3、block保存在哪个DataNode(由DataNode启动时上报)


metadate存储到磁盘文件名为“fsimage”。

warn:block的位置信息不回保存到fsimage上。在DataNode启动时上报,存在内存里。


文件位置:

 hdfs-default.xml的dfs.namenode.name.dir 属性(hadoop-hdfs-2.7.2.jar  /  hdfs-default.xml)

<property><name>dfs.namenode.name.dir</name><value>file://${hadoop.tmp.dir}/dfs/name</value><description>Determines where on the local filesystem the DFS name nodeshould store the name table(fsimage).  If this is a comma-delimited listof directories then the name table is replicated in all of thedirectories, for redundancy. </description>
</property>

${hadoop.tmp.dir} 配置在  core-site.xml 中

<property><name>hadoop.tmp.dir</name><value>/home/hadoop_data</value>
</property>


metadate信息保存磁盘包含:

1、fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息,无block位置信息。



2、edits:metadate操作日志文件

3、fstime:保存最近一次checkpoint的时间。


查看NameNode内容

方式一:webhdfs查看

命令:hdfs oiv -i xxx -o 

Usage: bin/hdfs oiv [OPTIONS] -i INPUTFILE -o OUTPUTFILE
Offline Image Viewer
View a Hadoop fsimage INPUTFILE using the specified PROCESSOR,
saving the results in OUTPUTFILE.The oiv utility will attempt to parse correctly formed image files
and will abort fail with mal-formed image files.The tool works offline and does not require a running cluster in
order to process an image file.The following image processors are available:* XML: This processor creates an XML document with all elements ofthe fsimage enumerated, suitable for further analysis by XMLtools.* FileDistribution: This processor analyzes the file sizedistribution in the image.-maxSize specifies the range [0, maxSize] of file sizes to beanalyzed (128GB by default).-step defines the granularity of the distribution. (2MB by default)* Web: Run a viewer to expose read-only WebHDFS API.-addr specifies the address to listen. (localhost:5978 by default)* Delimited (experimental): Generate a text file with all of the elements commonto both inodes and inodes-under-construction, separated by adelimiter. The default delimiter is \t, though this may bechanged via the -delimiter argument.Required command line arguments:
-i,--inputFile <arg>   FSImage file to process.Optional command line arguments:
-o,--outputFile <arg>  Name of output file. If the specifiedfile exists, it will be overwritten.(output to stdout by default)
-p,--processor <arg>   Select which type of processor to applyagainst image file. (XML|FileDistribution|Web|Delimited)(Web by default)
-delimiter <arg>       Delimiting string to use with Delimited processor.  
-t,--temp <arg>        Use temporary dir to cache intermediate result to generateDelimited outputs. If not set, Delimited processor constructsthe namespace in memory before outputting text.
-h,--help              Display usage information and exit

实例:

 hdfs oiv -i fsimage_0000000000000000162 -o fsimage_000000000000000016_cat

16/08/12 18:46:54 INFO offlineImageViewer.FSImageHandler: Loading 2 strings
16/08/12 18:46:54 INFO offlineImageViewer.FSImageHandler: Loading 18 inodes.
16/08/12 18:46:54 INFO offlineImageViewer.FSImageHandler: Loading inode references
16/08/12 18:46:54 INFO offlineImageViewer.FSImageHandler: Loaded 0 inode references
16/08/12 18:46:54 INFO offlineImageViewer.FSImageHandler: Loading inode directory section
16/08/12 18:46:54 INFO offlineImageViewer.FSImageHandler: Loaded 11 directories
16/08/12 18:46:54 INFO offlineImageViewer.WebImageViewer: WebImageViewer started. Listening on /127.0.0.1:5978. Press Ctrl+C to stop the viewer.

hadoop会启动内置的tomcat。监听端口 127.0.0.1:5978

浏览器访问webhdfs方式见博客:http://blog.csdn.net/zengmingen/article/details/52189857

SecureCRT  clone session 执行:hdfs dfs -ls  -R webhdfs://127.0.0.1:5978/

drwx------   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/tmp
drwx------   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn
drwx------   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging
drwx------   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/hadoop
drwx------   - hadoop supergroup          0 2016-04-14 22:20 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/hadoop/.staging
drwxr-xr-x   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/history
drwxrwxrwt   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/history/done_intermediate
drwxrwx---   - hadoop supergroup          0 2016-04-14 22:20 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop
-rwxrwx---   1 hadoop supergroup      33303 2016-04-14 22:20 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop/job_1460643564332_0001-1460643581404-hadoop-wcount.jar-1460643608082-1-1-SUCCEEDED-default-1460643592087.jhist
-rwxrwx---   1 hadoop supergroup        349 2016-04-14 22:20 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop/job_1460643564332_0001.summary
-rwxrwx---   1 hadoop supergroup     115449 2016-04-14 22:20 webhdfs://127.0.0.1:5978/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop/job_1460643564332_0001_conf.xml
drwxr-xr-x   - hadoop supergroup          0 2016-04-14 22:19 webhdfs://127.0.0.1:5978/wc
drwxr-xr-x   - hadoop supergroup          0 2016-04-14 22:20 webhdfs://127.0.0.1:5978/wc/output
-rw-r--r--   1 hadoop supergroup          0 2016-04-14 22:20 webhdfs://127.0.0.1:5978/wc/output/_SUCCESS
-rw-r--r--   1 hadoop supergroup         36 2016-04-14 22:20 webhdfs://127.0.0.1:5978/wc/output/part-r-00000
drwxr-xr-x   - hadoop supergroup          0 2016-04-14 00:58 webhdfs://127.0.0.1:5978/wc/srcdata
-rw-r--r--   1 hadoop supergroup         44 2016-04-14 00:58 webhdfs://127.0.0.1:5978/wc/srcdata/word.log


方式二:导出到xml(其他文件)查看

命令:hdfs oiv -p XML -i xxxx -o xxxx.xml(XML 必须大写)

实例:hdfs oiv -p XML -i fsimage_0000000000000000162 -o fsimage_0000000000000000162.xml

命令: cat fsimage_0000000000000000162.xml 就能查看内容了。


查看edtis内容

方式与查看fsimage不同

命令:hdfs oev -i xxxx  -o xxx.xml   (default xml  file

实例:hdfs oev -i edits_0000000000000000163-0000000000000000163 -o edits_0000000000000000163-0000000000000000163.xml

命令: cat edits_0000000000000000163-0000000000000000163.xml

<?xml version="1.0" encoding="UTF-8"?>
<EDITS><EDITS_VERSION>-63</EDITS_VERSION><RECORD><OPCODE>OP_START_LOG_SEGMENT</OPCODE><DATA><TXID>163</TXID></DATA></RECORD>
</EDITS>


SecondaryNameNode(SNN)

-当数据很多时,NN的metadate也会很大,当matedate写入磁盘时,会带来NN机子的IO使用较高,给NN增加压力

因而分配一个助手。http://blog.csdn.net/zengmingen/article/details/51115802

Datanode

提供真实文件数据的存储服务。

1、文件块(block):最基本的存储单元。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称为一个block,hdfs默认block大小是128MB,一个256MB文件,共有256/128=2个block。

不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。

hdfs有append追加功能,但一般都不用,追加会改变block的数量,block又有副本,成本太高。


2、Replication。多复本。默认是三个。

在hdfs-site.xml的dfs.replication属性

<configuration><property><name>dfs.replication</name><value>1</value>
</property></configuration>



warn

1、如果副本数设置为3,但datanode机器只有2台,那整个hadoop是不能工作存不了数据的。一个datanode节点不能有两个相同内容的block。

2、启动DataNode线程时会向NameNode汇报block信息。

3、通过向NameNode发送心跳保持与其联系(3秒一次),如果NameNode 10分钟没有收到DataNode心跳,则认为其已经lost,并copy其上的block(其他DataNode的相同副本)到其他DataNode。


Block的副本放置策略

第一个副本:放置在上传文件的DataNode上。

如果是集群外提交,则随机选择一台磁盘不太满,cpu不太忙的机子。

第二个副本:放置在第一个副本不同的机架的机子上。

第三个副本:放置在与第二个副本相同机架不同机子上。

更多副本:随机节点。


数据存储:staging


HDFS client上传数据到HDFS时,会首先在本地缓存数据,当数据达到一个block大小时,请求NameNode分配一个block。
NameNode会把block所在的DataNode的地址告诉HDFS client。
HDFS client会直接和DataNode通信,把数据写到DataNode节点一个block文件中。

数据存储:读文件解析


步骤解析:

1、首先调用FileSystem对象的open方法,其实是一个DistributedFileSystem的实例。

2、DistributedFileSystem通过RPC获得文件的第一批block的locations,同一block按照重复数(replication)会返回多个locations,这些locations按照hadoop拓扑结构排序,距离客户端近的排在前面。

3、前两步会返回一个FSDataInputStream对象,该对象会被封装成DFSInputStream对象,DFSInputStream可以方便的管理datanode和namenode数据流。客户端调用read方法,DFSInputStream最会找出离客户端最近的datanode并连接。

4、数据从datanode源源不断的流向客户端。

5、如果第一块的数据读完了,就会关闭指向第一块的datanode连接,接着读取下一块。这些操作对客户端来说是透明的,客户端的角度看来只是读一个持续不断的流。

6、如果第一批block都读完了,DFSInputStream就会去namenode拿下一批blocks的location,然后继续读,如果所有的块都读完,这时就会关闭掉所有的流。

warn:

1、如果在读数据的时候,DFSInputStream和datanode的通讯发生异常,就会尝试正在读的block的排第二近的datanode,并且会记录哪个datanode发生错误,剩余的blocks读的时候就会直接跳过该datanode。DFSInputStream也会检查block数据校验,如果发现一个坏的block,就会先报告到namenode节点,然后DFSInputStream在其他的datanode上读该block的镜像。

2、该设计的方向就是客户端直接连接datanode来检索数据并且namenode来负责为每一个block提供最优的datanode,namenode仅仅处理block location的请求,这些信息都加载在namenode的内存中,hdfs通过datanode集群可以承受大量客户端的并发访问。


数据存储:写文件解析


步骤解析:

1.客户端通过调用DistributedFileSystem的create方法创建新文件。

2.DistributedFileSystem通过RPC调用namenode去创建一个没有blocks关联的新文件,创建前,namenode会做各种校验,比如文件是否存在,客户端有无权限去创建等。如果校验通过,namenode就会记录下新文件,否则就会抛出IO异常。

3.前两步结束后会返回FSDataOutputStream的对象,与读文件的时候相似,FSDataOutputStream被封装成DFSOutputStream.DFSOutputStream可以协调namenode和datanode。客户端开始写数据到DFSOutputStream,DFSOutputStream会把数据切成一个个小packet,然后排成队列data quene。

4.DataStreamer会去处理接受data quene,他先问询namenode这个新的block最适合存储的在哪几个datanode里(参考第二小节),比如重复数是3,那么就找到3个最适合的datanode,把他们排成一个pipeline.DataStreamer把packet按队列输出到管道的第一个datanode中,第一个datanode又把packet输出到第二个datanode中,以此类推。

5.DFSOutputStream还有一个对列叫ack quene,也是有packet组成,等待datanode的收到响应,当pipeline中的所有datanode都表示已经收到的时候,这时akc quene才会把对应的packet包移除掉。

6.客户端完成写数据后调用close方法关闭写入流。

7.DataStreamer把剩余得包都刷到pipeline里然后等待ack信息,收到最后一个ack后,通知datanode把文件标示为已完成。

warn:

如果在写的过程中某个datanode发生错误,会采取以下几步:

1) pipeline被关闭掉;

2)为了防止防止丢包ack quene里的packet会同步到data quene里;

3)把产生错误的datanode上当前在写但未完成的block删掉;

4)block剩下的部分被写到剩下的两个正常的datanode中;

5)namenode找到另外的datanode去创建这个块的复制。当然,这些操作对客户端来说是无感知的。

warn:

另外要注意得一点,客户端执行write操作后,写完得block才是可见的,正在写的block对客户端是不可见的,只有调用sync方法,客户端才确保该文件被写操作已经全部完成,当客户端调用close方法时会默认调用sync方法。是否需要手动调用取决你根据程序需要在数据健壮性和吞吐率之间的权衡。






本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么要将html页面和样式表分离,0031 如何使用css文件对网页内容和样式进行分离...

原标题&#xff1a;0031 如何使用css文件对网页内容和样式进行分离上节课&#xff0c;学习了针对文字可以设置很多种样式。这节课&#xff0c;学习如何将内容和样式进行分离。上节课的课后练习1.将斜体字体效果去除2.将工作经历和工作经验(部分)这2行文字也做成简介这行文字的效…

js 判断日期时间差

2019独角兽企业重金招聘Python工程师标准>>> alert(GetDateDiff("2018-02-27 19:20:22","2018-02-27 09:20:22","hour"));function GetDateDiff(startTime, endTime, diffType) {//将xxxx-xx-xx的时间格式&#xff0c;转换为 xxxx/xx…

python 图形_Python图形数据

CSGraph代表 压缩稀疏图 &#xff0c;它着重于基于稀疏矩阵表示的快速图算法。 图表表示 首先&#xff0c;让我们了解一个稀疏图是什么以及它在图表示中的作用。 什么是稀疏图&#xff1f; 图形只是节点的集合&#xff0c;它们之间有链接。图表几乎可以代表任何事物 - 社交网络…

dubbo 支持服务降级吗_dubbo面试题!会这些,说明你真正看懂了dubbo源码

整理了一些dubbo可能会被面试的面试题&#xff0c;感觉非常不错。如果你基本能回答说明你看懂了dubbo源码&#xff0c;对dubbo了解的足够全面。你可以尝试看能不能回答下。我们一起看下有哪些问题吧&#xff1f;dubbo中"读接口"和"写接口"有什么区别?谈谈…

不满足于汽车制造,丰田展示仿钢铁侠机器支撑腿架

而汽车制造商开发机器人也不是丰田一家的专利&#xff0c;此前现代也推出过类似的支撑机器人腿架 大多数人对于丰田的印象都停留在汽车制造上&#xff0c;不过他们却不仅仅满足于汽车事业的发展&#xff0c;最近&#xff0c;丰田正在研发一款机器人支撑腿架&#xff0c;来帮助…

js html异步加载的属性,异步加载JS的五种方式

方案一&#xff1a;点评&#xff1a;HTML5中新增的属性&#xff0c;Chrome、FF、IE9&IE9均支持(IE6~8不支持)。此外&#xff0c;这种方法不能保证脚本按顺序执行。方案二&#xff1a;点评&#xff1a;兼容所有浏览器。此外&#xff0c;这种方法可以确保所有设置defer属性的…

cesium 经纬度绘制点_NCL绘制2016年1号台风(Nepartak)

begin ncol 6 ;台风参数 nrow 31 ;时次总数 nbin 6 ;已知该该气旋共经历了6个等级的演变 ;读入台风资料 data asciiread("NEPARTAK.txt",(/nrow,ncol/),"integer") ;/31,6/ 31行6列&#xff0c;integer整数类型 ;;数据读取函数总结&…

VR究竟多奇幻?eSmart邀你共赴一场VR奇幻之旅!

今年夏天&#xff0c;快来参加首届eSmart展会&#xff0c;来一场VR游戏的奇妙之旅&#xff0c;见识最好玩、最有趣的VR游戏&#xff01; 正如十几年前互联网的兴起开创了全新时代一样&#xff0c;VR产业在近两年也势不可挡。随着一重行业巨头的进入&#xff0c;2016年&#xf…

HTML5新的解析顺序,HTML5新表单新功能解析

HTML5新增了很多属性功能。但是有兼容性问题&#xff0c;因为这些表单功能新增的。我这里做了一个简单的练习&#xff0c;方便参考。如果完全兼容的话&#xff0c;那我们写表单的时候就省了很多代码以及各种判断。HTML5表单新功能解析#da{width:350px;height:600px;margin:0 au…

python子类继承父类属性实例_Python实现子类调用父类的初始化实例

前言 python中进行面向对象编程&#xff0c;当在子类的实例中调用父类的属性时&#xff0c;由于子类的__init__方法重写了父类的__init__方法&#xff0c;如果在子类中这些属性未经过初始化&#xff0c;使用时就会出错。 例如以下的代码: class A(object): def __init__(self):…

opencv画框返回坐标 python_[python]依靠pynput和pyautogui替换ahk

autohotkey当然是不错的工具&#xff0c;但是这个东西的社群一直发展的不行。从开始学习python以后&#xff0c;我就不时会希望能找到别的工具替代ahk。Python的众多包里面确实是有对应的工具的&#xff1a;模拟鼠标和键盘的操作可以用pyautogui&#xff0c;而捕捉热键则可以使…

Hadoop SequenceFile

apache原文&#xff1a;http://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/io/SequenceFile.html 概念&#xff1a; SequenceFile是一个由二进制序列化过的key/value的字节流组成的文本存储文件&#xff0c;它可以在map/reduce过程中的input/output 的format时被使…

机器学习算法平台alink_Alink漫谈(十二) :在线学习算法FTRL 之 整体设计

Alink漫谈(十二) &#xff1a;在线学习算法FTRL 之 整体设计[Toc]0x00 摘要Alink 是阿里巴巴基于实时计算引擎 Flink 研发的新一代机器学习算法平台&#xff0c;是业界首个同时支持批式算法、流式算法的机器学习平台。本文和下文将介绍在线学习算法FTRL在Alink中是如何实现的&a…

探测器反向偏压_近红外和可见光双模有机光电探测器

更多精彩&#xff0c;点击上方蓝字关注我们&#xff01;中英标题近红外和可见光双模有机光电探测器Near-infrared and Visible Light Dual-mode Organic Photodetectors图文导读研究报告了一种具有三层可见光吸收体/光学间隔层/近红外(NIR)光吸收体结构的双模有机光电探测器(OP…

html里post请求404,请求登陆页面post请求404错误,OPTIONS请求通过

点击登录的时候option请求是通过的&#xff0c;但post请求失败。服务端代码app.js&#xff1a;const express require(‘express’)const bodyParser require(‘body-parser’)const cors require(‘cors’)const router require(’./router/index’)// 创建 express 应用c…

python贪吃蛇毕业设计_【干货|python项目实例——贪吃蛇】- 环球网校

【摘要】当今世界充满了各种数据&#xff0c;而python是其中一种的重要组成部分。然而&#xff0c;若想其有所应用&#xff0c;我们需要对这些python理论进行实践。其中包含很多有趣的的过程&#xff0c;然后将其用于某些方面。其中一种应用就是python项目实例。今天环球网校的…

PWA即将推向所有Chrome平台

\看新闻很累&#xff1f;看技术新闻更累&#xff1f;试试下载InfoQ手机客户端&#xff0c;每天上下班路上听新闻&#xff0c;有趣还有料&#xff01;\\\大多数人应该都听说了微软已经着手在Windows商店中增加PWA&#xff0c;这是一个重磅消息&#xff01;\\\\渐进增强式Web应用…

c++代码转为go_Go语言学习笔记六--string编码

分解探索string编码转为byte数组func main() {s : "Hi小智加油!"fmt.Println("len(s):",len(s)) //len(s): 15 为什么是15呢?for _, v : range []byte(s) {fmt.Printf("%X ",v) //%X 转为16进制//48 69 E5 B0 8F E6 99 BA E5 8A A0 E6 B2 B9 21…

steam游戏时长计算机,我加入steam五年了,盘点下我买过的22款正版单机游戏

我加入steam五年了&#xff0c;盘点下我买过的22款正版单机游戏2020-02-17 10:50:07104点赞72收藏37评论大家好吖&#xff0c;在2015年的时候朋友就推荐了我入坑steam&#xff0c;不过那个时候更多的知道这是个dota启动器&#xff0c;慢慢的steam也越来越出名啦&#xff0c;中国…

AdPlayBanner:功能丰富、一键式使用的图片轮播插件

概述 AdPlayBanner&#xff1a;功能丰富、一键式使用的图片轮播插件详细 代码下载&#xff1a;http://www.demodashi.com/demo/11312.html AdPlayBanner是一个Android平台基于ViewPager实现的轮播图插件&#xff0c;主要用以自动或者手动地播放轮播图&#xff0c;提供了Fresco、…