HDFS命令

HDFS源码查看

1-HDFS的Shell命令

bash 复制代码
# 查看 hadoop 命令的脚本
# which查看可执行文件的位置
which hadoop
# 结果:
/usr/local/hadoop/bin/hadoop
# 查看源码:
cat /usr/local/hadoop/bin/hadoop

2-在Maven工程中配置Hadoop关联仓库

xml 复制代码
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.7.3</version>
</dependency>

HDFS常用操作

01-查看帮助文档

bash 复制代码
# 查看yarn帮助文档
yarn
# 查看HDFS帮助文档
hdfs
# 查看Hadoop帮助文档
hadoop

02-显示文件/目录

bash 复制代码
# hadoop fs 与 hdfs dfs 都调用的 FsShell 类
hdfs dfs -ls path
hadoop fs -ls path(常用)

# 标准写法
hadoop fs -ls hdfs://ns1/       #当然,ns1是我们在hdfs-site.xml中配置时命名的,可以改名

# 简写,默认是HDFS系统下的根目录
hadoop fs -ls [path]

# 最大单位显示(文件大小显示为最大单位)
hadoop fs -ls -h path   

# 递归显示(如果有子目录,则递归显示)
hadoop fs -ls -R path

# 多个显示参数(递归打印并且最大单位显示文件)
hadoop fs -ls -h -R path   

03-上传文件/目录

上传:从主机本地系统(linux)到集群HDFS系统.

3.1-put

上传新文件
bash 复制代码
# 标准写法:(前面是Linux本地文件地址,后面是hdfs地址)
hadoop fs -put /home/hadoop/test.txt hdfs://ns1/
# 简写:
hadoop fs -put /home/hadoop/test.txt /

# 上传文件并对文件重命名
hadoop fs -put test.txt /t1.txt
# 当上传文件时,指定的hdfs目录存在同样的文件名时,会报file exists(文件已存在)错误。
上传多个文件
bash 复制代码
# 一次上传多个文件到指定HDFS路径
hadoop fs -put f1 f2 /data  
上传目录
bash 复制代码
# 上传目录
hadoop fs -put dir path
#上传并重命名目录
hadoop fs -put mypkg /newpkg    
覆盖上传
bash 复制代码
#如果指定HDFS目录中有同名文件会被覆盖
hadoop fs -put -f ~/hadoop/test.txt /   
#建议在上传目录的时候不覆盖目录

3.2-copyFromLocal

基本弃用,和put的用法雷同,老版本的hadoop用这种方式.

上传文件并重命名
bash 复制代码
hadoop fs -copyFromLocal file:/test.txt hdfs:/test2.txt
覆盖上传
bash 复制代码
hadoop fs -copyFromLocal -f test.txt /test.txt

04-下载文件/目录

下载:从集群HDFS到本地Linux文件系统.

4.1-get

拷贝文件到本地目录
bash 复制代码
hadoop fs -get hdfs:/test.txt /home/hadoop/
拷贝文件并重命名
bash 复制代码
hadoop fs -get /test.txt ~/hadoop/test001.txt

4.2-copyToLocal

拷贝文件到本地目录
bash 复制代码
hadoop fs -copyToLocal hdfs:/test.txt file:/home/hadoop/
拷贝文件并重命名
bash 复制代码
hadoop fs -copyToLocal /test.txt file:/home/hadoop/test.txt

05-拷贝文件/目录

从本地到HDFS

bash 复制代码
:"
cp命令:默认都是hdfs目录,如果要从本地上传到hdfs,本地的文件目录必须是 file:绝对路径;如果本地文件目录使用相对路径,会报错(no such file or directory)
"
hadoop fs -cp file:/home/hadoop/test/f2 /test_f2   

从HDFS到HDFS

bash 复制代码
 hadoop fs -cp hdfs://ns1/haha.sh hdfs://ns1/test  # 完整写法  hdfs://ns1 == /
 hadoop fs -cp hdfs:/exe.sh hdfs:/test             # 半完整写法
 hadoop fs -cp /haha.sh /data                      # 简单写法 

