hive 运行mapreduce任务报错

      近期由于公司大数据集群有很多历史遗留顽疾,进行了新旧集群的数据迁移。

      前期进行了大数据新集群的搭建,接下来在跑hive任务的时候,发现了一个让人头痛的问题。可以看一下执行sql

      select substr(even_ttime,0,10) from ods_ods.ods_ods_ishare_log发现直接就报错。然后查看yarn的运行日志如下:

      hive 运行mapreduce任务报错

     顿时一脸懵逼,因为上面的报错class是缺少其中的哪一个根本就不知道, 在排查的过程中,1、用这条语句 select event_time from ods_ods.ods_ods_ishare_log又是完全没有问题的2、接着就想到是不是因为lib没有指定导致函数不可用,然后试了一下select substr(even_ttime,0,10)发现又可以查出问题来。

      在网上搜资料有说jar包位置不对的,有说yarn.application.classpath需要修改的,但实际上都没有解决我的问题。后面耽误了一天的时间,晚上独自走了几个来回都没有思考出来问题到底出在哪里。

      后面细细分析这三段sql,第一条sql跟第三条sql实际上内部都是没有启mapreduce任务的,只是简单的hdfs的读取以及函数得调用,后面看到这篇文章

    https://blog.sunriseydy.top/technology/big-data/hadoop/cannotfind-mrappmaster/

    让人恍然大悟

hive 运行mapreduce任务报错

       这个配置项的意思是配置启动mapreduce时用的classpath,位于 etc/hadoop/mapred-site.xml 文件中,问题就在于之前 运维在搭建新集群的时候是没有配置红线部分的,导致启动mapreduce任务的时候找不到需要加载的jar包。

       后面把这个配置调好重启,问题解决。

       集群迁移看似简单,其实中间的过程实属不易,希望这篇文章能帮到遇到这个问题的朋友,毕竟也是卡了我一两天。