当前位置:首页 > 行业动态 > 正文

hadoop存储文件命令

使用 hadoop fs -puthdfs dfs -put命令将本地文件上传至HDFS目标路径,如`hadoop fs -put localfile.txt /user

Hadoop存储文件命令详解

HDFS基础概念

Hadoop分布式文件系统(HDFS)是Hadoop的核心组件之一,用于存储大规模数据,HDFS采用主从架构,包含NameNode(管理元数据)和DataNode(存储实际数据),用户通过命令行工具hadoop fshdfs dfs(两者等价)与HDFS交互。


核心命令分类

操作类型 常用命令 功能描述
文件上传 put 将本地文件上传至HDFS
文件下载 get 从HDFS下载文件到本地
文件查看 catheadtail 查看文件内容
文件管理 lsrmmvcptouchz 列表、删除、移动、复制、创建文件
目录管理 mkdirrmdir 创建/删除目录
权限管理 chmodchown 修改权限/所有者
空间管理 du 查看目录/文件占用空间
辅助操作 -put-get-cat-copyFromLocal 命令缩写形式

详细命令解析

文件上传:putcopyFromLocal

  • 命令格式

    hadoop fs -put [本地路径] [HDFS路径]      # 上传文件或目录
    hadoop fs -copyFromLocal [本地路径] [HDFS路径] # 同put,推荐使用
  • 参数说明

    • -f:强制覆盖目标文件(默认不覆盖)
    • -p:保留文件权限、时间戳等属性
  • 示例

    # 上传单个文件(覆盖模式)
    hadoop fs -put -f /tmp/data.txt /user/hadoop/
    # 上传整个目录(保留权限)
    hadoop fs -copyFromLocal -p /local/data/ /user/hadoop/data/
  • 注意事项

    • 若目标路径已存在同名文件,默认会报错(需加-f覆盖)
    • 上传大文件时需确保客户端与DataNode网络连通

文件下载:getcopyToLocal

  • 命令格式

    hadoop fs -get [HDFS路径] [本地路径]      # 下载文件或目录
    hadoop fs -copyToLocal [HDFS路径] [本地路径] # 同get,推荐使用
  • 参数说明

    • -ignoreCrc:忽略CRC校验(谨慎使用)
    • -crc:显示CRC校验结果
  • 示例

    # 下载单个文件
    hadoop fs -get /user/hadoop/data.txt /tmp/
    # 下载目录(保留目录结构)
    hadoop fs -copyToLocal /user/hadoop/data/ /local/data/
  • 注意事项

    • 下载目录时需确保本地路径不存在冲突文件
    • CRC校验失败会导致下载中断(可通过-ignoreCrc跳过)

文件查看:catheadtail

  • 命令格式

    hadoop fs -cat [HDFS路径]               # 显示文件内容
    hadoop fs -head [HDFS路径]              # 显示文件前1KB内容
    hadoop fs -tail [HDFS路径]              # 显示文件末尾1KB内容
  • 示例

    # 查看完整文件内容
    hadoop fs -cat /user/hadoop/data.txt
    # 查看文件开头(适合大文件快速预览)
    hadoop fs -head /user/hadoop/log.txt
  • 注意事项

    • cat命令会加载整个文件到客户端,大文件可能导致内存溢出
    • 二进制文件(如图片、压缩包)直接查看会显示乱码

文件管理:rmmvcp

  • 删除文件

    hadoop fs -rm [HDFS路径]                # 删除文件
    hadoop fs -rm -r /path                  # 递归删除目录及内容
  • 移动/重命名

    hadoop fs -mv /source/path /target/path # 移动或重命名文件
  • 复制文件

    hadoop fs -cp /source/path /target/path # 复制文件到新位置
  • 示例

    # 删除空目录
    hadoop fs -rm -r /user/hadoop/empty_dir
    # 将文件移动到新目录
    hadoop fs -mv /user/hadoop/data.txt /user/hadoop/backup/

目录操作:mkdirrmdir

  • 创建目录
    hadoop fs -mkdir /path/to/dir           # 创建单层目录
    hadoop fs -mkdir -p /path/to/nested/dir # 创建多层目录
  • 删除目录
    hadoop fs -rmdir /path/to/dir          # 仅能删除空目录
  • 示例
    # 创建层级目录
    hadoop fs -mkdir -p /user/hadoop/data/year=2023/month=10/

权限管理:chmodchown

  • 修改权限
    hadoop fs -chmod 755 /path/to/file     # 设置文件权限(Owner: rwx, Group: r-x, Others: r-x)
  • 修改所有者
    hadoop fs -chown user:group /path/to/file # 修改文件所属用户和组
  • 示例
    # 赋予所有人读取权限
    hadoop fs -chmod a+r /user/hadoop/public.txt

空间管理:du

  • 命令格式
    hadoop fs -du -h /path                 # 查看文件/目录占用空间(带单位)
    hadoop fs -du -s -h /path              # 仅显示总大小
  • 示例
    # 查看目录总大小
    hadoop fs -du -s -h /user/hadoop/data/

创建空文件:touchz

  • 命令格式
    hadoop fs -touchz /path/to/file        # 创建一个0字节的空文件
  • 示例
    # 创建占位文件
    hadoop fs -touchz /user/hadoop/flag.txt

常见问题与解决方案

问题现象 原因分析 解决方案
put命令提示“权限不足” 当前用户无目标目录写入权限 使用chmod授予权限
联系管理员开通权限
get命令下载文件后内容为乱码 文件为二进制格式(如图片、压缩包) 使用-text参数强制按文本处理(慎用)
rm命令无法删除非空目录 HDFS默认不允许递归删除非空目录 添加-r参数强制递归删除
cat命令执行后无响应 文件过大导致客户端内存不足 改用headtail查看部分内容
copyFromLocal提示“路径不存在” 本地路径错误或文件未找到 检查本地路径拼写,确保文件存在

FAQs

Q1:执行hadoop fs -put时提示“No such file or directory”,如何解决?
A1:可能原因及解决步骤:

  1. 本地文件不存在:检查源文件路径是否正确,例如/tmp/data.txt是否存在。
  2. HDFS目标路径错误:确认目标路径是否合法,例如/user/hadoop/是否存在,若不存在,需先创建目录:
    hadoop fs -mkdir -p /user/hadoop/
  3. 权限不足:若目标目录属于其他用户且无写入权限,需申请权限或更换目录。

Q2:为什么hadoop fs -cat显示二进制文件内容为乱码?如何正确查看?
A2:原因及处理方法:

  • 原因cat命令直接输出文件字节流,二进制文件(如图片、视频)无法按文本解析。
  • 解决方案
    1. 下载到本地查看:使用get命令下载后通过本地工具打开。
      hadoop fs -get /user/hadoop/image.jpg /tmp/
    2. 使用-text参数:强制按文本处理(仅适用于可打印字符文件,谨慎使用):
      hadoop fs -cat -text /user/hadoop/log.txt
0