几种访问HDFS文件的客户端的总结

HDFS是英文Hadoop Distributed File System的缩写,中文翻译为Hadoop分布式文件系统,它是实现分布式存储的一个系统,所以分布式存储有的特点,HDFS都会有,HDFS的架构图:

上图中HDFS的NameNode其实就是对应着分布式存储的Storage master,主要是用来存储元数据的,根据这些元数据就可以管理所有的机器节点和数据块

HDFS的DataNodes其实就是对应着分布式存储的Storage slaves,主要就是真正存储数据的

在HDFS中,一个大文件会被分成若干个数据块,所有的数据块都是分布式的存储在多个DataNode上。每个数据块都可以备份多个以提高数据块的高可用性,上图的Replication就是表示数据块的备份

上图的Rack是机架的意思,也就是说机器可以放在不同的机架上

上图还有一个Client,这个其实就是使用HDFS的客户端,这个客户端可以做如下的操作:

  1. 操作NameNode上的元数据
  2. 向DataNode上写数据
  3. 向DataNode上读数据

这个Client可以有很多种,:HDFS WEB UI、HDFS Shell命令以及Http方式访问HDFS。我们来分别总结下。

在安装HDFS的时候,除了NameNode和DataNode两个角色外,我们还发现有一个SecondaryNameNode,这个角色主要是为了提高NameNode的性能而存在的,我们后面会详细讲解

HDFS WEB UI

当我们启动HDFS集群后,然后通过http://master:50070/去访问HDFS WEB UI的时候,我们会经常使用Utilities下的Browse the file system去查看HDFS中的文件,如下:

然后就会出现HDFS中的根目录下所有的文件:

上面的方式是我们常见的访问HDFS文件的方式之一,这种使用的方式也是很方便的。

当我们启动HDFS集群后,我们可以通过http://master:50070来访问HDFS集群,其中,master是NameNode所在机器的名称。下面的就是HDFS WEB UI的七个大模块:

这篇文章,我们重点分别来详细看一下Overview、Datanodes以及Utilities三个模块

Overview

  • 第1处的master:9999表示当前HDFS集群的基本路径。这个值是从配置core-site.xml中的fs.defaultFS获取到的。
  • 第2处的Started表示集群启动的时间
  • 第3处的Version表示我们使用的Hadoop的版本,我们使用的是2.7.5的Hadoop
  • 第4处的Compiled表示Hadoop的安装包(hadoop-2.7.5.tar.gz)编译打包的时间,以及编译的作者等信息
  • 第5处的Cluster ID表示当前HDFS集群的唯一ID
  • 第6处的Block Pool ID表示当前HDFS的当前的NameNode的ID,我们知道通过HDFS Federation (联盟)的配置,我们可以为一个HDFS集群配置多个NameNode,每一个NameNode都会分配一个Block Pool ID

Summary

  • 第1处的Security is off表示当前的HDFS集群没有启动安全机制
  • 第2处的Safemode is off表示当前的HDFS集群不在安全模式,如果显示的是Safemode is on的话,则表示集群处于安全模式,那么这个时候的HDFS集群是不能用的
  • 第3处表示当前HDFS集群包含了3846个文件或者目录,以及1452个数据块,那么在NameNode的内存中肯定有3846 + 1452 = 5298个文件系统的对象存在
  • 第4处表示NameNode的堆内存(Heap Memory)是312MB,已经使用了287.3MB,堆内存最大为889MB,对
  • 第5处表示NameNode的非堆内存的使用情况,有效的非堆内存是61.44MB,已经使用了60.36MB。没有限制最大的非堆内存,但是非堆内存加上堆内存不能大于虚拟机申请的最大内存(默认是1000M)
  • 第6处的Configured Capacity表示当前HDFS集群的磁盘总容量。这个值是通过:Total Disk Space - Reserved Space计算出来的。Total Disk Space表示所在机器所在磁盘的总大小,而Reserved Space表示一个预留给操作系统层面操作的空间。Reserved space空间可以通过dfs.datanode.du.reserved(默认值是0)在hdfs-site.xml文件中进行配置。我们这边的总容量为什么是:33.97GB呢,我们可以通过du -h看一下两个slave的磁盘使用情况,如下:

上面 17GB + 17GB = 34GB,而且我们没有配置Reserved Space,所以HDFS总容量就是33.97GB(有一点点的误差可以忽略)

  • 第7处DFS Used表示HDFS已经使用的磁盘容量,说白了就是HDFS文件系统上文件的总大小(包含了每一个数据块的副本的大小)
  • 第8处Non DFS Used表示在任何DataNodes节点上,不在配置的dfs.datanode.data.dir里面的数据所占的磁盘容量。其实就是非HDFS文件占用的磁盘容量

配置dfs.datanode.data.dir就是DataNode数据存储的文件目录

  • 第9处DFS Remaining = Configured Capacity - DFS Used - Non DFS Used。这是HDFS上实际可以使用的总容量
  • 第10处Block Pool Used表示当前的Block Pool使用的磁盘容量
  • 第11处DataNodes usages%表示所有的DataNode的磁盘使用情况(最小/平均/最大/方差)
  • 第12处Live Nodes表示存活的DataNode的数量。Decommissioned表示已经下线的DataNode
  • 第13处Dead Nodes表示已经死了的DataNode的数量。Decommissioned表示已经下线的DataNode
  • 第14处Decommissioning Nodes表示正在下线的DataNode的数量。
  • 第15处Total Datanode Volume Failures表示DataNode上数据块的损坏大小
  • 第16处Number of Under-Replicated Blocks表示没有达到备份数要求的数据块的数量
  • 第17处Number of Blocks Pending Deletion表示正要被删除的数据块
  • 第18处Block Deletion Start Time表示可以删除数据块的时间。这个值等于集群启动的时间加上配置dfs.namenode.startup.delay.block.deletion.sec的时间,其中配置dfs.namenode.startup.delay.block.deletion.sec默认是0秒

Datanodes

上面有一个Admin State我们有必要说明下,Admin State可以取如下的值:

  1. In Service,表示这个DataNode正常
  2. Decommission In Progress,表示这个DataNode正在下线
  3. Decommissioned,表示这个DataNode已经下线
  4. Entering Maintenance,表示这个DataNode正进入维护状态
  5. In Maintenance,表示这个DataNode已经在维护状态

我们这里详细总结下Browse the file system,对于Logs我们在HDFS日志的查看总结中讲解

当我们点击Browse the file system时,我么会进入到如下的界面:

上图每一个字段的解释如下:

  • Permission:表示该文件或者目录的权限,和Linux的文件权限规则是一样的
  • Owner:表示该文件或者目录的所有者
  • Group:表示该文件或者目录的所有者属于的组
  • Size:表示该文件或者目录的大小,如果是目录的话则一直显示0B
  • Last Modified:表示该文件或者目录的最后修改时间
  • Replication:表示该文件或者目录的备份数,如果是目录的话则一直显示0
  • Block Size:表示该文件的数据块的大小,如果是目录的话则一直显示0B
  • Name:表示文件或者目录的名字

我们可以通过鼠标点击Name来访问对应的文件目录或者文件:

当我们访问的是目录的时候,则是去查看该目录下有哪些子文件或者子目录。

当我们访问的是文件的时候,我们查看的是文件的详细信息,比如,我们访问文件/user/omneo.csv文件:

注意:如果你的文件非常大的时候,不建议点击Download连接,因为你的电脑会卡死的

HDFS Shell命令

HDFS提供了和Linux类似的命令来访问文件系统,比如在Linux中想看下文件目录/home/hadoop-twq/test中有哪些文件,我们可以执行:

ls /home/hadoop-twq/test

  

那么在HDFS中也存在ls命令查看某个文件目录中有哪些文件,比如:

