栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

java打包jar,(集群中)运行mr进行wordcount的过程以及报错,以及历史服务器安装

java打包jar,(集群中)运行mr进行wordcount的过程以及报错,以及历史服务器安装

java打包jar,运行mr进行wordcount的过程以及报错

在java中将写好的mapper,reducer,以及dirver打包放到集群上运行
在集群中运行可以将数据存放到hdfs中方便管理
提前配置——>编写好内容——>运行中一些报错的解决

使用的eclipse创建的maven项目中编写的mapper

package com.bob.mr;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
//map阶段
//KEYIN 输入数据的key
//VALUEIN 输入数据的value
//KEYOUT 输出数据的key类型 map输出的类型被划分成了key:value 键值对  text 
//VALUEOUT 输出数据的value类型
//LongWritable 偏移量 long,表示该行在文件中的位置,而不是行号
//Text map阶段的输入数据 一行文本信息 字符串类型 String
//Text map阶段的数据字符串类型 String
//IntWritable map阶段输出的value类型,对应java中的int型,表示行号
public class wordcountmapper extends Mapper {
	//新建key对象获取需输出的key名
	Text k=new Text();
	//新建value对象设置输出值为1
	IntWritable v=new IntWritable(1);
	@Override
	protected void map(LongWritable key, Text value, Context context)
			throws IOException, InterruptedException {
        //bob bob
		//获取一行的数据 将类型转换为string  原来为text
		String line =value.toString(); 
		
		//数据之间有空格通过split切分为两个单词
		String[] words=line.split(" ");
		
		//将数组中的数据循环写出
		for(String word:words) {
			k.set(word);
			//context写入下一步
			context.write(k, v);
		}
		
	}
}

reducer

package com.bob.mr;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class wordcountreducer extends Reducer {
	//创建IntWritable对象去获取int类型的sum结果
	IntWritable v=new IntWritable();
	@Override
	protected void reduce(Text key, Iterable values,
			Context context) throws IOException, InterruptedException {
            
		  //从mapper传入的数据为bob,1 bob,1 reduce对value进行一个累加和操作
		int sum=0;
		for (IntWritable value:values) {
			//需要对传入值进行求和 sum为int,传入的为IntWritable
			sum+=value.get();
		}
		//将结果设置转换为IntWritable类型
		v.set(sum);
		//写出
		context.write(key, v);
	}
}

driver

package com.bob.mr;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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.output.FileOutputFormat;
//驱动类
public class workcountdriver {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
	Configuration conf=new Configuration();
	//获取job对象
	Job job=Job.getInstance(conf);
	//设置jar存储位置
	job.setJarByClass(workcountdriver.class);
	//关联对应map和reduce类
	job.setMapperClass(wordcountmapper.class);
	job.setReducerClass(wordcountreducer.class);
	//设置mapper阶段输出的数据的key和value值  固定格式
	job.setMapOutputKeyClass(Text.class);
	job.setMapOutputValueClass(IntWritable.class);
	//设置最终输出的key,value类型
	job.setOutputKeyClass(Text.class);
	job.setOutputValueClass(IntWritable.class);
	//设置输入路径和输出路径
	FileInputFormat.setInputPaths(job, new Path(args[0]));
	FileOutputFormat.setOutputPath(job, new Path(args[1]));
	//提交job
    //job.submit();
	boolean result =job.waitForCompletion(true);
    System.exit(result?0:1);
}
}

可以先在eclipse中运行一次
在driver中右击 – run as – run configurations --双击java Application就会出现对应的类名称 – 点击Arfuments 在Program arguments中填写输入输出路径空格隔开 --run

将容易报错有3点
1在Hadoop2以上版本,在Hadoop2的bin目录下没有winutils.exe
2找不到NativeIO.java以及需要复制到项目新建的org.apache.hadoop.io.nativeio项目中
3就是将编译过后的hadoop的/bin/目录下的hadoop.dll和winutils.exe文件复制到系统盘的C:WindowsSystem32目录下

解决完成运行后不报错后进行打包前的配置
为驱动程序文件路径demo.driver
就是包和文件名

在pom.xml下添加




maven-compiler-plugin
2.3.2

1.8
1.8



maven-assembly-plugin


jar-with-dependencies



为驱动程序文件路径demo.driver





make-assembly
package

single






完成后
如果工程上显示红叉。在项目上右键->maven->updateproject即可。
进行打包右击项目->Run As ->Maven Install
刷新
在target目录下出现两个jar包名字较长的是有hadoop依赖的jar包,较短则没有上传较短的集群自己有所以就不需要依赖
上传到集群节点上

在集群上运行jar包
hadoop jar wc .jar 包和文件名 输入路径 输出路径
hadoop jar wc.jar demo.driver /input/ /output

运行容易报错,结果出来了但是报错了这个是历史服务器没有配置好造成的报错
Diagnostics: Exception from container-launch. Container id: container_1645083854599_0005_02_000001 Exit code: 1

配置历史服务器
在hadoop-2.7.2/etc/hadoop/mapred-site.xml
添加


mapreduce.jobhistory.webapp.address
centos73:10020



mapreduce.jobhistory.webapp.address
centos73:19888

在hadoop-2.7.2/etc/hadoop/yarn-site.xml
添加


yarn.log-aggregation-enable
true



yarn.nodemanager.remote-app-log-dir
/user/container/logs
 

启动historyserver

sbin/mr-jobhistory-daemon.sh start historyserver

修改权限

hadoop fs -chmod -R 777  /

我按照步骤完成后重新运行jar包就解决了,参考参考吧!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/742264.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号