前言
上一节,讲解了HDFS的原理,以及相关的hadoop系统安装文档,参考文档可以轻松的搭建好,Hadoop伪分布式集群环境,这一节主要讲解一下如何操作HDFS,及HDFS文件的存储方式。
一、如何操作HDFS?
通过相关的途径我们可以对HDFS文件存储系统进行操作,上传文件,管理文件等一系列功能。
HDFS 常见的访问方式
- 通过Web Console
- 通过Shell命令
- 通过Jave API
一、通过Web Console
NameNode web管理端口50070,可以查看文件系统概况,数据节点信息,快照,目录结构及文件属性等。
如:在浏览器中输入192.168.80.138:50070,就可以查看HDFS的 Web界面。
注意:
- ip地址为namenode服务所在的服务器的ip地址
- 访问NameNode web管理的电脑需要与NameNode服务器处于局域网内(注意关闭防火墙等)
通过访问端口为50090的网页查看SecondaryNameNode的信息。
可以查看Hadoop的版本、NameNode的入口地址,以及Checkpoint等信息,如图所示。
通过NameNode web管理界面可以查看HDFS启动过程
单击菜单【Startup Progress】可以查看HDFS的启动过程,如图所示。可以看到HDFS启动经历了如下4个阶段。
(1)加载文件的元信息fsimage。
(2)加载操作日志文件edits。
(3)操作检查点。
(4)自动进入安全模式,检查数据块的副本率是否满足要求。当满足要求后,退出安全模式。
二、通过Shell命令操作HDFS
HDFS Shell是由一系列类似Linux Shell的命令组成的。
命令大致可分为操作命令、管理命令、其他命令三类。
使用的命令以$
开头时,代表当前用户为普通用户;以#
开头时,代表当前用户为root用户。
命令行中的$
或者#
是不需要输入的,例如,输入命令“$ hdfs dfs -ls /
”时只需要在终端命令行输入“hdfs dfs -ls /
”即可。
操作命令
hdfs dfs
可以使用hadoop -fs -help命令获取帮助文档。
以下详解一下几个常用命令:
-
ls命令
语法为类似Linux系统中的ls命令hadoop fs -ls [-d] [-h] [-R] <args>
其中各项参数如下:
-d:将目录显示为普通文件
-h:使用便于操作人员读取的单位信息格式
-R:递归显示所有子目录的信息
示例代码如下:$ hadoop fs -ls /
展示HDFS根目录下所有文件及文件夹
-
mkdir命令
语法格式hadoop fs -mkdir [-p] <paths>
其中-p表示创建子目录前检查路径是否存在,如果不存在则创建相应的各级目录。
示例代码:$hadoop fs -mkdir -p /hello/hadoop
上述代码将在根目录下创建hello目录并在hello目录下创建hadoop目录
-
put命令
将本地系统上的文件上传到HDFS系统上,语法格式:hadoop fs -put [-f] [-p] <locationsrc> <det>
选项说明:
-f:覆盖目标文件。
-p:保留访问和修改时间、权限。
示例代码:$hadoop fs -put -f install.log /
管理命令
hdfs dfsadmin
- -safeadmin enter | leave | get | wait:安全模式命令。安全模式是NameNode的一种状态,在这种状态下,NameNode不接受对名字空间的更改(只读);不复制或删除块。 NameNode在启动时自动进入安全模式,当配置块的最小百分数满足最小副本数的条件时,会自动离开安全模式。
- -upgradeProgress status | details | force:请求当前系统的升级状态、升级状态的细节、强制升级操作。
- -metasave filename:保存NameNode的主要数据结构到hadoop.log.dir属性指定的目录下的 文件中。
- -help:显示帮助信息。
- -report [-live] [-dead] [-decommissioning]:报告集群的状态,可以显示活动的、死亡的或正在被停用的数据节点。
- -safemode <enter | leave |get | wait>:控制安全模式。可以通过命令进入、离开或获取安全模式的状态。
- -saveNamespace:强制将NameNode的编辑日志保存到磁盘中,以确保在系统崩溃时不会丢失对文件系统的更改。
- -rollEdits:强制将NameNode的编辑日志滚动,以便可以重新使用编辑日志文件。
- -restoreFailedStorage true|false|check:尝试恢复失败的存储位置,如果存储位置失败,则将其设置为true,如果存储位置正常,则将其设置为false,如果检查存储位置的状态,则将其设置为check。
- -refreshNodes:重新加载节点管理器的配置文件,以便管理员可以添加或删除数据节点。
- -setQuota …:设置目录的配额。
- -clrQuota …:清除目录的配额。
- -setSpaceQuota …:设置目录的空间配额。
- -clrSpaceQuota …:清除目录的空间配额。
- -finalizeUpgrade:完成升级操作,删除旧的NameNode和数据节点,并启用新的NameNode和数据节点。
- -rollingUpgrade <query | upgrade | finalize>:控制滚动升级操作。可以使用query命令来检查升级状态,使用upgrade命令来启动升级操作,使用finalize命令来完成升级操作。
其他命令
- namenode -format 命令用于格式化HDFS的NameNode
- hdfs zkfc 管理HDFS NameNode的故障转移
- hdfs fsck 检查HDFS文件系统的一致性
- hdfs balancer
在HDFS中,数据块可能会不均匀地分布在DataNode上,这可能会导致某些DataNode的负载比其他DataNode高。balancer命令会尝试重新分配数据块,使它们在DataNode之间的分布更加均匀。 - hdfs oiv 查看NameNode的离线镜像文件(通常是fsimage)
- hdfs oev 这个工具用于查看NameNode的编辑日志文件(通常是edits)
- hdfs snapshotDiff 比较两个HDFS快照之间的差异
- lsSnapshottableDir 用于列出所有可以创建快照的目录
三、通过JAVA API
配置java开发环境
主要API代码:
将本地文件拷贝到HDFS上
Configuration config =new Configuartion();
FileSystem hdfs = FileSystem.get(config);
Path srcPath = new Path(srcFile);
Path dstPath = new Path(dstFile);
hdfs.copyFromLocalFile(srcPath,dstPath);
srcfile是本地文件地址
dstfile是拷贝到hdfs上的地址
创建HDFS文件
Configuration config =new Configuartion();
FileSystem hdfs = FileSystem.get(config);
Path path = new Path(fileName);
FSDataOutputStream outputStream = hdfs.create(path);
//byte[] buff,文件内容
outputStream.write(buff,0,buff.length);
总结
本章对HDFS的常见操作方法做了简单介绍,掌握需要结合实际操作过程,实验操作手册请在下载专区下载。