hadoop核心组件——HDFS系列讲解之HDFS的shell命令操作
- 基本语法
- 常用命令
- HDFS的特性
基本语法
老版本:
hadoop fs 具体命令
新版本:
hdfs dfs 具体命令
常用命令
(1)-help:输出这个命令参数
bin/hdfs dfs -help rm
(2)-ls: 显示目录信息
hdfs dfs -ls /
(3)-mkdir:在hdfs上创建目录
hdfs dfs -mkdir -p /aaa/bbb/cc/dd
(4)-moveFromLocal从本地剪切粘贴到hdfs
hdfs dfs -moveFromLocal /home/Hadoop/a.txt /aaa/bbb/cc/dd
(5)-moveToLocal:从hdfs剪切粘贴到本地
hdfs dfs -moveToLocal /aaa/bbb/cc/dd /home/Hadoop/a.txt
(6)–appendToFile :追加一个文件到已经存在的文件末尾
hdfs dfs -appendToFile ./hello.txt /hello.txt
(7)-cat :显示文件内容
hdfs dfs -cat /hadoop-daemon.sh
(8)-tail:显示一个文件的末尾
hdfs dfs -tail /weblog/access_log.1
(9)-text:以字符形式打印一个文件的内容
hdfs dfs -text /weblog/access_log.1
(10)-chgrp 、-chmod、-chown:linux文件系统中的用法一样,修改文件所属权限
hdfs dfs -chmod 666 /hello.txt
hdfs dfs -chown someuser:somegrp /hello.txt
(11)-copyFromLocal:从本地文件系统中拷贝文件到hdfs路径去
hdfs dfs -copyFromLocal ./jdk.tar.gz /aaa/
(12)-copyToLocal:从hdfs拷贝到本地
hdfs dfs -copyToLocal /aaa/jdk.tar.gz
(13)-cp :从hdfs的一个路径拷贝到hdfs的另一个路径
hdfs dfs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
(14)-mv:在hdfs目录中移动文件
hdfs dfs -mv /aaa/jdk.tar.gz /
(15)-get:等同于copyToLocal,就是从hdfs下载文件到本地
hdfs dfs -get /aaa/jdk.tar.gz
(16)-getmerge :合并下载多个文件,比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,…
hdfs dfs -getmerge /aaa/log.* ./log.sum
(17)-put:等同于copyFromLocal
hdfs dfs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
(18)-rm:删除文件或文件夹
hdfs dfs -rm -r /aaa/bbb/
(19)-rmdir:删除空目录
hdfs dfs -rmdir /aaa/bbb/ccc
(20)-df :统计文件系统的可用空间信息
hdfs dfs -df -h /
(21)-du统计文件夹的大小信息
hdfs dfs -du -s -h /aaa/*
(22)-count:统计一个指定目录下的文件节点数量
hdfs dfs -count /aaa/
(23)-setrep:设置hdfs中文件的副本数量
hdfs dfs -setrep 3 /aaa/jdk.tar.gz
这里设置的副本数只是记录在namenode的元数据中,是否真的会有这么多副本,还得看datanode的数量。因为目前只
有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。
(24) - expunge :清空hdfs垃圾桶
hdfs dfs -expunge
HDFS的特性
优点:
- 海量数据存储: HDFS可横向扩展,其存储的文件可以支持PB级别或更高级别的数据存储。
- 高容错性:数据保存多个副本,副本丢失后自动恢复。可构建在廉价的机器上,实现线性扩展。当集群增加新节点之后,namenode也可以感知,进行负载均衡,将数据分发和备份数据均衡到新的节点上。
- 商用硬件:Hadoop并不需要运行在昂贵且高可靠的硬件上。它是设计运行在商用硬件(廉价商业硬件)的集群上的。
- 大文件存储:HDFS采用数据块的方式存储数据,将数据物理切分成多个小的数据块。所以再大的数据,切分后,大数据变成了很多小数据。用户读取时,重新将多个小数据块拼接起来。
缺点:
- 不能做到低延迟数据访问:由于hadoop针对高数据吞吐量做了优化,牺牲了获取数据的延迟,所以对于低延迟访问数据的业务需求不适合HDFS。
- 不适合大量的小文件存储 :由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量。根据经验,每个文件、目录和数据块的存储信息大约占150字节。因此,如果有一百万个小文件,每个小文件都会占一个数据块,那至少需要300MB内存。如果是上亿级别的,就会超出当前硬件的能力。
- 修改文件:。HDFS适合一次写入,多次读取的场景。对于上传到HDFS上的文件,不支持修改文件。Hadoop2.0虽然支持了文件的追加功能,但不建议对HDFS上的文件进行修改。因为效率低下.
- 不支持用户的并行写:同一时间内,只能有一个用户执行写操作。