HDFS命令行工具
1. hadoop fs 帮助信息
hadoop fs
使用help选项可以获得某个具体命令的详细说明:
hadoop fs -help ls
2. 列出HDFS文件和目录
hadoop fs -ls /user/
3. 复制文件到HDFS和从HDFS复制文件
在很多方面,HDFS较之于本地0S文件系统更像一个远程文件系统。对HDFS文件的复制操作更像SCP或FTP操作,而非NFS上的文件系统操作。文件上传使用-put或-copyFromLocal,文件下载使用-get或-copytoLocal。为了方便-copyFromLocal和-copytoLocal分别用来从本地复制文件到HDFS或将HDFS文件复制到本地,然后自动删除源文件。
复制文件到hdfs
hadoop fs -put /etc/passwd /user/
从hdfs复制文件
hadoop fs -get /user/passwd /usr/local
4. 修改HDFS文件的复制因子
HDFS的另一个特别之处在于能够设置文件的复制因子。用-setrep命令,加上复制因子和可选标志(-R)表示要递归执行该操作。
hadoop fs -setrep 5 -R /user/tmp/
注:HDFS会主动跟踪并管理可用数据块副本的数量,当副本数目低于配置的复制因子时,文件系统会自动从剩下的副本创建一个新的副本。
5. 设定目录磁盘空间的限额
//size是磁盘限额(用字节表示),path就是配额作用的目标目录 hadoop dfsadmin -setSpaceQuota size path
6. 查询文件夹的磁盘空间限额和文件数目限额
hadoop fs -count -q path
结果的第一列显示的是文件数的限额,第二列是允许添加的文件数,第三列和第四列分别是磁盘空间的限额和剩余的可用空间(单位是字节)。
注:只有当磁盘空间配额大小为磁盘块大小的整数倍时,才有意义。
7. 解除文件夹磁盘空间配额限制的命令
hadoop dfsadmin -clrSpaceQuota path
8. 设定文件数目配额
hadoop dfsadmin -setQuota number path
9. 解除文件数目配额
hadoop dfsadmin -clrQuota path
10. 添加一个DataNode
集群扩容需要添加新DataNode,通常是在需要增加存储的情况下,虽然有时也是为了增加IO总带宽或减小单台机器失效的影响。在运行中的HDFS集群上增加新的DataNode是一个在线操作或热操作。对于要使用HDFS主机及功能的用户,新主机的IP地址必须添加到include文件中,但主机列表可以动态更新而无需重新启动NameNode。
1. 把DataNode的IP地址加入dfs.hosts参数指定的文件中。每个IP地址占用一行。
2. 以HDFS超级用户或有类似权限的用户执行命令行hadoop dfsadmin -refreshNodes。
3. 如果使用机架感知机制,需要为新加入主机更新相关的机架信息。
4. 启动DataNode进程。
5. 通过NameNode的Web界面或命令hadoop dfsadmin -report的输出来确定新节点是否已连接。
仅当使用包含HDFS主机的功能时需要执行步骤1和2。
11. 卸载DataNode
DataNode可能被卸载以便把它从集群中安全移除,同时还要保持主机上所有块的复制因子。这个过程可能很漫长,取决于被卸载主机上的数据量、集群工作数以及网络速度等因素。因为卸载的时间太长,在操作系统重启或配置变化引发的重启所导致的短暂停机状态下不适合做卸载节点的操作。如果想保证所有数据块安全,就需要使用安全卸载功能。
1. 把DataNode的IP地址添加到dfs.hosts.exclude参数指定的文件中。每个IP地址占用一行。
2. 以HDFS超级用户或拥有类似权限的用户执行hadoop dfsadmin -refreshNodes。
3. 监控NameNode的Web界面确保卸载正在进行。有时更新会滞后几秒。
4. 因为DataNode上的数据较多,卸载有时会持续数小时甚至几天。卸载完成时,NameNode界面会把DataNode显示成已卸载。
5. 停止DataNode进程。
6. 如果不打算把机器放回集群,就需要在HDFS的include和exclude文件中去除DataNode,同时更新机架拓扑数据库。
7. 执行hadoop dfsadmin -refreshNodes让NameNode进行节点更新。
12. 在HDFS中创建一个新文件夹
hadoop fs -mkdir /user/weblogs
13. 列出HDFS上weblog_entries.txt文件信息
hadoop fs -ls /user/weblogs/weblog_entries.txt