Hadoop大数据-HDFS的Shell操作


前言

上一节,讲解了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界面。
HDFS web

注意:

  1. ip地址为namenode服务所在的服务器的ip地址
  2. 访问NameNode web管理的电脑需要与NameNode服务器处于局域网内(注意关闭防火墙等)

通过访问端口为50090的网页查看SecondaryNameNode的信息。
可以查看Hadoop的版本、NameNode的入口地址,以及Checkpoint等信息,如图所示。
HDFS界面
通过NameNode web管理界面可以查看HDFS启动过程
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
HDFS操作命令
hdfs常用命令
可以使用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
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 hdfs api
配置java开发环境
配置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的常见操作方法做了简单介绍,掌握需要结合实际操作过程,实验操作手册请在下载专区下载。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄晴风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值