hadoop fs -ls hdfs://master:9999/user/hadoop-twq/test

  

当然,我们也可以将hdfs://master:9999去掉,如下:

hadoop fs -ls /user/hadoop-twq/test

  

那为什么可以去掉呢?因为当我们执行hadoop fs的命令的时候,程序会自动去Hadoop的配置core-site.xml中读取配置fs.defaultFS的值

## hdfs dfs效果和hadoop fs的效果是一模一样的
hdfs dfs -ls hdfs://master:9999/user/hadoop-twq/test

  

Hadoop官网的 https://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-common/FileSystemShell.html

HDFS文件恢复机制

有一个命令我们得特别强调下,那么就是rm的命令,HDFS中的rm命令是删除文件的意思,但是用这个命令删除文件的时候并不是真正的删除,而是将文件放到对应的Trash目录中(其实和window电脑的回收站是一样的意思),但是这个Trash机制默认不是打开的,我们需要在core-site.xml中打开如下的配置:

<!--单位是:分钟。默认值是0,表示禁用Trash机制-->
<!--下面的意思是保存删除的文件在.Trash文件目录中5分钟-->
<property>
<name>fs.trash.interval</name>
<value>5</value>
</property>

  

那么在一个HDFS文件被删除后,5分钟之内还是可以从Trash目录中恢复出来的。比如,我们删除一个文件:

hadoop fs -rm -r /user/hadoop-twq/cmd-20180326

那么上面删除的文件就会move到文件目录hdfs://master:9999/user/hadoop-twq/.Trash/180326230000/user/hadoop-twq/下,保存5分钟,在5分钟之内我们都可以通过下如的命令进行数据的恢复:

adoop fs -cp hdfs://master:9999/user/hadoop-twq/.Trash/180326230000/user/hadoop-twq/* /user/hadoop-twq

如果我们确定直接删除文件,并不需要进行保存的话,我们可以选择不保存文件到Trash目录下:

hadoop fs -rm -r -skipTrash /user/hadoop-twq/cmd-20180326

  

Http方式访问HDFS

在使用Http访问HDFS之前,我们需要打开webhdfs,可以通过如下的配置打开:

<!--打开NameNode和DataNode的 WebHDFS (REST API)-->
<!-- 这个参数默认是ture,即默认WebHDFS是打开的-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

  

然后,我们可以在Linux上使用命令curl通过http url的方式访问HDFS文件,比如:

curl -i  "http://master:50070/webhdfs/v1/user/hadoop-twq/cmd/error.txt?op=LISTSTATUS"

  

返回的是一个Json,如下:

HTTP/1.1200 OK
Cache-Control: no-cache
Expires: Sun,27 Jan 201901:03:02 GMT
Date: Sun,27 Jan 201901:03:02 GMT
Pragma: no-cache
Expires: Sun,27 Jan 201901:03:02 GMT
Date: Sun,27 Jan 201901:03:02 GMT
Pragma: no-cache
Content-Type: application/json
Transfer-Encoding: chunked
Server:Jetty(6.1.26)

{
"FileStatuses":
{"FileStatus":
[
{
"accessTime":1543310078655,  ## 表示访问时间
"blockSize":134217728,       ## 表示设置的数据块的大小(这里是128M)
"childrenNum":0,             ## 表示含有多少个子文件
"fileId":36514,              ## 唯一ID
"group":"supergroup",        ## 文件所属组
"length":0,                  ## 文件的大小
"modificationTime":1543310078685,     ## 文件修改时间
"owner":"hadoop-twq",        ## 文件所有者
"pathSuffix":"",             ## 路径后缀
"permission":"644",          ## 文件权限
"replication":1,             ## 文件对应的数据块的备份数
"storagePolicy":0,           ## 存储策略
"type":"FILE"                ## 类型,这里是文件
}
]
}
}

  

原文地址:https://www.cnblogs.com/tesla-turing/p/11488100.html

时间: 2024-10-27 18:20:56

