手机版
你好,游客 登录 注册
背景:
阅读新闻

Hadoop 0.20.0+RHEL 5+Eclipse plugin+Makefile开发环境搭建

[日期:2012-05-05] 来源:Linux社区  作者:shirdrn [字体: ]

测试实践

1、通过Shell命令行,启动Hadoop

(1)格式化HDFS

[www.linuxidc.com @localhost hadoop-0.20.0]$ bin/hadoop namenode -format

格式化结果:

  1. 10/10/08 08:21:28 INFO namenode.NameNode: STARTUP_MSG:   
  2. /************************************************************  
  3. STARTUP_MSG: Starting NameNode  
  4. STARTUP_MSG:   host = localhost/127.0.0.1  
  5. STARTUP_MSG:   args = [-format]  
  6. STARTUP_MSG:   version = 0.20.0  
  7. STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/core/branches/branch-0.20 -r 763504; compiled by 'ndaley' on Thu Apr  9 05:18:40 UTC 2009  
  8. ************************************************************/  
  9. 10/10/08 08:21:28 INFO namenode.FSNamesystem: fsOwner=shirdrn,shirdrn  
  10. 10/10/08 08:21:28 INFO namenode.FSNamesystem: supergroup=supergroup  
  11. 10/10/08 08:21:28 INFO namenode.FSNamesystem: isPermissionEnabled=true  
  12. 10/10/08 08:21:28 INFO common.Storage: Image file of size 97 saved in 0 seconds.  
  13. 10/10/08 08:21:28 INFO common.Storage: Storage directory /tmp/hadoop/hadoop-shirdrn/dfs/name has been successfully formatted.  
  14. 10/10/08 08:21:28 INFO namenode.NameNode: SHUTDOWN_MSG:   
  15. /************************************************************  
  16. SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.0.1  
  17. ************************************************************/  

(2)启动Hadoop后台线程

 [www.linuxidc.com @localhost hadoop-0.20.0]$ bin/start-all.sh

执行结果:

  1. starting namenode, logging to /home/shirdrn/eclipse/eclipse-3.5.2/hadoop/hadoop-0.20.0/logs/hadoop-shirdrn-namenode-localhost.out  
  2. localhost: starting datanode, logging to /home/shirdrn/eclipse/eclipse-3.5.2/hadoop/hadoop-0.20.0/logs/hadoop-shirdrn-datanode-localhost.out  
  3. localhost: starting secondarynamenode, logging to /home/shirdrn/eclipse/eclipse-3.5.2/hadoop/hadoop-0.20.0/logs/hadoop-shirdrn-secondarynamenode-localhost.out  
  4. starting jobtracker, logging to /home/shirdrn/eclipse/eclipse-3.5.2/hadoop/hadoop-0.20.0/logs/hadoop-shirdrn-jobtracker-localhost.out  
  5. localhost: starting tasktracker, logging to /home/shirdrn/eclipse/eclipse-3.5.2/hadoop/hadoop-0.20.0/logs/hadoop-shirdrn-tasktracker-localhost.out  

(3)查看确认进程是否全部启动

[www.linuxidc.com @localhost hadoop-0.20.0]$ jps
8100 DataNode
8398 TaskTracker
8230 SecondaryNameNode
7994 NameNode
8301 JobTracker 
8459 Jps

可见,正常启动。

2、准备测试数据

上传测试数据,执行命令:

[www.linuxidc.com @localhost hadoop-0.20.0]$ bin/hadoop fs -put conf/ input

如果没有报错,说明上传成功。

可以通过如下命令进行验证:

  1. [www.linuxidc.com @localhost hadoop-0.20.0]$ bin/hadoop fs -ls /user/shirdrn/input  
  2. Found 13 items  
  3. -rw-r--r--   1 shirdrn supergroup       6275 2010-10-08 08:24 /user/shirdrn/input/capacity-scheduler.xml  
  4. -rw-r--r--   1 shirdrn supergroup        535 2010-10-08 08:24 /user/shirdrn/input/configuration.xsl  
  5. -rw-r--r--   1 shirdrn supergroup        388 2010-10-08 08:24 /user/shirdrn/input/core-site.xml  
  6. -rw-r--r--   1 shirdrn supergroup       2396 2010-10-08 08:24 /user/shirdrn/input/hadoop-env.sh  
  7. -rw-r--r--   1 shirdrn supergroup       1245 2010-10-08 08:24 /user/shirdrn/input/hadoop-metrics.properties  
  8. -rw-r--r--   1 shirdrn supergroup       4190 2010-10-08 08:24 /user/shirdrn/input/hadoop-policy.xml  
  9. -rw-r--r--   1 shirdrn supergroup        259 2010-10-08 08:24 /user/shirdrn/input/hdfs-site.xml  
  10. -rw-r--r--   1 shirdrn supergroup       2815 2010-10-08 08:24 /user/shirdrn/input/log4j.properties  
  11. -rw-r--r--   1 shirdrn supergroup        275 2010-10-08 08:24 /user/shirdrn/input/mapred-site.xml  
  12. -rw-r--r--   1 shirdrn supergroup         10 2010-10-08 08:24 /user/shirdrn/input/masters  
  13. -rw-r--r--   1 shirdrn supergroup         10 2010-10-08 08:24 /user/shirdrn/input/slaves  
  14. -rw-r--r--   1 shirdrn supergroup       1243 2010-10-08 08:24 /user/shirdrn/input/ssl-client.xml.example  
  15. -rw-r--r--   1 shirdrn supergroup       1195 2010-10-08 08:24 /user/shirdrn/input/ssl-server.xml.example  