06-移动文件/目录

bash 复制代码
:"
hdfs之间的移动 叫 mv
windows与hdfs之间的叫上传或下载(sz,rz)
"

# 标准写法
hadoop fs -mv hdfs:/test.txt hdfs:/dir/test.txt
# 简写方案
hadoop fs -mv /test_f2 /test

07-删除文件/目录

删除指定文件

bash 复制代码
hadoop fs -rm /a.txt

删除全部txt文件

bash 复制代码
hadoop fs -rm /*.txt

递归删除全部文件和目录

bash 复制代码
# hdfs不推荐写法 但是也能对付删(不推荐)   系统显示已弃用(deprecated)
hadoop fs -rmr /dir/
# hdfs的推荐写法(推荐)
hadoop fs -rm -r /dir/

删除之后不放到回收站

bash 复制代码
#  跳过垃圾桶,直接删除
hadoop fs -rm -skipTrash /dir

08-读取文件

bash 复制代码
# 一般不建议在hdfs中查看文件内容,因为打开速度慢,大文件的打开更慢
hadoop fs -cat /test.txt      
# 统计表中的行数(仅限于tetxfile格式的表,比如orc格式的这种方法统计的结果远比count(1)的结果小的多,因为orc文件被压缩了)
hadoop fs -cat /user/hive/warehouse/gbd_kj_dms_safe.db/ods_audit_log/dt=20221212/* | wc -l

# 读取HDFS文件的尾部内容
:"
此处和linux中的区别 :
1.此处没有查看 head 的命令  
2.此处tail查看的是尾部1k字节的内容,而linux中查看的是尾部10行的内容
"
hadoop fs -tail /test.txt   

09-创建空文件

bash 复制代码
# z 代表 zero
hadoop fs - touchz /newfile.txt

10-合并小文件

bash 复制代码
#读取本地文件内容追加到HDFS文件
hadoop fs -appendToFile file:/test.txt hdfs:/newfile.txt 

# eg1:Linux文件到hdfs文件    将Linux上的test.txt文件内容追加到hdfs的large.txt文件中(如果此文件不存在则会自动创建)
hadoop fs -appendToFile /home/hadoop/test.txt(Linux文件地址) /cgz/large.txt(hdfs的文件地址)

# eg2:hdfs文件到hdfs文件     将hdfs上存在的文件test.txt追加到hdfs的large.txt文件中
hadoop fs -cat test.txt | hadoop fs -appendToFile - large.txt
:' 中间的 - 代表的含义:
官网中这样说:If <localSrc> is -,then the input is read from stdin.
如果localSrc是-,那么输入的内容是从标准输入读取,那么管道符'|'前面的[hadoop fs -cat test.txt]就相当于标准输入
'

# 合并小文件还有另外一个思路:getmerge    将hdfs上的多个文件合并到linux本地的一个小文件(原hdfs上的文件不变)
# 将hdfs上/cgz目录下所有的txt文件合并到linux本地的merge.txt文件(文件不存在会自动创建)
hadoop fs -getmerge /cgz/*.txt /home/hadoop/merge.txt 

11-创建目录

bash 复制代码
# 同时创建多个同级目录
hadoop fs -mkdir /newdir /newdir2   
# 递归创建目录 -p
hadoop fs -mkdir -p /newpkg/newpkg2/newpkg3

12-修改文件副本数

bash 复制代码
hadoop fs -setrep -R -w 2 /test.txt         
:"
-R 递归改变目录下所有文件的副本数。
-w 等待副本数调整完毕后返回。可理解为加了这个参数就是阻塞式的了。
另一种方法是进入配置文件/usr/local/hadoop/etc/hadoop/hdfs-site.xml修改replication参数值 
"

13-获取文件/目录大小

bash 复制代码
#显示HDFS根目录中各文件和文件夹大小
hadoop fs - du / 
#以最大单位显示HDFS根目录中各文件和文件夹大小
hadoop fs -du -h /  #会出现两列数字,第一列为单个文件实际大小,第二列为备份(副本)大小
#仅显示HDFS根目录大小,即各文件和文件夹大小之和
hadoop fs -du -s /

#拓展:linux中查看根目录下所有子目录下的大小
du -h  --max-depth=1

14-获取目录的信息

bash 复制代码
# 显示HDFS根目录在物理空间的信息   / hdfs的根目录
hadoop fs -count [-h] / 
# 查询结果:
         258         1609         1453656609 /
         258        1.6 K              1.4 G / # 加 -h
:"
第一个数值 : 表示/下的目录的个数(包括其本身).
第二个数值 : 表示/下的文件的个数.
第三个数值 : 表示/下的文件所占的空间大小,这个大小是不计算副本的个数的.
如果不加-h的话,显示的是字节数.
"

15-判断目录、文件是否存在

bash 复制代码
hadoop fs -test -e /app-data/$dt

HDFS管理工具

1-report

bash 复制代码
# 查看HDFS文件系统的基本信息和统计信息.
hdfs dfsadmin -report

2-safemode

bash 复制代码
# 获取安全模式状态
hdfs dfsadmin -safemode get

# 进入安全模式
hdfs dfsadmin  -safemode enter

# 离开安全模式
hdfs dfsadmin -safemode leave

# 等待安全模式结束
hdfs dfsadmin -safemode wait

:"
安全模式是namenode的一种状态,在这种状态下,namenode不接受对名字空间的更改(只读);不复制或删除块.
namenode在启动时自动进入安全模式,当配置块的最小百分数满足最小副本数的条件时,会自动离开安全模式.
每次hdfs在启动的时候都会进入安全模式进行自检,如果自检无误,则退出安全模式;自检的内容是 namenode 中存储的元数据是否可以和 datanode 中的信息对上.
"

3-metasave filename

bash 复制代码
# 保存 namenode 的主要数据结构到 hadoop.log.dir 属性指定的目录下的 <filename> 文件中。
# 在 hadoop 日志目录下创建 namenode 的数据结构信息
hdfs dfsadmin -metasave  namenode_data

4-refreshNodes

bash 复制代码
:"
此命令在新增节点或注销节点时用到.
重新读取hosts和exclude文件,使新的节点或需要退出集群的节点能够被NameNode重新识别.
"
hdfs dfsadmin -refreshNodes
相关推荐
2401_883041083 小时前
新锐品牌电商代运营公司都有哪些?
大数据·人工智能
青云交3 小时前
大数据新视界 -- 大数据大厂之 Impala 性能优化:融合机器学习的未来之路(上 (2-1))(11/30)
大数据·计算资源·应用案例·数据交互·impala 性能优化·机器学习融合·行业拓展
Json_181790144806 小时前
An In-depth Look into the 1688 Product Details Data API Interface
大数据·json
WX187021128737 小时前
在分布式光伏电站如何进行电能质量的治理?
分布式
Qspace丨轻空间8 小时前
气膜场馆:推动体育文化旅游创新发展的关键力量—轻空间
大数据·人工智能·安全·生活·娱乐
Elastic 中国社区官方博客9 小时前
如何将数据从 AWS S3 导入到 Elastic Cloud - 第 3 部分:Elastic S3 连接器
大数据·elasticsearch·搜索引擎·云计算·全文检索·可用性测试·aws
Aloudata10 小时前
从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?
大数据·apache·数据血缘·主动元数据·数据链路
不能再留遗憾了10 小时前
RabbitMQ 高级特性——消息分发
分布式·rabbitmq·ruby
水豚AI课代表10 小时前
分析报告、调研报告、工作方案等的提示词
大数据·人工智能·学习·chatgpt·aigc
茶馆大橘10 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud