这是我的分析,当然查阅书籍和网络。如有什么不对的,请各位批评指正。以下的类有的并不完全,只列出重要的方法。

如要转载,请注上作者以及出处。

一、源码阅读环境

需要安装jdk1.7.0版本及其以上版本,还需要安装Eclipse阅读hadoop源码。

Eclipse安装教程参见我的博客。

Hadoop源码官网下载。我下载的是2.7.3版本的。其中source是源代码工程,需要你编译才能执行。而binary是编译好的克执行文件。

如果你要搭建Hadoop集群,则下载binary的。如果阅读源代码,下载source的。

这里我们需要分析源代码,下载source,解压后文件名是hadoop-2.7.3-src。

把Hadoop导入Eclipse

1.打开Eclipse,点击File->New->Java Project,会弹出如下图1所示:

YARN(MapReduce 2)运行MapReduce的过程-源码分析

          图 1

我们就把Hadoop源码导入了Eclipse,但会报很多错误,具体解决方案参见我的博客 Eclipse中导入Hadoop源代码工程  。不过不影响我们看源码。

2.如果你想看某个类,但你不知道在哪?先定位到hadoop-2.7.3-src

以Job.java为例子,

在Windows中:你可以在文件资源管理器的搜索栏里输入想要搜索的类名,如下图2所示:

YARN(MapReduce 2)运行MapReduce的过程-源码分析

          图 2

然后右键该文件,选择打开文件所在的位置。这个位置和Eclipse中hadoop-2.7.3-src项目的目录结构相对应。

比如我们搜到的Job.java在hadoop-2.7.3-src\hadoop-mapreduce-project\hadoop-mapreduce-client\hadoop-mapreduce-client-core\src\main\java\org\apache\hadoop\mapreduce中。

在Linux中,需要在终端通过find命令查找。

find . -name "Job.java"    第一个参数是路径,其中.表示当前目录,/表示根目录。如下图3所示:

YARN(MapReduce 2)运行MapReduce的过程-源码分析

                     图 3

我们就可以在Eclipse中hadoop-2.7.3-src项目中找到,如下图4所示:

YARN(MapReduce 2)运行MapReduce的过程-源码分析

                            图 4

Hadoop1的执行流程 参考    参考   

二、分析前须知:

我们运行装好的集群时,要想启动集群,通常在主节点Master的hadoop-2.7.3/sbin/,目录下运行(命令行)./start-all.sh脚本,直接全部启动。如下代码所示:

start-all.sh

"${HADOOP_HDFS_HOME}"/sbin/start-dfs.sh --config $HADOOP_CONF_DIR    它会启动start-dfs.sh脚本

"${HADOOP_YARN_HOME}"/sbin/start-yarn.sh --config $HADOOP_CONF_DIR    它会启动start-yarn.sh脚本

 1 #Add other possible options
 2 nameStartOpt="$nameStartOpt $@"
 3 
 4 #---------------------------------------------------------
 5 # namenodes
 6 
 7 NAMENODES=$($HADOOP_PREFIX/bin/hdfs getconf -namenodes)
 8 
 9 echo "Starting namenodes on [$NAMENODES]"
10 
11 "$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
12   --config "$HADOOP_CONF_DIR" \
13   --hostnames "$NAMENODES" \
14   --script "$bin/hdfs" start namenode $nameStartOpt
15 
16 #---------------------------------------------------------
17 # datanodes (using default slaves file)
18 
19 if [ -n "$HADOOP_SECURE_DN_USER" ]; then
20   echo \
21     "Attempting to start secure cluster, skipping datanodes. " \
22     "Run start-secure-dns.sh as root to complete startup."
23 else
24   "$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
25     --config "$HADOOP_CONF_DIR" \
26     --script "$bin/hdfs" start datanode $dataStartOpt
27 fi
28 
29 #---------------------------------------------------------
30 # secondary namenodes (if any)
31 
32 SECONDARY_NAMENODES=$($HADOOP_PREFIX/bin/hdfs getconf -secondarynamenodes 2>/dev/null)
33 
34 if [ -n "$SECONDARY_NAMENODES" ]; then
35   echo "Starting secondary namenodes [$SECONDARY_NAMENODES]"
36 
37   "$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
38       --config "$HADOOP_CONF_DIR" \
39       --hostnames "$SECONDARY_NAMENODES" \
40       --script "$bin/hdfs" start secondarynamenode
41 fi
42 
43 #---------------------------------------------------------
44 # quorumjournal nodes (if any)
45 
46 SHARED_EDITS_DIR=$($HADOOP_PREFIX/bin/hdfs getconf -confKey dfs.namenode.shared.edits.dir 2>&-)
47 
48 case "$SHARED_EDITS_DIR" in
49 qjournal://*)
50   JOURNAL_NODES=$(echo "$SHARED_EDITS_DIR" | sed 's,qjournal://\([^/]*\)/.*,\1,g; s/;/ /g; s/:[0-9]*//g')
51   echo "Starting journal nodes [$JOURNAL_NODES]"
52   "$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
53       --config "$HADOOP_CONF_DIR" \
54       --hostnames "$JOURNAL_NODES" \
55       --script "$bin/hdfs" start journalnode ;;
56 esac
57 
58 #---------------------------------------------------------
59 # ZK Failover controllers, if auto-HA is enabled
60 AUTOHA_ENABLED=$($HADOOP_PREFIX/bin/hdfs getconf -confKey dfs.ha.automatic-failover.enabled)
61 if [ "$(echo "$AUTOHA_ENABLED" | tr A-Z a-z)" = "true" ]; then
62   echo "Starting ZK Failover Controllers on NN hosts [$NAMENODES]"
63   "$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
64     --config "$HADOOP_CONF_DIR" \
65     --hostnames "$NAMENODES" \
66     --script "$bin/hdfs" start zkfc
67 fi
68 
69 # eof
start-dfs.sh

相关文章: