【问题标题】:Need an explanation of command that is used in Hadoop tutorial需要解释 Hadoop 教程中使用的命令
【发布时间】:2015-03-23 07:15:36
【问题描述】:

最近我刚开始研究 Hadoop,我只是做了一个实验来真正理解它。 这是教程:http://www.codeproject.com/Articles/757934/Apache-Hadoop-for-Windows-Platform 我想问的是,我根据教程运行了几个命令后,计算机系统中发生的后台进程是什么,例如

  • hadoop 名称节点格式
  • javac -classpath C:\hadoop-2.3.0\share\hadoop\common\hadoop-common-2.3.0.jar;C:\hadoop-2.3.0\share\hadoop\mapreduce\hadoop-mapreduce- client-core-2.3.0.jar;C:\hadoop-2.3.0\share\hadoop\common\lib\gson-2.2.4.jar;C:\hadoop-2.3.0\share\hadoop\common\ lib\commons-cli-1.2.jar Recipe.java
  • jar -cvf Recipe.jar *.class
  • hadoop fs -mkdir /in
  • hadoop fs -copyFromLocal c:\Hwork\recipeitems-latest.json /in
  • hadoop jar c:\Hwork\Recipe.jar 配方 /in /out
  • hadoop fs -ls /out
  • hadoop fs -cat /out/part-r-00000

【问题讨论】:

    标签: hadoop mapreduce hdfs


    【解决方案1】:

    hadoop fs 在 HDFS 文件系统上运行类似于 unix 的命令(ls、copy、cat 等)你可以看到完整列表是filesystem shell documentation

    hadoop namenode -format 是线虫的初始化,即擦除存储在 Hadoop 中的所有内容 - 请注意,在较新的 Hadoop 版本上,您可以通过 hdfs see here 执行此操作

    另外两个命令(javac 和 jar)与编译和打包 java 程序有关

    【讨论】:

      【解决方案2】:

      您可以通过浏览 hadoop 主目录下 /bin 文件夹中的二进制文件“hadoop”来跟踪流程。

      一旦您提交了一个 Hadoop 命令,它就会在 UNIX (cat,ls,awk) 中充当一个普通的 shell 命令。它将转到 Hadoop 二进制 (/bin) 目录并开始执行命令,并以其他选项 (fs,jar,distcp,job,namenode,jt..) 作为参数。根据提供给 hadoop 命令的选项,将调用下一个 shell,并将其余选项作为参数。最后,java 类将使用请求的选项执行。我已经简要概述了它如何用于“hadoop fs -cat”

      bin/hadoop

      COMMAND=$1
      case $COMMAND in
      # usage flags
      --help|-help|-h)
      print_usage
      exit
      ;;
      .
      .
      namenode|secondarynamenode|datanode|dfs|dfsadmin|fsck|balancer|fetchdt|oiv|dfsgroups|portmap|nfs3)
      .
      .
      if [ -f "${HADOOP_HDFS_HOME}"/bin/hdfs ]; then
      exec "${HADOOP_HDFS_HOME}"/bin/hdfs ${COMMAND/dfsgroups/groups}  "$@"
      elif [ -f "${HADOOP_PREFIX}"/bin/hdfs ]; then
      exec "${HADOOP_PREFIX}"/bin/hdfs ${COMMAND/dfsgroups/groups} "$@"
      

      bin/hdfs

          elif [ "$COMMAND" = "dfs" ] ; then
          CLASS=org.apache.hadoop.fs.FsShell
          HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"
      elif [ "$COMMAND" = "dfsadmin" ] ; then
          CLASS=org.apache.hadoop.hdfs.tools.DFSAdmin
          HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"
      .
      .
      exec "$JAVA" -Dproc_$COMMAND $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"
      

      示例 java 类实现, http://grepcode.com/file/repository.cloudera.com/content/repositories/releases/com.cloudera.hadoop/hadoop-core/0.20.2-320/org/apache/hadoop/fs/FsShell.java

      你可以看到一个命令(cat)是如何在 java 中实现的。我相信这应该为您提供有关 hadoop 命令如何在后台工作的简要概述。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-27
        • 1970-01-01
        • 2014-11-11
        • 1970-01-01
        相关资源
        最近更新 更多