11月18日

今天做mapreduce 实验

我之前在暑假的时候就写过几个简单的程序,但是操作本地的文件,输出的结果也在本地。还有一种就是写完程序然后将程序打包放到hadoop中运行。

然后看了实验步骤 我想到可以这样 直接在程序里将结果输出到hdfs中

 

 输出地址是hdfs的地址,自己定义 ,但是我遇到了报错

rg.apache.hadoop.security.AccessControlException: Permission denied: user=

这样的错误,我查询了一下是访问的权限不足,于是我找到以下解决方法,设置配置参数

 

 

 

在后面的实验过程中我遇到一个很重要的问题 从word粘贴出去的数据会丧失制表符和空格等格式限制,所以我手动修改几行数据就正常运行。这个问题困扰我很久,报数组下标溢出的错误,我认为就是因为分隔符不规范后,一行分解不出来,所以把整行当作一个数组的第0位,于是在调用arr[1] 的时候出现了下标溢出。

 

这是我的第一个实验 原理逻辑还是比较简单的

package com.j.mapreduce.quchong;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

import java.io.IOException;
public class Filter {
public static class Map extends Mapper<Object , Text , Text , NullWritable>{
private static Text newKey=new Text();
public void map(Object key,Text value,Context context) throws IOException, InterruptedException{
String line=value.toString();
System.out.println(line);
String arr[]=line.split(" ");
newKey.set(arr[1]);
System.out.println(arr[0]);
context.write(newKey, NullWritable.get());
System.out.println(newKey);
}
}
public static class Reduce extends Reducer<Text, NullWritable, Text, NullWritable>{
public void reduce(Text key,Iterable<NullWritable> values,Context context) throws IOException, InterruptedException{
context.write(key,NullWritable.get());
}
}
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException{
Configuration conf=new Configuration();
System.out.println("start");
Job job =new Job(conf,"filter");
job.setJarByClass(Filter.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(NullWritable.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
Path in=new Path("E:\\qq\\2021秋软件需求与分析\\Mapreduce实验\\1\\1.txt");
// Path out=new Path("E:\\qq\\2021秋软件需求与分析\\Mapreduce实验\\");
Path out=new Path("hdfs://192.168.10.102:8020/user/out/quchong3");
FileInputFormat.addInputPath(job,in);
FileOutputFormat.setOutputPath(job,out);
System.exit(job.waitForCompletion(true) ? 0 : 1);
}

}


学习时间:18:34到22:46
posted @ 2021-11-19 13:58  不咬牙  阅读(46)  评论(0)    收藏  举报