HDFS(二)——HDFS 常用命令

HDFS操作与管理命令详解
本文详细介绍了HDFS的操作和管理命令,包括创建目录、列出文件、上传和下载数据、删除、移动及复制文件、统计信息以及查看文件内容等。此外,还提到了开启和关闭安全模式的功能。

操作 HDFS 的命令主要分两种:操作命令,管理命令。

一、操作命令

操作命令以 hdfs dfs ****开头。

  1. -mkdir:创建目录。

    例 1:hdfs dfs -mkdir /aaa—> 在 HDFS 的根目录下创建一个目录aaa。

    例 2:hdfs dfs -mkdir -p /bbb/ccc—> 在 HDFS 的 /bbb 目录下创建 ccc 目录,如果 bbb 不存在,先创建 bbb。

  2. -ls:列出某个目录下的文件,隐藏文件,目录。

    例 1:hdfs dfs -ls /—> 列出 HDFS 的根目录下的所有文件。

    例 2:hdfs dfs -ls -R /—> 列出 HDFS 的根目录以及子目录下的所有文件。(简写:-lsr

  3. -put:上传数据。

    例:hdfs dfs -put ~/a.txt /a.txt

  4. -copyFromLocal:上传数据。

    例:hdfs dfs -copyFromLocal ~/b.txt /b.txt

  5. -moveFromLocal:上传数据(相当于 ctrl + x 剪切)。

    例:hdfs dfs -moveFromLocal ~/c.txt /c.txt

  6. -copyToLocal:下载数据。

    例:hdfs dfs -copyToLocal /a.txt ~/aa.txt

  7. -get:下载数据。

    例:hdfs dfs -get /b.txt ~/b.ttt

  8. -rm:删除目录或文件。

    例:hdfs dfs -rm /a.txt

  9. -rmr:删除目录或文件(包含子目录子文件)。

    例:hdfs dfs -rmr /test

  10. -getmerge:把某个目录下的所有文件合并后下载到本地。

    例:hdfs dfs -getmerge /student ~/temp/alldata.txt,该命令会将 HDFS 的根目录下的 student 目录中的所有文件的内容和并之后下载到本地 Linux 的目录下并命名为 alldata.txt。

  11. -cp:在 HDFS 的目录间进行复制。

    例:hdfs dfs -cp /a.txt /a1.txt

  12. -mv:在 HDFS 的目录间进行移动。

    例:hdfs dfs -mv /a.txt /students

  13. -count:统计当前路径下目录的个数(包含本身),文件的个数,文件总大小(B),输入路径。

    例:hdfs dfs -count /tmp

    [root@bigdata111 ~]# hdfs dfs -count /tmp
               8            3             150979 /tmp
    
  14. -du:统计当前路径下每个文件,目录的大小(B)。

    例:hdfs dfs -du /

    [root@bigdata111 ~]# hdfs dfs -du /
    0       /aaa
    60      /input
    0       /mydemo
    55      /output
    16      /ssss.txt
    16      /st.txt
    16      /st1.txt
    0       /system
    150979  /tmp
    
  15. -text:查看文件内容。

    例:hdfs dfs -text /a.txt

  16. -cat:查看文件内容。

    例:hdfs dfs -cat /a.txt

  17. balancer:平衡每个数据节点上的数据块的个数。

    例:hdfs balancer

二、管理命令

管理命令以 hdfs dfsadmin ****开头。

  1. -report:输出 HDFS 的报告(Summary)。

    例:hdfs dfsadmin -report

    [root@bigdata111 ~]# hdfs dfsadmin -report
    Configured Capacity: 50432839680 (46.97 GB)
    Present Capacity: 47918829568 (44.63 GB)
    DFS Remaining: 47918600192 (44.63 GB)
    DFS Used: 229376 (224 KB)
    DFS Used%: 0.00%
    Under replicated blocks: 0
    Blocks with corrupt replicas: 0
    Missing blocks: 0
    Missing blocks (with replication factor 1): 0
    
    -------------------------------------------------
    Live datanodes (1):
    
    Name: 192.168.220.111:50010 (bigdata111)
    Hostname: bigdata111
    Decommission Status : Normal
    Configured Capacity: 50432839680 (46.97 GB)
    DFS Used: 229376 (224 KB)
    Non DFS Used: 2514010112 (2.34 GB)
    DFS Remaining: 47918600192 (44.63 GB)
    DFS Used%: 0.00%
    DFS Remaining%: 95.01%
    Configured Cache Capacity: 0 (0 B)
    Cache Used: 0 (0 B)
    Cache Remaining: 0 (0 B)
    Cache Used%: 100.00%
    Cache Remaining%: 0.00%
    Xceivers: 1
    Last contact: Wed Nov 21 23:44:46 CST 2018
    
  2. -safemode:开启或关闭安全模式(安全模式默认关闭,开启后将不能进行写操作)。

    例 1:hdfs dfsadmin -safemode查看有哪些参数)。

    [root@bigdata111 ~]# hdfs dfsadmin -safemode
    Usage: hdfs dfsadmin [-safemode enter | leave | get | wait]
    

    例 2:hdfs dfsadmin -safemode enter,进入安全模式。

    例 3:hdfs dfsadmin -safemode leave,退出安全模式。

    例 4:hdfs dfsadmin -safemode get,获取当前安全模式的状态。

