Shell命令选项

hadoop 示例 hadoop -ls_hdfs

常用的Shell命令

-ls
格式: hadoop fs -ls URI
作用:类似于Linux的ls命令,显示文件列表

hadoop fs -ls  /

-lsr
格式 : hdfs dfs -lsr URI
作用 : 在整个目录下递归执行ls, 与UNIX中的ls-R类似

hadoop fs   -lsr  /

**mkdir **
格式 : hdfs dfs [-p] -mkdir
作用 : 以中的URI作为参数,创建目录。使用-p参数可以递归创建目录

hadoop fs -mkdir /dir1
hadoop fs -mkdir /dir2
hadoop fs -p -mkdir /aaa/bbb/ccc

-put
格式 : hadoop fs -put …
作用 : 将单个的源文件src或者多个源文件srcs从本地文件系统拷贝到目标文件系统中(对应的路径)。也可以从标准输入中读取输入,写入目标文件系统中

echo “Hello HDFS” >> /root/1.txt
hadoop fs -put  /root/1.txt  /dir1

-moveFromLocal
格式: hdfs dfs -moveFromLocal
作用: 和put命令类似,但是源文件localsrc拷贝之后自身被删除

echo “Hello HDFS” >> /root/2.txt
hdfs  dfs -moveFromLocal  /root/2.txt  /

-get
格式 hadoop fs -get [-ignorecrc ] [-crc]
作用:将文件拷贝到本地文件系统。 CRC 校验失败的文件通过-ignorecrc选项拷贝。 文件和CRC校验和可以通过-CRC选项拷贝

hadoop fs  -get   /2.txt  /export/data

-getmerge
格式: hadoop fs -getmerge -nl < hdfs dir > < local file >
功能:合并下载多个文件
参数: 加上nl后,合并到local file中的hdfs文件之间会空出一行
示例:比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,…

hadoop fs -getmerge  /aaa/log.*  ./log.sum

-mv
格式 : hadoop fs -mv URI
作用: 将hdfs上的文件从原路径移动到目标路径(移动之后文件删除),该命令不能夸文件系统

hadoop  fs  -mv  /dir1/a.txt   /dir2

-rm
格式: hadoop fs -rm [-r] 【-skipTrash】 URI 【URI 。。。】
作用: 删除参数指定的文件和目录,参数可以有多个,删除目录需要加-r参数
如果指定-skipTrash选项,那么在回收站可用的情况下,该选项将跳过回收站而直接删除文件;
否则,在回收站可用时,在HDFS Shell 中执行此命令,会将文件暂时放到回收站中。

hadoop fs -rm /2.txt       #删除文件
  hadoop fs -rm  -r  /dir1  #删除目录

-cp
格式: hdfs dfs -cp URI [URI …]
作用: 将文件拷贝到目标路径中。如果 为目录的话,可以将多个文件拷贝到该目录下。
-f 选项将覆盖目标,如果它已经存在。
-p 选项将保留文件属性(时间戳、所有权、许可、ACL、XAttr)。

hadoop fs -cp /dir1/1.txt  /dir2/2.txt

-cat
hadoop fs -cat URI [uri …]
作用:将参数所指示的文件内容输出到控制台

hadoop fs  -cat  /dir2/2.txt

-du
hadoop fs -cat URI
功能:显示目录中所有文件大小,当只指定一个文件时,显示此文件的大小。

hadoop fs -du /

-chmod
格式: hadoop fs -chmod [-R] URI[URI …]
作用: 改变文件权限。如果使用 -R 选项,则对整个目录有效递归执行。使用这一命令的用户必须是文件的所属用户,或者超级用户。
例如:可以创建一个用户hadoop,将/a.txt的所属用户和所属用户组修改为hadoop

hadoop fs -chmod -R 777 /dir1

-chown
格式: hadoop fs -chmod [-R] URI[URI …]
作用: 改变文件的所属用户和用户组。如果使用 -R 选项,则对整个目录有效递归执行。使用这一命令的用户必须是文件的所属用户,或者超级用户。

hadoop fs  -chown  -R hadoop:hadoop  /a.txt

-appendToFile
格式: hadoop fs -appendToFile …
作用: 追加一个或者多个文件到hdfs指定文件中.也可以从命令行读取输入.

cd /export/server/hadoop2.7.5/etc/hadoop/
 hadoop fs -appendToFile  *.xml  /big.xml

HDFS的安全模式

安全模式是hadoop的一种保护机制,用于保证集群中的数据块的安全性。当集群启动的时候,会首先进入安全模式。当系统处于安全模式时会检查数据块的完整性。
假设我们设置的副本数(即参数dfs.replication)是3,那么在datanode上就应该有3个副本存在,假设只存在2个副本,那么比例就是2/3=0.666。hdfs默认的副本率0.999。我们的副本率0.666明显小于0.999,因此系统会自动的复制副本到其他dataNode,使得副本率不小于0.999。如果系统中有5个副本,超过我们设定的3个副本,那么系统也会删除多于的2个副本。
在安全模式状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求。在当整个系统达到安全标准时,HDFS自动离开安全模式。
安全模式操作命令

hdfs  dfsadmin -safemode  get #查看安全模式状态
hdfs  dfsadmin -safemode  enter #进入安全模式
hdfs  dfsadmin -safemode  leave #离开安全模式

集群内部文件拷贝scp

方式1:指定用户名,命令执行后需要再输入密码;

scp -r local_folder remote_username@remote_ip:remote_folder

方式2:没有指定用户名,命令执行后需要输入用户名和密码;

scp -r local_folder remote_ip:remote_folder

注意,如果实现了ssh免密登录之后,则不需要输入密码即可拷贝。

实例:
#复制文件-将 /root/test.txt 拷贝到 192.168.88.161 的 /root/ 目录下,文件名还是 text.txt,使用 root 用户,此时会提示输入远程 root 用户的密码。

scp  /root/test.txt  root@192.168.88.161:/root/

#复制文件并重命名-将 /root/test.txt 拷贝到 192.168.88.161 的 /root/ 目录下,文件名还是 text1.txt,使用 root 用户,此时会提示输入远程 root 用户的密码。

scp  /root/test.txt  root@192.168.88.161:/root/test1.txt

#复制目录-将整个目录 /root/test/ 复制到 192.168.88.161 的 /root/ 下,即递归的复制,使用 root 用户,此时会提示输入远程 root 用户的密码。

scp  -r  /root/test/  root@192.168.88.161:/root/

远程复制到本地
远程复制到本地 与 从本地复制到远程命令类似,不同的是 远程文件作为源文件在前,本地文件作为目标文件在后。
#复制文件-将192.168.88.162的/root目录下的test.txt拷贝到当前主机的/root/目录下,文件名不变

scp root@192.168.88.162:/root/test.txt /root/test.txt

跨集群之间的数据拷贝distcp
DistCp(distributed copy)是一款被用于大型集群间/集群内的复制工具,该命令的内部原理是MapReduce。

cd /export/servers/hadoop-2.7.5/
bin/hadoop distcp hdfs://node1:8020/jdk-8u241-linux-x64.tar.gz  hdfs://cluster2:8020/