Hadoop 和 HBase 是大数据生态中两个核心组件,Hadoop 作为分布式存储与计算的基础框架,提供了 HDFS 分布式文件系统和 MapReduce 计算模型,而 HBase 则是基于 HDFS 构建的分布式、面向列的 NoSQL 数据库,适用于海量实时读写场景,掌握两者的常用命令是高效管理和操作大数据平台的基础,以下从 Hadoop 常用命令和 HBase 常用命令两部分展开详细介绍,并附相关 FAQs。

Hadoop 常用命令
Hadoop 命令主要通过 hadoop fs
、hadoop dfs
(已废弃,建议用 fs
)、hadoop jar
等工具执行,核心围绕 HDFS 文件系统的操作、MapReduce 任务的提交与管理以及集群状态监控。
HDFS 文件系统操作
(1)基本目录与文件管理
hadoop fs -ls <路径>
:列出指定路径下的文件和目录,hadoop fs -ls /
查看 HDFS 根目录。hadoop fs -mkdir -p <路径>
:递归创建目录,-p
确保父目录存在,如hadoop fs -mkdir -p /user/data/input
。hadoop fs -put <本地路径> <HDFS路径>
:上传本地文件到 HDFS,hadoop fs -put local.txt /user/data/
。hadoop fs -get <HDFS路径> <本地路径>
:从 HDFS 下载文件到本地,如hadoop fs -get /user/data/local.txt ./
。hadoop fs -mv <源路径> <目标路径>
:移动或重命名文件/目录,hadoop fs -mv /user/data/file1.txt /user/data/backup/
。hadoop fs -cp <源路径> <目标路径>
:复制文件/目录,支持跨目录操作,如hadoop fs -cp /user/data/input/* /user/data/processed/
。hadoop fs -rm -r <路径>
:递归删除文件或目录,-r
用于删除目录及其内容,hadoop fs -rm -r /user/data/temp
。hadoop fs -cat <文件路径>
:查看文件内容,类似 Linux 的cat
命令,如hadoop fs -cat /user/data/output/result.txt
。
(2)文件权限与所有者管理
hadoop fs -chown <用户:组> <路径>
:修改文件/目录的所有者和所属组,hadoop fs -chown hadoop:hadoop /user/data
。hadoop fs -chmod <权限模式> <路径>
:修改文件权限,如hadoop fs -chmod 755 /user/data/script.sh
(所有者可读写执行,组用户和其他用户可读执行)。hadoop fs -chgrp <组> <路径>
:修改文件所属组,如hadoop fs -chgrp data_group /user/data/file.txt
。
(3)文件信息与磁盘空间

hadoop fs -du -s -h <路径>
:统计目录或文件大小,-s
汇总总大小,-h
以人类可读格式(KB/MB/GB)显示,hadoop fs -du -s -h /user/data
。hadoop fs -df -h
:查看 HDFS 整体磁盘使用情况,包括总空间、已用空间、剩余空间等,如hadoop fs -df -h /
。hadoop fs -count <路径>
:统计指定路径下的文件数量、目录数量和总字节数,hadoop fs -count /user/data
。
MapReduce 任务管理
hadoop jar <jar包路径> <主类> <输入路径> <输出路径>
:提交 MapReduce 任务,hadoop jar wordcount.jar WordCount /input /output
。hadoop job -list
:列出所有正在运行和已完成的任务。hadoop job -kill <任务ID>
:终止指定任务,任务 ID 可通过-list
查看,如hadoop job -kill job_20240101001_0001
。hadoop job -status <任务ID>
:查看任务执行状态,包括 map 和 reduce 进度。
集群与节点管理
hadoop dfsadmin -report
:查看 HDFS 集群整体状态,包括 live 节点、dead 节点、磁盘使用情况等。hadoop dfsadmin -safemode enter/leave
:进入或离开安全模式(HDFS 启动时默认进入,用于维护操作)。hadoop dfsadmin -refreshNodes
:刷新节点列表,通常用于新增或退役节点后更新集群配置。
HBase 常用命令
HBase 命令通过 Shell 工具交互执行,启动方式为 hbase shell
,核心围绕表的管理、数据操作、RegionServer 状态监控等。
命名空间(Namespace)管理
命名空间类似于关系型数据库的数据库,用于隔离表资源。
create_namespace '命名空间名'
:创建命名空间,如create_namespace 'user_ns'
。list_namespace
:列出所有命名空间。drop_namespace '命名空间名'
:删除命名空间(需确保命名空间下无表),如drop_namespace 'user_ns'
。describe_namespace '命名空间名'
:查看命名空间详情,如describe_namespace 'user_ns'
。
表(Table)管理
(1)表的创建与删除
create '表名', '列族1', '列族2', ...
:创建表,指定列族,create 'user_info', 'base_info', 'extra_info'
。create '表名', {NAME => '列族', VERSIONS => 3, BLOCKSIZE => 128*1024}
:创建表时配置列族属性(版本数、块大小等)。list
:列出所有表。disable '表名'
:禁用表(删除表前需先禁用),如disable 'user_info'
。drop '表名'
:删除表,drop 'user_info'
。enable '表名'
:启用表,如enable 'user_info'
。is_disabled '表名'
:检查表是否被禁用,返回true
或false
。
(2)表结构修改
alter '表名', NAME => '新列族', METHOD => 'put'
:添加列族,如alter 'user_info', NAME => 'address'
。alter '表名', 'delete' => '列族名'
:删除列族,如alter 'user_info', 'delete' => 'extra_info'
。alter '表名', {NAME => '列族', VERSIONS => 5}
:修改列族属性(如版本数),如alter 'user_info', {NAME => 'base_info', VERSIONS => 5}
。
数据操作(DML)
(1)数据插入与查询
put '表名', '行键', '列族:列名', '值'
:插入或更新数据,put 'user_info', 'user001', 'base_info:name', '张三'
。get '表名', '行键'
:查询整行数据,如get 'user_info', 'user001'
。get '表名', '行键', '列族:列名'
:查询指定列的值,如get 'user_info', 'user001', 'base_info:name'
。scan '表名'
:全表扫描,查询所有数据,scan 'user_info'
。scan '表名', {STARTROW => '行键1', STOPROW => '行键2'}
:指定行键范围扫描,如scan 'user_info', {STARTROW => 'user001', STOPROW => 'user003'}
。scan '表名', {VERSIONS => 3}
:查询每个列的最新 3 个版本数据,如scan 'user_info', {VERSIONS => 3}
。
(2)数据删除
delete '表名', '行键', '列族:列名'
:删除指定列的最新版本数据,如delete 'user_info', 'user001', 'base_info:age'
。deleteall '表名', '行键'
:删除整行数据(包括所有列族和版本),如deleteall 'user_info', 'user001'
。truncate '表名'
:清空表数据(先禁用表,删除后重新创建),如truncate 'user_info'
。
Region 与集群管理
status
:查看 HBase 集群状态,包括 RegionServer 数量、表数量等。region_status '表名'
:查看表的 Region 分布情况,如region_status 'user_info'
。balance_switch true/false
:开启或关闭 Region 负载均衡,balance_switch true
。split '表名', '行键'
:手动分裂指定 Region,如split 'user_info', 'user010'
。compact '表名'
:手动触发 Major Compaction(合并 HFile 文件,清理过期数据),如compact 'user_info'
。
相关问答 FAQs
问题 1:Hadoop 中如何查看 HDFS 文件的最后 100 行内容?
解答:HDFS 没有直接类似 Linux tail
的命令,但可通过以下方式实现:
- 使用
hadoop fs -cat <文件路径> | tail -n 100
:将文件内容输出到终端后通过tail
截取最后 100 行,适用于小文件。 - 使用
hadoop fs -tail <文件路径>
:默认查看文件最后 1KB 内容(约 50 行),可通过修改dfs.tail
参数调整,但需重启集群,灵活性较低。 - 编写 MapReduce 或 Spark 程序读取文件末尾数据,适用于大文件场景。
问题 2:HBase 中如何批量导入大量数据?
解答:HBase 批量导入数据推荐以下方式,避免逐条 put
导致性能瓶颈:
-
HBase BulkLoad 机制:
- 步骤 1:使用 MapReduce 或 Spark 将数据转换为 HBase 内部格式(HFile),例如通过
TableMapReduceUtil
工具类生成 HFile 文件。 - 步骤 2:将生成的 HFile 文件上传到 HDFS 的指定目录(如
/hbase/data/表名/列族/
)。 - 步骤 3:通过
load_table_hfiles
命令将 HFile 文件加载到 HBase 表中,load_table_hfiles 'user_info', '/hbase/data/user_info/base_info/'
。 - 优点:绕写 WAL(Write-Ahead Log)和 MemStore,直接写入 HFile,导入速度快,对集群负载小。
- 步骤 1:使用 MapReduce 或 Spark 将数据转换为 HBase 内部格式(HFile),例如通过
-
使用 Sqoop 或 DataX:
从关系型数据库(如 MySQL)导出数据到 HDFS,再通过 BulkLoad 方式导入 HBase,适用于传统数据库迁移场景。
-
异步批量 Put:
- 若数据量较小,可通过 HBase API 批量提交 Put 请求(如
List<Put>
),设置autoFlush
为false
并调用flushCommits()
减少网络开销,但性能仍低于 BulkLoad。
- 若数据量较小,可通过 HBase API 批量提交 Put 请求(如