2019-03-10


本篇文章旨在阐述本人在某一特定情况下遇到 Hive 执行 MapReduce 作业的问题的探索过程与解决方案。不对文章的完全、绝对正确性负责。

解决方案

Hive 的配置文件  hive-site.xml 中的 hive.exec.scratchdir 的目录地址要放在 HDFS 上。


问题现象

本人在使用 Hive 执行 MapReduce 作业时,突然发现所有作业均无法执行。下达 HQL 命令的控制台只有短短几行输出。控制台输出内容如下:

 WARNING: Hive-on-MR is deprecated in Hive  and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive .X releases.
Query ID = chorm_20190310001344_e4ed74d8---aa6f-d3a1a2a60698
Total jobs =
Launching Job out of
Number of reduce tasks determined at compile time:
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
Starting Job = job_1552147755103_0003, Tracking URL = http://m254:8088/proxy/application_1552147755103_0003/
Kill Command = /usr/bigdata/hadoop/bin/hadoop job -kill job_1552147755103_0003
Hadoop job information for Stage-: number of mappers: ; number of reducers:
-- ::, Stage- map = %, reduce = %
Ended Job = job_1552147755103_0003 with errors
Error during job, obtaining debugging information...
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
MapReduce Jobs Launched:
Stage-Stage-: HDFS Read: HDFS Write: FAIL
Total MapReduce CPU Time Spent: msec

开始时感觉很莫名其妙,因为之前还好好的,突然就出现这种现象。在网上似乎也搜索不到这个问题的解决方案。所幸经过一番折腾后,找到了问题原因所在。

探索过程

首先基本可以确定,在控制台上打印的信息无法帮助定位问题原因与作出解决方案假设。所以要另寻它法。

1. 检查 Hadoop 与 YARN 是否正常工作。

Hadoop 好检查。直接通过网页 UI 与 CLI 来检查即可。本人这里确认了 Hadoop 没有问题。

随后是 YARN ,也是通过网页 UI 来检查。同时不要忘记检查集群中各机器的对应进程是否在正常运行。本人这块经检查也没有问题。

最后再检查一下 MapReduce ,我这里直接通过 Hadoop 自带的 example.jar 来跑一个 wordcount 例子来检查。经检查也 OK 。

经过上面 3  步的检查,排除了 Hadoop 的问题。

2. 检查 Hive

说实话,这个检查不出什么来。也不知道该怎么来检查。

3. 查看 YARN 中这个作业的日志

老实说,出现问题的时候应该第一时刻就来查看日志的,但是在这里不知怎么犯傻了。

打开 http://yarn-host:8080 网页,找到那条错误的作业记录,点进去,发现有如下错误信息:

 Diagnostics:
Application application_1552147755103_0003 failed times due to AM Container for appattempt_1552147755103_0003_000002 exited with exitCode: -
For more detailed output, check application tracking page:http://m254:8088/cluster/app/application_1552147755103_0003Then, click on links to logs of each attempt.
Diagnostics: File file:/var/bigdata/hive/scratchdir/chorm/46b600b8--48c8--a2f6b649bcae/hive_2019--10_00--44_741_6711852286526745896-/-mr-/cd1fe621-e494-4ddd-b8f8-a9c80e052c6c/reduce.xml does not exist
java.io.FileNotFoundException: File file:/var/bigdata/hive/scratchdir/chorm/46b600b8--48c8--a2f6b649bcae/hive_2019--10_00--44_741_6711852286526745896-/-mr-/cd1fe621-e494-4ddd-b8f8-a9c80e052c6c/reduce.xml does not exist
at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:)
at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:)
at org.apache.hadoop.yarn.util.FSDownload.copy(FSDownload.java:)
at org.apache.hadoop.yarn.util.FSDownload.access$(FSDownload.java:)
at org.apache.hadoop.yarn.util.FSDownload$.run(FSDownload.java:)
at org.apache.hadoop.yarn.util.FSDownload$.run(FSDownload.java:)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:)
at org.apache.hadoop.yarn.util.FSDownload.call(FSDownload.java:)
at org.apache.hadoop.yarn.util.FSDownload.call(FSDownload.java:)
at java.util.concurrent.FutureTask.run(FutureTask.java:)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:)
at java.util.concurrent.FutureTask.run(FutureTask.java:)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:)
at java.lang.Thread.run(Thread.java:) Failing this attempt. Failing the application.

从上面日志中发现一条重要信息 reduce.xml does not exists! 。reduce.xml 似乎是 MapReduce 作业相关的文件,所以判断可能是某个或某些和作业执行相关的配置文件缺失,导致作业无法进行下去。然后猛然想起之前自己有改动过 Hive 的配置信息,将属性 hive.exec.scratchdir 指向的目录从 HDFS 上改到了本地文件系统中。然后这条属性就是和 Hive 的作业执行相关的。这条属性指向的目录专门用于存储 Hive 的 MapReduce 作业的阶段执行计划和中间产物的。 Hive 的作业一般都会在集群中执行,现在我将它指向某台机器的本地目录,导致作业中间文件无法在集群中共享,所以作业肯定是不能正常执行的。