3、在Eclipse上进行开发

(1)启动Eclipse 3.5.2,设置工作目录为/home/shirdrn/eclipse/eclipse-3.5.2/workspace。

这时,切换到Open Perspective,可以看到Map/Reduce视图,切换到这个视图,可以看到Eclipse IDE左侧的Project Explorer中出现了DFS Locations。在后面的实践中,我们创建一个Map/Reduce项目的时候,就会看到DFS Locations会显示当前相关的HDFS上的资源目录情况。

(2)创建并配置Map/Reduce项目

创建一个Map/Reduce项目,名称为hadoop,这时,需要在该选项卡上看到“Configure Hadoop install directory...”链接,打开,配置内容为,我们前面指定的$HADOOP_HOME的目录,即为/home/shirdrn/eclipse/eclipse-3.5.2/hadoop/hadoop-0.20.0;

点击Next,直到Finish,可以看到Eclipse IDE左侧的Project Explorer中的项目,展开后,可以看到除了src资源文文件以外,还有很多Hadoop相关的jar文件;

选中该项目hadoop,在包org.shirdrn.hadoop中分别创建Hadoop发行包中自带的、经过我们分解的WordCount例子的源代码,如下所示:

Mapper类为TokenizerMapper.java,如下所示:

  1. package org.shirdrn.hadoop;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.StringTokenizer;  
  5.   
  6. import org.apache.hadoop.io.IntWritable;  
  7. import org.apache.hadoop.io.Text;  
  8. import org.apache.hadoop.mapreduce.Mapper;  
  9.   
  10. public class TokenizerMapper extends  
  11.         Mapper<Object, Text, Text, IntWritable> {  
  12.   
  13.     private final static IntWritable one = new IntWritable(1);  
  14.     private Text word = new Text();  
  15.   
  16.     public void map(Object key, Text value, Context context)  
  17.             throws IOException, InterruptedException {  
  18.         StringTokenizer itr = new StringTokenizer(value.toString());  
  19.         while (itr.hasMoreTokens()) {  
  20.             word.set(itr.nextToken());  
  21.             context.write(word, one);  
  22.         }  
  23.     }  
  24. }  

Reducer类为IntSumReducer.java,如下所示:

  1. package org.shirdrn.hadoop;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.apache.hadoop.io.IntWritable;  
  6. import org.apache.hadoop.io.Text;  
  7. import org.apache.hadoop.mapreduce.Reducer;  
  8.   
  9. public class IntSumReducer extends  
  10.         Reducer<Text, IntWritable, Text, IntWritable> {  
  11.     private IntWritable result = new IntWritable();  
  12.   
  13.     public void reduce(Text key, Iterable<IntWritable> values, Context context)  
  14.             throws IOException, InterruptedException {  
  15.         int sum = 0;  
  16.         for (IntWritable val : values) {  
  17.             sum += val.get();  
  18.         }  
  19.         result.set(sum);  
  20.         context.write(key, result);  
  21.     }  
  22. }  

MapReduce Driver类为WordCount.java,如下所示:

  1. package org.shirdrn.hadoop;  
  2.   
  3. import org.apache.hadoop.conf.Configuration;  
  4. import org.apache.hadoop.fs.Path;  
  5. import org.apache.hadoop.io.IntWritable;  
  6. import org.apache.hadoop.io.Text;  
  7. import org.apache.hadoop.mapreduce.Job;  
  8. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  
  9. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  
  10. import org.apache.hadoop.util.GenericOptionsParser;  
  11.   
  12. public class WordCount {  
  13.     public static void main(String[] args) throws Exception {  
  14.         Configuration conf = new Configuration();  
  15.         String[] otherArgs = new GenericOptionsParser(conf, args)  
  16.                 .getRemainingArgs();  
  17.         if (otherArgs.length != 2) {  
  18.             System.err.println("Usage: wordcount <in> <out>");  
  19.             System.exit(2);  
  20.         }  
  21.         Job job = new Job(conf, "word count");  
  22.         job.setJarByClass(WordCount.class);  
  23.         job.setMapperClass(TokenizerMapper.class);  
  24.         job.setCombinerClass(IntSumReducer.class);  
  25.         job.setReducerClass(IntSumReducer.class);  
  26.         job.setOutputKeyClass(Text.class);  
  27.         job.setOutputValueClass(IntWritable.class);  
  28.         FileInputFormat.addInputPath(job, new Path(otherArgs[0]));  
  29.         FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));  
  30.         System.exit(job.waitForCompletion(true) ? 0 : 1);  
  31.     }  
  32. }  
linux
相关资讯       Hadoop部署 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款