(2)在Eclipse中配置开发hadoop程序,下载hadoop-0.20.2-cdh3u1.tar.gz。
· Step1. 在eclipse中,新建一个Java 项目,填入Project name,在Contents中,选择 “Create project from existing source”,在 Browse… 中选择hadoop的目录,点击“Next > ”。
· Step2. 在Java Build Path面板,建议把Source folders全部移除,在Default output folder中,重新输入output目录,因为hadoop的 bin 目录是存放linux脚本的,这里可以指定一个hadoop-0.xx.xx/output目录。点击“OK”。
· Step3. 在Package Explorer中,右击项目名,选择“build path”,选择“configuration build path”,在source folder中,选择以下目录作为source folder:
Hadoop-0.xx.xx/conf
Hadoop-0.xx.xx/src/core
Hadoop-0.xx.xx/src/hdfs
Hadoop-0.xx.xx/src/mapred
· Step4. 此时eclipse会编译source folder 的源码,目前一般高版本的hadoop,只差了一个ant.jar,这个包就是ant 的主要jar包。可以到 http://ant.apache.org/bindownload.cgi 下载到。并加到classpath 的 Libraries中。
· Step5. 如果一切顺利,接下来配置 conf/ 下的 core-site.xml hdfs-site.xml mapred-site.xml 三个配置文件,在core-site.xml中加入(端口可以自己定义):
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
另外,在本地配置一个目录存放namenode 的 metadata ,另一个目录存放 datanode的 block。 用于配置hdfs-site.xml:
<property>
<name>dfs.name.dir</name>
<value>E:/namespace/dfs/metadata</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>E:/sde/hadoop/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
接下来,在mapred-site.xml中,加入:
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
注:有关Tasktracker,和Datanode 的端口无需配置,这两个节点相对于Jobtracker和 namennode是客户端,RPC的端口是自动分配的。也就是我们说的控制端口,另外传输通信端口,请阅读 hdfs-default.xml 和 mapred-default.xml配置文件。
· Step6. 启动hadoop的步骤是先启动HDFS,然后再启动mapred,原则是先启动主节点,再启动子节点。
启动namenode,namenode的主main入口在org.apache.hadoop.hdfs.server.namenode包下,类名为NameNode.java ,找到main函数,在第一行添加:
argv = new String[]{"-format"};
代码,然后运行该类,正常情况下,会输出metadata目录的格式化信息。接着,注释掉刚才添加的代码,重新运行该类。
· Step7. 启动datanode,datanode的主main入口在 org.apache.hadoop.hdfs.server.datanode包下,类名为 DataNode.java,找到main函数,该类,直接运行。
· Step8. 启动 JobTracker,该类位于org.apache.hadoop.mapred.JobTracker,在启动之前,找到main方法,在main方法的第一行加入:
System.setProperty(“hadoop.log.dir”, “$HADOOP_DIR/logs”);
$HADOOP_DIR为您本机的hadoop目录。由于hadoop默认是shell脚本启动的,因
此Hadoop.log.dir 是在shell 中配置的。
· Step9. 启动 TaskTracker,该类位于org.apache.hadoop.mapred.TaskTracker,直接运行。
注:我们已经成功启动了四个进程,如果您需要,可以启动SecondaryNameNode,该类位于org.apache.hadoop.hdfs.server.namenode包,但考虑到内存占用情况,一般该节点无需启动。
· Step10. Hadoop的 命令行调用的类,在core包中的 org.apache.hadoop.fs中可以找到,类名为FsShell.java,举个简单的例子,如果需要查看Hdfs的根目录文件,那么在FsShell的main函数中,添加 args = new String[]{“-ls”, “/”};代码,然后运行该类即可。
在mapreduce方面,可以使用org.apache.hadoop.mapred.JobClient提交任务。