Eclipse搭建hadoop集群开发环境

eclipse集成hadoop开发环境

操作系统:MacOs 10.12

hadoop集群版本:hadoop-1.2.0版本

hadoop集成eclipse插件:hadoop-eclipse-plugin-1.2.0.jar

eclipse版本:Eclipse Mars.2 Release (4.5.2)


下面讲述eclipse搭建hadoop集群的详细步骤:(由于hadoop集群部署在其他机器上,故此处需要远程连接hadoop集群)

  • 在系统偏好设置中,点击共享,将“远程登录”打开。

  • 在eclipse软件plugins(插件目录)目录下hadoop-eclipse-plugin-1.2.0.jar(eclipse集成hadoop插件jar文件)
  • 重启eclipse
  • 设置开发环境HADOOP_HOME (在Mac终端上进行)

    export HADOOP_HOME=/Users/liumengxi/Documents/Soft/hadoop-1.2.1/

    export PATH=$PATH:$HADOOP_HOME/bin

  • eclipse中导入hadoop安装包  Hadoop Map/Reduce菜单下添加hadoop安装目录 。此处安装路径为:/Users/liumengxi/Documents/Soft/hadoop-1.2.1/

  • 将插件集成到eclipse后,选择show-view选择Map/Reduce窗口并打开

         

  • 选择Map/Reduce窗口右键新建map/reduce工程,创建Map/Reduce

  • 上述配置项稍加解释:

    Location name 工程名字,随便起

    Map/Reduce Master 对应hadoop集群下的mapred-site.xml文件中的配置 此处的host为集群master的ip地址为:192.168.0.188 端口号为:9001 

    DFS Master 对应hadoop集群下的core-site.xml文件中的配置  此处的端口号为:9000

    User name 此处填写的是 远程连接的主机名 此处为:yao(有一点需要强调:如果需要远程连接hadoop集群,mac上的用户名必须和hadoop集群的用户名保持一致,否则的话,就会出现权限问题。LZ的mac用户名和hadoop集群并没有保持一致,但是还是可以对hadoop集群进行操作,是因为有以下配置)。

    由于在hadoop集群下的mapred-site.xml文件中配置

    <property>

    <name>dfs.permissions</name>

    <value>false</value>

    </property>

    上述配置hadoop集群关闭权限的认证。

    如果正式发布时,远程连接的用户必须与hadoop集群用户保持一致,即可不用修改master的权限认证策略(dfs.permissions)。


  •  环境搭建好之后,就可以创建Map/Reduce工程。


  • 新建一个Map/Reduce程序(LZ在这里引入一个统计网站访问时间以及IP地址的例子)。
        
[java]  view plain  copy
  1. import java.io.IOException;  
  2. import java.text.DateFormat;  
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Date;  
  5.   
  6. import org.apache.hadoop.conf.Configuration;  
  7. import org.apache.hadoop.conf.Configured;  
  8. import org.apache.hadoop.fs.Path;  
  9. import org.apache.hadoop.io.LongWritable;  
  10. import org.apache.hadoop.io.NullWritable;  
  11. import org.apache.hadoop.io.Text;  
  12. import org.apache.hadoop.mapreduce.Job;  
  13. import org.apache.hadoop.mapreduce.Mapper;  
  14. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  
  15. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  
  16. import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;  
  17. import org.apache.hadoop.util.Tool;  
  18. import org.apache.hadoop.util.ToolRunner;  
  19.   
  20. public class Test_1 extends Configured implements Tool{  
  21.   
  22.     enum Counter{  
  23.         LINESKIP, //出错的行  
  24.     }  
  25.       
  26.       
  27. public static class Map extends Mapper<LongWritable,Text,NullWritable,Text>{  
  28.           
  29.   public void map(LongWritable key,Text value,Context context)throws IOException,InterruptedException{  
  30.   
  31.       String line = value.toString();//读取源数据  
  32.         try  
  33.             {  
  34.                 //数据处理  
  35.                 String [] lineSplit = line.split(" ");  
  36.                 String month = lineSplit[0];  
  37.                 String time = lineSplit[1];  
  38.                 String mac = lineSplit[6];  
  39.                 Text out = new Text(month + ' ' + time + ' ' + mac);  
  40.                 context.write( NullWritable.get(), out);    //输出  
  41.             }  
  42.             catch ( java.lang.ArrayIndexOutOfBoundsException e )  
  43.             {  
  44.                 context.getCounter(Counter.LINESKIP).increment(1);  //出错令计数器+1  
  45.                 return;  
  46.             }  
  47.         }  
  48.     }  
  49.       
  50.     @Override  
  51.     public int run(String[] args) throws Exception {Configuration conf = getConf();  
  52.   
  53.     Job job = new Job(conf, "Test_1");//任务名  
  54.     job.setJarByClass(Test_1.class);//指定Class  
  55.       
  56.     FileInputFormat.addInputPath( job, new Path(args[0]) ); //输入路径  
  57.     FileOutputFormat.setOutputPath( job, new Path(args[1]) );//输出路径  
  58.       
  59.     job.setMapperClass( Map.class );//调用上面Map类作为Map任务代码  
  60.     job.setOutputFormatClass( TextOutputFormat.class );  
  61.     job.setOutputKeyClass( NullWritable.class );//指定输出的KEY的格式  
  62.     job.setOutputValueClass( Text.class );//指定输出的VALUE的格式  
  63.       
  64.     job.waitForCompletion(true);  
  65.       
  66.     //输出任务完成情况  
  67.     System.out.println( "任务名称:" + job.getJobName() );  
  68.     System.out.println( "任务成功:" + ( job.isSuccessful()?"是":"否" ) );  
  69.   
  70.     return job.isSuccessful() ? 0 : 1;  
  71. }  
  72. public static void main(String[] args) throws Exception {  
  73.         //判断参数个数是否正确  
  74.         //如果无参数运行则显示以作程序说明  
  75.      if ( args.length != 2 )  
  76.         {  
  77.             System.err.println("");  
  78.             System.err.println("Usage: Test_1 < input path > < output path > ");  
  79.             System.err.println("Counter:");  
  80.             System.err.println("\t"+"LINESKIP"+"\t"+"Lines which are too short");  
  81.             System.exit(-1);  
  82.         }  
  83.         //记录开始时间  
  84.         DateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );  
  85.         Date start = new Date();  
  86.                   
  87.         //运行任务  
  88.         int res = ToolRunner.run(new Configuration(), new Test_1(), args);  
  89.   
  90.         //输出任务耗时  
  91.         Date end = new Date();  
  92.         float time =  (float) (( end.getTime() - start.getTime() ) / 60000.0) ;  
  93.         System.out.println( "任务开始:" + formatter.format(start) );  
  94.         System.out.println( "任务结束:" + formatter.format(end) );  
  95.         System.out.println( "任务耗时:" + String.valueOf( time ) + " 分钟" );   
  96.             System.exit(res);  
  97.     }  
  98. }  


  • 运行代码前,需要先将数据上传至DFS文件系统中
         


  • 点击run configurations按钮,新建运行任务,配置运行参数等。
 

  • 运行结束后,查看控制台,以及DFS上的输出文件。
            运行map/reduce的日志文件


   map/reduce运行后产生的输出文件


  • 至此,整个eclipse集成hadoop集群的过程以及开发第一个map/reduce程序全部完成。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值