GAOSHUANGYIN 2022-11-03 21:02 采纳率: 0%
浏览 28

mvn项目打jar包后在hadoop集群下执行报错

数据预处理,在mvn项目下,我对爬下的数据进行预处理,在mvn环境中可以正常执行,也可以获得运算结果,可是打成jar包后,放入centos7 的hadoop集群下执行,就出现错误
用代码块功能插入代码,请勿粘贴截图

package com.position.clean;

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.mapred.lib.CombineTextInputFormat;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.log4j.BasicConfigurator;

public class CleanMain {

public static void main(String[] args) throws Exception {
    //控制台输出执行日志
    BasicConfigurator.configure();//这里不需要返回值        
    //第一步:初始化Hadoop环境
    Configuration conf = new Configuration();
    //从虚拟机运行行获取“两个”参数
    String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();//通过此方法可以将传入的两个参数转变成一个数组
    //判断从crt获得的参数是否是两个参数,如果不是两个参数,则会输出错误并退出程序
    if(otherArgs.length !=2){
        //此处使用系统内置函数err进行错误报告,执行完成后需要退出系统进程
        System.err.print("Usage : wordcount <in> <out>"); //<in>为输入路径 <out>为输出路径
        System.exit(2);
        
    }
    //第二步:定义一个新的Job,第一个参数是hadoop的配置信息,第二个是job的名字
    Job job = new Job(conf,"job");//"job"定义一个job名称,Job被划黑线说明该方法已经过时了,可是方法依然可以使用
    //第三步:设置主类
    job.setJarByClass(CleanMain.class);//将主类打成jar包
    //第四步:设置Mapper类
    job.setMapperClass(CleanMapper.class);//将Mapper打成jar包
    //设置处理小文件的对象,将文件的输入内容从各个零散的小文件转变成CombineText文件
    job.setInputFormatClass(CombineTextInputFormat.class);//由于要处理小文件,CombineTextInputFormat.class此方法有较好的计算特性
    //设置n个小文件,其数据总体大小不能够小于2M(2097152)
    CombineTextInputFormat.setMinInputSplitSize(job, 2097152);
    //设置n个小文件,其数据总体大小不能够大于4M(4194304)
    CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);
    //第五步:设置job输出数据的key类
    job.setOutputKeyClass(Text.class);//key是Text类型
    //第六步:设置job输出数据的value类
    job.setOutputValueClass(NullWritable.class);//key是NullWritable类型
    //第七步:设置输入路径: 即是hdfs上的路径
    //FileInputFormat.addInputPath(job, new Path("hdfs://spark02:9000/Jobdata/20200803"));
    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));//otherArgs[0] 第一个输入的参数
    //第八步:设置输出路径:即是本地路径,路径中的两个斜杠(“//”),其中一个/是用来转义字符
    //FileOutputFormat.setOutputPath(job, new Path("D:\\software_root\\Hadoop_test_file\\Out"));
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));//otherArgs[1] 第二个输入的参数
    //第九步:退出程序
    System.exit(job.waitForCompletion(true)?0:1);
}

}

运行结果及报错内容

4726 [main] INFO org.apache.hadoop.mapreduce.Job - The url to track the job: http://spark01:8088/proxy/application_1667464489746_0006/
22/11/03 20:39:47 INFO mapreduce.Job: Running job: job_1667464489746_0006
4727 [main] INFO org.apache.hadoop.mapreduce.Job - Running job: job_1667464489746_0006
22/11/03 20:40:28 INFO mapreduce.Job: Job job_1667464489746_0006 running in uber mode : false
45934 [main] INFO org.apache.hadoop.mapreduce.Job - Job job_1667464489746_0006 running in uber mode : false
22/11/03 20:40:28 INFO mapreduce.Job: map 0% reduce 0%
45937 [main] INFO org.apache.hadoop.mapreduce.Job - map 0% reduce 0%
22/11/03 20:40:42 INFO mapreduce.Job: Task Id : attempt_1667464489746_0006_m_000000_0, Status : FAILED
60203 [main] INFO org.apache.hadoop.mapreduce.Job - Task Id : attempt_1667464489746_0006_m_000000_0, Status : FAILED
Error: java.lang.NullPointerException
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:548)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:786)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1746)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

我的解答思路和尝试过的方法

我在mvn环境中可以正常执行,就是使用jar包去执行的时候会报错
hadoop jar clean.jar com.position.clean.CleanMain /Jobdata/20200803/ /Jobdata/output
com.position.clean.CleanMain 是我写好的方法主类

我想要达到的结果

深圳,14-18,绩效奖金-五险一金-专项奖金-交通补助-职位高大上-行业老大,Hadoop-Scala
深圳,15-25,节日礼物-带薪年假-扁平管理-美女多-福利待遇好 发展空间大 上市公司,Hadoop-ETL
上海,10-20,周末双休-年终奖-五险一金-加班补贴,Java-Hadoop
上海,16-25,技能培训-年度旅游-岗位晋升-扁平管理-聚焦政府大数据-助力城市精细化管理,ETL-Hadoop-Spark-Flink
北京,20-30,五险一金-年底双薪,Hadoop-Spark
上海,15-25,技能培训-年度旅游-岗位晋升-五险一金-精英团队-弹性工作-工作氛围好,Hadoop-Spark-Hive-MySQL
广州,12-20,绩效奖金-专项奖金-年底双薪-五险一金-有机会转为联通国企编制,ETL
杭州,20-35,期权激励-住房补贴-全额公积金-午餐补助-高挑战-高待遇-高福利-高成长,Spark-数据仓库-Flink-Hive
杭州,15-30,扁平管理-岗位晋升-五险一金-技能培训-技术驱动-行业前驱-领导好-扁平管理,数据分析
北京,15-30,六险一金-工作居住证-年度旅游-定期体检-17薪-午休两小时,Scala-Java
上海,25-35,节日礼物-岗位晋升-五险一金-午餐补助-绩效奖金- 带薪年假-午餐补助-岗位晋升,

  • 写回答

1条回答 默认 最新

  • 夜郎king 2022博客之星IT其它领域TOP 12 2022-11-04 08:12
    关注

    看日志因为抛出了空指针异常引起的,在MapTask.java:548,548行,可以在服务器上输出日志跟踪一下,看是什么没初始化好引起的。

    img

    评论

报告相同问题?

问题事件

  • 创建了问题 11月3日

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP