1,hdfs的shell命令操作
-
HDFS命令有两种风格:
-
hadoop fs
开头的 -
hdfs dfs
开头的 -
两种命令均可使用,效果相同
-
1. hdfs常用命令
-
如何查看hdfs或hadoop子命令的帮助信息,如ls子命令
hdfs dfs -help ls hadoop fs -help ls #两个命令等价
-
查看hdfs文件系统中指定目录的文件列表。对比linux命令ls
hdfs dfs -ls / hadoop fs -ls / hdfs dfs -ls -R /
-
在hdfs文件系统中创建文件
hdfs dfs -touchz /edits.txt
-
向HDFS文件中追加内容
hadoop fs -appendToFile edit1.xml /edits.txt #将本地磁盘当前目录的edit1.xml内容追加到HDFS根目录 的edits.txt文件
-
查看HDFS文件内容
hdfs dfs -cat /edits.txt
-
从本地路径上传文件至HDFS
#用法:hdfs dfs -put /本地路径 /hdfs路径 hdfs dfs -put /linux本地磁盘文件 /hdfs路径文件 hdfs dfs -copyFromLocal /linux本地磁盘文件 /hdfs路径文件 #跟put作用一样 hdfs dfs -moveFromLocal /linux本地磁盘文件 /hdfs路径文件 #跟put作用一样,只不过,源文件被拷贝成功后,会被删除
-
在hdfs文件系统中下载文件
hdfs dfs -get /hdfs路径 /本地路径 hdfs dfs -copyToLocal /hdfs路径 /本地路径 #根get作用一样
-
在hdfs文件系统中创建目录
hdfs dfs -mkdir /shell
-
在hdfs文件系统中删除文件
hdfs dfs -rm /edits.txt 将文件彻底删除(被删除文件不放到hdfs的垃圾桶里) how? hdfs dfs -rm -skipTrash /xcall
-
在hdfs文件系统中修改文件名称(也可以用来移动文件到目录)
hdfs dfs -mv /xcall.sh /call.sh hdfs dfs -mv /call.sh /shell
-
在hdfs中拷贝文件到目录
hdfs dfs -cp /xrsync.sh /shell
-
递归删除目录
hdfs dfs -rm -r /shell
-
列出本地文件的内容(默认是hdfs文件系统)
hdfs dfs -ls file:///home/hadoop/
-
查找文件
# linux find命令 find . -name 'edit*' # HDFS find命令 hadoop fs -find / -name part-r-00000 # 在HDFS根目录中,查找part-r-00000文件
-
总结
-
输入hadoop fs 或hdfs dfs,回车,查看所有的HDFS命令
-
许多命令与linux命令有很大的相似性,学会举一反三
-
有用的==help==,如查看ls命令的使用说明:hadoop fs -help ls
-
绝大多数的大数据框架的命令,也有类似的help信息
2. hdfs的shell命令补充
1. hdfs与getconf结合使用
-
获取NameNode的节点名称(可能有多个)
hdfs getconf -namenodes
-
获取hdfs最小块信息
hdfs getconf -confKey dfs.namenode.fs-limits.min-block-size
用相同命令可获取其他的属性值
-
查找hdfs的NameNode的RPC地址
hdfs getconf -nnRpcAddresses
2. hdfs与dfsadmin结合使用
-
查看hdfs dfsadmin的帮助信息
hdfs dfsadmin
-
同样要学会借助help查看具体命令的帮助信息
hdfs dfsadmin -help safemode
-
查看当前的模式
hdfs dfsadmin -safemode get
-
进入/退出安全模式
hdfs dfsadmin -safemode enter # 进入安全模式 hdfs dfsadmin -safemode leave #退出安全模式
3. hdfs与fsck结合使用
fsck指令显示HDFS块信息
hdfs fsck /02-041-0029.mp4 -files -blocks -locations # 查看文件02-041-0029.mp4的块信息
4. 其他命令
-
检查压缩库本地安装情况
hadoop checknative
-
格式化名称节点(慎用,一般只在初次搭建集群,使用一次;格式化成功后,不要再使用)
hadoop namenode -format
-
执行自定义jar包
hadoop jar /kkb/install/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar pi 5 5 yarn jar /kkb/install/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar pi 5 5
2. hdfs的优缺点
1. hdfs的优点
(1) 高容错性
1) 数据自动保存多个副本。它通过增加副本的形式,提高容错性。
2) 某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制自动实现
(2) 适合批处理
1) 把数据位置暴露给计算框架,通过移动计算而不是移动数据,提高效率
(3) 适合大数据处理
1) 数据规模:能够处理数据规模达到 GB、TB、甚至PB级别的数据。
2) 文件规模:能够处理百万规模以上的文件数量,数量相当之大。
3) 节点规模:能够处理10K节点的规模。
(4) 流式数据访问
1) 一次写入,多次读取
2)不能随机修改,只能追加。
3) 它能保证数据的一致性。
(5) 可构建在廉价机器上
1) 它通过多副本机制,提高可靠性。
2) 它提供了容错和恢复机制。比如某一个副本丢失,可以通过其它副本来恢复。
2. hdfs的缺点
(1) 不适合低延时数据访问;
1) 比如毫秒级的来存储、读取数据,这是不行的,它做不到。
2) 它适合高吞吐率的场景,就是在某一时间内写入大量的数据。
(2) 无法高效的对大量小文件进行存储
1) 存储大量小文件的话,它会占用 NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。
2) 小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目标。
(3) 并发写入、文件随机修改
1) 一个文件只能有一个写,不允许多个线程同时写(==租约机制==)。
2) 仅支持数据 append(追加),不支持文件的随机修改。