几种访问HDFS文件的客户端的总结的相关文章

http访问hdfs文件的调研

1. HTTPFS: 基于HTTP操作hadoop hdfs文件系统 http://my.oschina.net/cloudcoder/blog/277426 2. 利用JavaAPI访问HDFS的文件     http://blog.csdn.net/zhangzhaokun/article/details/5597433

Hadoop HDFS (3) JAVA访问HDFS之二 文件分布式读写策略

先把上节未完成的部分补全,再剖析一下HDFS读写文件的内部原理 列举文件 FileSystem(org.apache.hadoop.fs.FileSystem)的listStatus()方法可以列出一个目录下的内容. public FileStatus[] listStatus(Path f) throws FileNotFoundException, IOException; public FileStatus[] listStatus(Path[] files) throws FileNot

利用JavaAPI访问HDFS的文件

body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}

SpringMVC对静态文件的3种访问方法

servlet在找页面时,走的是dispatcherServlet路线.找不到的时候会报404错误. 加上这个默认的servlet时候,servlet在找不到的时候会去找静态的内容. 访问到静态的文件,如jpg,js,css 如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了. 目的:可以正常访问静态文件,不要找不到静态文件报40

Nginx访问PHP文件的File not found错误处理,两种情况

Nginx访问PHP文件的File not found错误处理,两种情况 这个错误很常见,原有有下面两种几种 1. php-fpm找不到SCRIPT_FILENAME里执行的php文件 2. php-fpm不能访问所执行的php,也就是权限问题 第一种情况 可以在你的location php 里面添加当文件不存在时返回404而不是交给php-fpm进行处理 location ~ \.php${ ... #文件不存在转404 try_files $uri = 404; ...} 然后,在你的配置文

windows通过thrift访问hdfs

thirift是一个支持跨种语言的远程调用框架,通过thrift远程调用框架,结合hadoop1.x中的thriftfs,编写了一个针对hadoop2.x的thriftfs,供外部程序调用. 1.准备工作 1.1 编译boost boost下载地址:http://120.52.72.39/jaist.dl.sourceforge.net/c3pr90ntcsf0/project/boost/boost/1.60.0/boost_1_60_0.tar.gz 解压boost,windows运行boo

HDFS简介及用C语言访问HDFS接口操作实践

一.概述 近年来,大数据技术如火如荼,如何存储海量数据也成了当今的热点和难点问题,而HDFS分布式文件系统作为Hadoop项目的分布式存储基础,也为HBASE提供数据持久化功能,它在大数据项目中有非常广泛的应用. Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.HDFS是Hadoop项目的核心子项目,是一种具有高容错性.高可靠性.高可扩展性.高吞吐量等特征的分

【大数据系列】HDFS文件权限和安全模式、安装

HDFS文件权限 1.与linux文件权限类型 r:read w:write x:execute权限x对于文件忽略,对于文件夹表示是否允许访问其内容 2.如果linux系统用户sanglp使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是sanglp 3.HDFS的权限目的:阻止好人做错事,而不是阻止坏人做坏事. 安全模式 1. namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作. 2. 一旦在内存中成功建立文件系

简单的手机访问电脑文件方法,方便写完页面即使在移动端测试效果,不使用模拟器就能玩了

手机想测问电脑写好的页面文件时,这时部分人人会想到,拷内存卡,拷优盘,直接拷手机里(当然了 用模拟器的话这里就例外了),.....普通人一般用这些复制来复制去的方法,作为一个程序员,不自觉的就感觉,这好麻烦啊,或者说好low的操作方法啊....作为一个懂电脑的人,当然不能靠这种方法了,至少不能用数据先了,优盘了,内存卡了这些媒介来拷贝吧,有些人就想了,那我打开笔记本的蓝牙,wifi把文件传手机上,至少看起来没用最low的方法,但是这依然不符合我们的风格啊. 那还想怎么玩呢?直接访问电脑文件!说到