(Mac版)Eclipse搭建hadoop集群开发环境教程版

  • 101

(Mac版)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集群)

  • 在系统偏好设置中,点击共享,将“远程登录”打开。
(Mac版)Eclipse搭建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/
(Mac版)Eclipse搭建hadoop集群开发环境
  • 将插件集成到eclipse后,选择show-view选择Map/Reduce窗口并打开
(Mac版)Eclipse搭建hadoop集群开发环境
  • 选择Map/Reduce窗口右键新建map/reduce工程,创建Map/Reduce
(Mac版)Eclipse搭建hadoop集群开发环境
  • 上述配置项稍加解释:

    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集群的用户名保持一致,否则的话,就会出现权限问题。这里的mac用户名和hadoop集群并没有保持一致,但是还是可以对hadoop集群进行操作,是因为有以下配置)。

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


    dfs.permissions
    false


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

    如果正式发布时,远程连接的用户必须与hadoop集群用户保持一致,即可不用修改master的权限认证策略(dfs.permissions)。
  •  环境搭建好之后,就可以创建Map/Reduce工程。
  • 新建一个Map/Reduce程序(LZ在这里引入一个统计网站访问时间以及IP地址的例子)。
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
 
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
 
public class Test_1 extends Configured implements Tool{
 
	enum Counter{
		LINESKIP, //出错的行
	}
	
	
public static class Map extends Mapper<LongWritable,Text,NullWritable,Text>{
		
  public void map(LongWritable key,Text value,Context context)throws IOException,InterruptedException{
 
	  String line = value.toString();//读取源数据
		try
			{
				//数据处理
		        String [] lineSplit = line.split(" ");
				String month = lineSplit[0];
				String time = lineSplit[1];
				String mac = lineSplit[6];
				Text out = new Text(month + ' ' + time + ' ' + mac);
				context.write( NullWritable.get(), out);	//输出
			}
			catch ( java.lang.ArrayIndexOutOfBoundsException e )
			{
				context.getCounter(Counter.LINESKIP).increment(1);	//出错令计数器+1
				return;
			}
		}
	}
	
	@Override
	public int run(String[] args) throws Exception {Configuration conf = getConf();
 
	Job job = new Job(conf, "Test_1");//任务名
	job.setJarByClass(Test_1.class);//指定Class
	
	FileInputFormat.addInputPath( job, new Path(args[0]) );	//输入路径
	FileOutputFormat.setOutputPath( job, new Path(args[1]) );//输出路径
	
	job.setMapperClass( Map.class );//调用上面Map类作为Map任务代码
	job.setOutputFormatClass( TextOutputFormat.class );
	job.setOutputKeyClass( NullWritable.class );//指定输出的KEY的格式
	job.setOutputValueClass( Text.class );//指定输出的VALUE的格式
	
	job.waitForCompletion(true);
	
	//输出任务完成情况
	System.out.println( "任务名称:" + job.getJobName() );
	System.out.println( "任务成功:" + ( job.isSuccessful()?"是":"否" ) );
 
	return job.isSuccessful() ? 0 : 1;
}
public static void main(String[] args) throws Exception {
		//判断参数个数是否正确
		//如果无参数运行则显示以作程序说明
	 if ( args.length != 2 )
		{
			System.err.println("");
			System.err.println("Usage: Test_1 < input path > < output path > ");
			System.err.println("Counter:");
			System.err.println("\t"+"LINESKIP"+"\t"+"Lines which are too short");
			System.exit(-1);
		}
		//记录开始时间
		DateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
		Date start = new Date();
				
		//运行任务
		int res = ToolRunner.run(new Configuration(), new Test_1(), args);
 
		//输出任务耗时
		Date end = new Date();
		float time =  (float) (( end.getTime() - start.getTime() ) / 60000.0) ;
		System.out.println( "任务开始:" + formatter.format(start) );
		System.out.println( "任务结束:" + formatter.format(end) );
		System.out.println( "任务耗时:" + String.valueOf( time ) + " 分钟" ); 
	        System.exit(res);
	}
}
  • 运行代码前,需要先将数据上传至DFS文件系统中
(Mac版)Eclipse搭建hadoop集群开发环境
  • 点击run configurations按钮,新建运行任务,配置运行参数等。
(Mac版)Eclipse搭建hadoop集群开发环境
  • 运行结束后,查看控制台,以及DFS上的输出文件。

    运行map/reduce的日志文件
(Mac版)Eclipse搭建hadoop集群开发环境
  •    map/reduce运行后产生的输出文件
(Mac版)Eclipse搭建hadoop集群开发环境
  • 至此,整个eclipse集成hadoop集群的过程以及开发第一个map/reduce程序全部完成。

📚文章说明:
1、本文章链接失效后,请通过右下角企鹅QQ告知管理员,24小时内补链接,谢谢。点击下载说明了解。
2、天天精品分享的资源均通过网络公开合法渠道获取的,仅阅读交流测试使用,请在下载后24小时内删除。
3、版权归作者或出版社方所有,本站不对涉及的版权问题负法律责任。点击免责申明了解详情。
4、若版权方认为天天精品侵权,请联系客服QQ或发送邮件myttjp@163.com处理。
5、会员和精品豆系对搜集搬运、整理及网站运营做的友情赞助,非购买文件费用,敬请谅解。点击关于本站了解本站。
6、每位访客应尊重版权方的知识产权,支持版权方和出版社。

发表评论