### 使用 HDFS Python API 实现文件上传 为了通过 HDFS 的 Python API 实现文件上传功能,可以采用 `pyhdfs` 或者更现代的 `hdfs` 库。以下是两种方法的具体实现方式: #### 方法一:基于 `pyhdfs` 的文件上传 `pyhdfs` 是一个常用的库,用于与 HDFS 进行交互。其核心函数 `copy_from_local` 可以轻松完成从本地到 HDFS 文件系统的文件传输。 ```python import pyhdfs def upload_with_pyhdfs(host, user_name, local_path, hdfs_path): """ 使用 pyhdfs 将文件从本地上传至 HDFS。 参数: host (str): HDFS 主机地址和端口(例如 "localhost:50070")。 user_name (str): 用户名。 local_path (str): 本地文件路径。 hdfs_path (str): HDFS 上的目标路径。 """ try: fs = pyhdfs.HdfsClient(hosts=host, user_name=user_name) print(f"正在将 {local_path} 上传至 {hdfs_path}") fs.copy_from_local(local_path, hdfs_path) print("文件上传成功") except Exception as e: print(f"文件上传失败: {e}") if __name__ == "__main__": upload_with_pyhdfs( host="localhost:50070", user_name="hdfs", local_path="/path/to/local/file.txt", hdfs_path="/path/in/hdfs/file.txt" ) ``` 此代码片段展示了如何利用 `pyhdfs` 创建客户端并执行文件上传操作[^2]。 --- #### 方法:基于 `hdfs` 库的文件上传 相比 `pyhdfs`,`hdfs` 库提供了更高层次的功能封装,并支持多种安全模式(如 Kerberos 认证)。下面是一个典型的例子: ```python from hdfs import InsecureClient def upload_with_hdfs_library(hdfs_url, user_name, local_path, hdfs_path): """ 使用 hdfs 库将文件从本地上传至 HDFS。 参数: hdfs_url (str): HDFS Web 界面 URL 地址(例如 "http://localhost:9870")。 user_name (str): 用户名。 local_path (str): 本地文件路径。 hdfs_path (str): HDFS 上的目标路径。 """ client = InsecureClient(hdfs_url, user=user_name) try: print(f"正在将 {local_path} 上传至 {hdfs_path}") client.upload(hdfs_path=hdfs_path, local_path=local_path, overwrite=True) print("文件上传成功") except Exception as e: print(f"文件上传失败: {e}") if __name__ == "__main__": upload_with_hdfs_library( hdfs_url="http://localhost:9870", user_name="root", local_path="/path/to/local/file.txt", hdfs_path="/path/in/hdfs/file.txt" ) ``` 该示例说明了如何使用 `InsecureClient` 类初始化客户端对象以及调用 `upload` 函数完成文件上传任务[^4]。 --- ### 注意事项 1. **环境准备** 在运行以上代码之前,请确保已正确安装所需的 Python 库。对于 `pyhdfs` 和 `hdfs`,可以通过以下命令分别安装: ```bash pip install pyhdfs pip install hdfs ``` 2. **权限管理** 如果目标 HDFS 路径不存在或者当前用户无权访问,则可能会抛出异常。因此,在实际应用中建议先验证路径是否存在或尝试创建必要目录[^1]。 3. **性能优化** 对于大文件上传场景,考虑调整线程数参数(仅适用于某些高级接口),从而提升整体吞吐量。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值