开始玩hadoop7--hadoop 2.6.0 在eclipse里安装(第一个map程序)

来源:互联网 发布:淘宝开店本人营业执照 编辑:程序博客网 时间:2024/05/19 16:38

经过之前的步骤,我的ubuntu环境全部搭建完毕

我的建议是安全起见,每次不用hadoop 的时候,从namenode里把hadoop停掉;

./sbin/stop-dfs.sh

./sbin/stop-yarn.sh

用的时候在把它重新启动;


bin/hadoop fs -put input/ /porrylee // input is old path  /porrylee/input is new path


bin/hadoop fs -ls /porrylee/input/ //查看hadoop 对应文件夹下的文件 类似于ls功能


bin/hadoop jar xxx yy zz mm //xxx表示对应的路径jar包,yy表示程序名字,zz表示对应文件夹,mm表示结果路径


hadoop@master:~/hadoop-2.6.0$ bin/hdfs dfs -cat /output/wordcount3/*    //*表示把文件全部读出,而忽视文件夹


在ubuntu14.04 下安装eclipse

sudo apt-get install eclipse

安装成功后,yong

whereis eclipse 命令 看看eclipse 都安装到了哪些目录


usr/lib/eclipse/plugin  把hadoop 2.6.0 的jar插件包  放到这个文件夹下

网上下载就可以了

sudo cp XXX YYY # 移动XXX复制到新路径YYY


然后关闭,再打开eclipse

1、window -->preference hadoop Map/Reduce  写入hadoop 的安装目录

2、window--> open perspective --other ---map/reduce

3、window--> show view--other ---map/reduce


然后在下方mapreduce选项卡,右键,new一个新的配置

location name :自己喜欢的名字

master mapreduce和dfs 要配置成原来配置 好的


mapreduce master 的port 9001

dfs master 的Port 9000


左边多了一个dfs location的东西,选择disconnect --refresh 一下。

然后就可以用了


测试文本数据:

Apr 23 11:49:54 hostapd: wlan0: STA 14:7d:c5:9e:fb:84
Apr 23 11:49:52 hostapd: wlan0: STA 74:e5:0b:04:28:f2
Apr 23 11:49:50 hostapd: wlan0: STA cc:af:78:cc:d5:5d
Apr 23 11:49:44 hostapd: wlan0: STA cc:af:78:cc:d5:5d
Apr 23 11:49:43 hostapd: wlan0: STA 74:e5:0b:04:28:f2
Apr 23 11:49:42 hostapd: wlan0: STA 14:7d:c5:9e:fb:84


代码:

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); //把所有结果放到value里,不要key /t value 的形式

}
catch(java.lang.ArrayIndexOutOfBoundsException e)
{
context.getCounter(Counter.LINESKIP).increment(1);//出错 数器器加一
return;
}
}
}
@Override
public int run(String[] arg0) throws Exception {
Configuration conf =getConf();

Job job=Job.getInstance(conf,"Test_1");//任务名  旧的写法new Job(conf,"Test_1");或者加上@SuppressWarnings("deprecation")注解
job.setJarByClass(Test_1.class);//指定的class

FileInputFormat.addInputPath(job,new Path(arg0[0]));//输入路径
FileOutputFormat.setOutputPath(job, new Path(arg0[1]));//输出路径
   
job.setMapperClass(Map.class);//调用上面Map类作为Map任务代码
job.setOutputFormatClass(TextOutputFormat.class);
job.setOutputKeyClass(NullWritable.class);//指定输出的key的格式
job.setOutputValueClass(Text.class);//指定的输出的value的格式

job.waitForCompletion(true);

return job.isSuccessful()?0:1;
}
public static void main(String[] args) throws Exception
{
//BasicConfigurator.configure();
//运行任务
int res =ToolRunner.run(new Configuration(), new Test_1(),args);
System.exit(res);
}
}


然后运行的话要经过以下步骤的配置:

run configurations --新建一个配置--Main 选项卡-- Project 和main 函数要配对上

Argument 选显卡,里的Program Arguments 的内容填写 hdfs://ip:端口/输入绝对路径+“空格”+hdfs://ip:端口/输出绝对路径

apply


运行之前先把测试数据上传到input路径下

这里要注意一下,如果输出路径之前已有,要把之前的路径先删掉,在重新运行生成。刷新目录


configuration--run 然后在refresh 了

输出结果就在之前的路径下了。


eclipse 运行hadoop 的时候会有这个warn: log4j:WARN No appenders could be found for logger 

这个是没有配置这个log4j.properties 文件


First one is to just add this line to your main method:

BasicConfigurator.configure();


Second approach is to add this standard log4j.properties (taken from the above mentioned guide) file to your classpath:


# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n


把log4j.properties文件放到src目录下。

接下来就全部看不到warn了,还可以看到全部输出哦


#后面这个是模仿上面这个写的B1,加一个B1

在log4j.rootLogger=DEBUG, A1,B1

### 输出到日志文件 ###

log4j.appender.B1=org.apache.log4j.DailyRollingFileAppender

log4j.appender.B1.File = logs/log.log

log4j.appender.B1.Append = true

log4j.appender.B1.Threshold = DEBUG ## 输出DEBUG级别以上的日志

log4j.appender.B1.layout = org.apache.log4j.PatternLayout

log4j.appender.B1.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 保存异常信息到单独文件 ###
log4j.appender.B1 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.B1.File = logs/error.log ## 异常日志文件名
log4j.appender.B1.Append = true
log4j.appender.B1.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
log4j.appender.B1.layout = org.apache.log4j.PatternLayout
log4j.appender.B1.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n


调用的话,在main方法里写

PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " );
        Logger logger  =  Logger.getLogger(TestLog4j. class );
        logger.debug( " debug " );
        logger.error( " error " );


就可以了。

0 0
原创粉丝点击