在将 hive.exec.scratchdir 属性指向的目录重新设定到 HDFS 中以后,Hive 的 MapReduce 作业就能正常执行了。

Hive 执行作业时报错 [ Diagnostics: File file:/ *** reduce.xml does not exist FileNotFoundException: File file:/ ]的更多相关文章

  1. Hadoop执行作业时报错:java.lang.OutOfMemoryError: Java heap space

    常常被一些用户问到,说“为什么我的mapreduce作业总是运行到某个阶段就报出如下错误,然后失败呢?以前同一个作业没出现过的呀?” 10/01/10 12:48:01 INFO mapred.Job ...

  2. mysql启动时报错:Starting MySQL... ERROR! The server quit without updating PID file (/opt/mysql/data/mysql.pid)

    mysql启动报错Starting MySQL... ERROR! The server quit without updating PID file (/opt/mysql/data/mysql.p ...

  3. 执行automake时报错 error while making link: Operation not supported

    执行automake时报错: [root@localhost project]# automake --add-missingconfigure.in: installing `./install-s ...

  4. 启动azkaban时出现User xml file conf/azkaban-users.xml doesn't exist问题解决(图文详解)

      问题详情 [hadoop@master azkaban]$ ll total drwxrwxr-x hadoop hadoop May : azkaban- drwxrwxr-x hadoop h ...

  5. npm安装socket.io时报错的解决方法(npm WARN enoent ENOENT: no such file or directory, open '/usr/local/nodejs/bin/package.json')

    执行 npm install socket.io安装时报错: [root@WEB node_modules]# npm install socket.ionpm WARN enoent ENOENT: ...

  6. 编译gd-2.0.35.tar.gz时报错:gd_png.c:16:53: error: png.h: No such file or directory

    编译gd-2.0.35.tar.gz时报错: gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/local/freetype/include/freetype2 -I/us ...

  7. RHEL 6.5----apr-util1.6执行make时报错

    报错信息 ]: Entering directory `/usr/local/src/apr-util-' /bin//build-/libtool --silent --mode=compile / ...

  8. 登录用户执行sudo时报错

    场景: 以普通用户登录,登陆后切换至root或其他用户时报错(sudo su -或sudo -i) 报错信息: -bash: /bin/logger: Argument list too long 根 ...

  9. IIS导入.pfx证书时报错:"A specified logon session does not exist. It may already have been terminated."

    在IIS中可以直接导入.pfx文件来给站点绑定https协议: 如果在导入.pfx文件时,不选择"Allow this certificate to be exported"的话 ...

随机推荐

  1. Django---forms表单使用(1)

    使用过Django的同学应该都比较清楚,Django的表单功能是十分强大的,可以完成数据的校验等功能. 下面讲下常用的表单类型.我们讲下创建表单到前台可以正常显示的步骤: 一.创建表单类(可以直接在v ...

  2. 浅谈Semaphore类

    Semaphore类有两个重要方法 1.semaphore.acquire(); 请求一个信号量,这时候信号量个数-1,当减少到0的时候,下一次acquire不会再执行,只有当执行一个release( ...

  3. Visual Studio 无法记忆标签页、断点等的解决办法

    1.到工程目录删除*.suo文件 2.*.suo默认是隐藏的,需要打开查看隐藏文件的开关

  4. [Web][DreamweaverCS6][高中同学毕业分布去向网站+服务器上挂载]一、安装与破解DreamweaverCS6+基本规划

    DreamweaverCS6安装与破解 一.背景介绍:同学毕业分布图项目计划简介 哎哎哎,炸么说呢,对于Web前端设计来说,纯手撕html部分代码实在是难受. 对于想做地图这类的就“必须”用这个老工具 ...

  5. 测者的测试技术手册:自动化单元工具EvoSuie的代码覆盖报告

    EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行.得到了Google和Yourkit的支持. ...

  6. 网上都没有提到的教程:python捕获异常后,怎么输出错误文件和行号

    1.假设输出不存在的变量 a try: print(a) except NameError as e: print('发生错误的文件:', e.__traceback__.tb_frame.f_glo ...

  7. 不能收缩 ID 为 %s 的数据库中 ID 为 %s 的文件,因为它正由其他进程收缩或为空。

    SQLServer数据库通常都不建议进行SHRINKFILE操作,因为SHRINKFILE不当会造成一定的性能问题. 但是当进行了某些操作(例如某个超大的日志类型表转成分区表切换了数据文件),数据库某 ...

  8. USB初学(一)---USB-HID的初步认识【转】

    HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复习一下USB协议的相关内容. USB设备描述符-概述 当插入USB设备后,主机会向设备请求各种描述符来识别设备.那什么是设 ...

  9. Linux分页机制之分页机制的实现详解--Linux内存管理(八)

    1 linux的分页机制 1.1 四级分页机制 前面我们提到Linux内核仅使用了较少的分段机制,但是却对分页机制的依赖性很强,其使用一种适合32位和64位结构的通用分页模型,该模型使用四级分页机制, ...

  10. zabbix3.4监控Linux客户端

    环境准备 zabbix-server IP:192.168.1.242 nds-server  IP:192.168.1.202 web-server IP:192.168.1.203 客户端部署 关 ...