Hadoop有提供一些脚本命令,以便于我们对HDFS进行管理,可以通过命令hadoop fs进行查看:
通过以上使用说明可以发现,里面提供了大多数和我们在本地操作文件系统相类似的命令,例如,cat查看文件内容,chgrp改变用户群组权限,chmod改变用户权限,chown改变用户拥有者权限,还有创建目录,查看目录,移动文件,重命名等等。
hadoop fs -ls
这里,我们来看看命令hadoop fs -ls:
这个命令大家肯定非常熟悉,在Linux下使用超级频繁,功能就是列出指定目录下的文件及文件夹。那接下来,我们来看看它是怎样查找到此目录下的文件及文件夹的。
在运行hadoop fs -ls /命令之后,真正的命令只是hadoop,后面只是参数,那么,这个hadoop命令到底是哪呢?如果说集群是自己手动搭配的话,那大家肯定知道,这个命令就在${HADOOP_HOME}/bin目录下,但如果集群是自动化部署的时候,你可能一下子找不到这个命令在哪,此时,可以使用以下命令查找:
可以看到,这个命令应该是在目录/usr/bin/之下,使用vim /usr/bin/hadoop查看命令详细:
#!/bin/bash
export HADOOP_HOME=${HADOOP_HOME:-/usr/hdp/2.5.0.0-1245/hadoop}
export HADOOP_MAPRED_HOME=${HADOOP_MAPRED_HOME:-/usr/hdp/2.5.0.0-1245/hadoop-mapreduce}
export HADOOP_YARN_HOME=${HADOOP_YARN_HOME:-/usr/hdp/2.5.0.0-1245/hadoop-yarn}
export HADOOP_LIBEXEC_DIR=${HADOOP_HOME}/libexec
export HDP_VERSION=${HDP_VERSION:-2.5.0.0-1245}
export HADOOP_OPTS="${HADOOP_OPTS} -Dhdp.version=${HDP_VERSION}"
exec /usr/hdp/2.5.0.0-1245//hadoop/bin/hadoop.distro "$@"
这个脚本做了两件事,一是export了一些环境变量,使得之后运行的子程序都可以共享这些变量的值;二是执行了命令hadoop.distro命令,并传上了所有参数。
现在,我们来看下命令hadoop.distro做了哪些事,由于代码有点小多,我就不全部贴了,只贴与执行命令hadoop fs -ls /相关的代码。
命令hadoop.distro做的事情是:根据之前传入的参数,然后做一些判断,确定一些变量的值,最后执行的是以下命令:
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"
这里,我们看到了一堆变量,其中
$JAVA:java
$JAVA_HEAP_MAX:
$HADOOP_OPTS:
# Always respect HADOOP_OPTS and HADOOP_CLIENT_OPTS
HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"
#make sure security appender is turned off
HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,NullAppender}"
$CLASS:org.apache.hadoop.fs.FsShell
$@ : -ls / 注意:这里已经没有参数fs了
因此,命令

本文深入剖析了Hadoop中`hadoop fs -ls`命令的执行细节,从脚本到Java代码的转换,包括环境变量设置、参数解析、命令注册、文件系统操作等步骤,揭示了命令执行的完整流程。
最低0.47元/天 解锁文章
440

被折叠的 条评论
为什么被折叠?



