菜鸟科技网

HBase命令大全,如何快速掌握常用命令?

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

HBase命令大全,如何快速掌握常用命令?-图1
(图片来源网络,侵删)

Hadoop 常用命令

Hadoop 命令主要通过 hadoop fshadoop 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)文件信息与磁盘空间

HBase命令大全,如何快速掌握常用命令?-图2
(图片来源网络,侵删)
  • 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 '表名':检查表是否被禁用,返回 truefalse

(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 的命令,但可通过以下方式实现:

  1. 使用 hadoop fs -cat <文件路径> | tail -n 100:将文件内容输出到终端后通过 tail 截取最后 100 行,适用于小文件。
  2. 使用 hadoop fs -tail <文件路径>:默认查看文件最后 1KB 内容(约 50 行),可通过修改 dfs.tail 参数调整,但需重启集群,灵活性较低。
  3. 编写 MapReduce 或 Spark 程序读取文件末尾数据,适用于大文件场景。

问题 2:HBase 中如何批量导入大量数据?
解答:HBase 批量导入数据推荐以下方式,避免逐条 put 导致性能瓶颈:

  1. 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,导入速度快,对集群负载小。
  2. 使用 Sqoop 或 DataX

    从关系型数据库(如 MySQL)导出数据到 HDFS,再通过 BulkLoad 方式导入 HBase,适用于传统数据库迁移场景。

  3. 异步批量 Put

    • 若数据量较小,可通过 HBase API 批量提交 Put 请求(如 List<Put>),设置 autoFlushfalse 并调用 flushCommits() 减少网络开销,但性能仍低于 BulkLoad。
分享:
扫描分享到社交APP
上一篇
下一篇