hive在操作表时(如insert into table)关于return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 错误

1.解决return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 错误

在启动hive后,使用select查询语句进行查询时,爆出如下错误:

INFO  : Number of reduce tasks determined at compile time: 1

INFO  : In order to change the average load for a reducer (in bytes):
INFO  :   set hive.exec.reducers.bytes.per.reducer=<number>
INFO  : In order to limit the maximum number of reducers:
INFO  :   set hive.exec.reducers.max=<number>
INFO  : In order to set a constant number of reducers:
INFO  :   set mapreduce.job.reduces=<number>
INFO  : number of splits:1
INFO  : Submitting tokens for job: job_1500138723273_0001
INFO  : The url to track the job: http://hadoop01:8088/proxy/application_1500138723273_0001/
INFO  : Starting Job = job_1500138723273_0001, Tracking URL = http://hadoop01:8088/proxy/application_1500138723273_0001/
INFO  : Kill Command = /home/hadoop/soft/hadoop-2.6.4/bin/hadoop job  -kill job_1500138723273_0001
INFO  : Hadoop job information for Stage-1: number of mappers: 0; number of reducers: 0
INFO  : 2017-07-19 22:57:22,349 Stage-1 map = 0%,  reduce = 0%
ERROR : Ended Job = job_1500138723273_0001 with errors
Error: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask (state=08S01,code=2)


在查看日志信息以后,发现错误的原因在于namenode处于safemode状态,然后进入namenode所在节点通过使用hdfs dfsadmin -safemode leave命令退出安全模式,就可以解决问题。

 

如果上述操作不能解决,请检查各个节点的时间是否同步!!!

        这个问题只是HIVE单方面的问题,而用Hadoop  Job日志查看,却是YarnException: Unauthorized request to start container的问题。

       未经授权的请求,也就是各个节点的时间未同步的问题。

第一种同步方式:通过网络进行时钟同步
通过网络连接外网进行时钟同步,必须保证虚拟机连上外网
ntpdate us.pool.ntp.org;
阿里云时钟同步服务器
ntpdate ntp4.aliyun.com
三台机器定时任务
crontab  -e   
*/1 * * * * /usr/sbin/ntpdate us.pool.ntp.org;
或者直接与阿里云服务器进行时钟同步
crontab -e
*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com;


第二种时钟同步方式:通过某一台机器进行同步

第三种方式:(简单粗暴)
在每一个节点机器上,同时设置时间:格式为date --set “07/07/06 10:19" (月/日/年时:分:秒)

 

 

 

 

 

2.解决return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask错误

        通过查看日志可以看出报错的类MapredLocalTask可以看出跟本地任务有关,所以我们可以通过以下几个参数对相关行为进行设置

        hive.exec.mode.local.auto=false
        hive.exec.mode.local.auto.input.files.max=4

        hive.exec.mode.local.auto.inputbytes.max=134217728
        其中第一个为不启用本地模式,第二个参数表示文件数小于4时使用本地模式,第三个参数表示文件大小小于128m时采用本地模式。
        默认为不启用本地模式;在启用的情况下,满足第二、三个条件中的任意一个都会使用本地模式。                                       

        任务是在root用户下通过crontab调用的,进入shell后先启动hiveserver,所以默认工作目录其实是/root;为了能正常读写hdfs上的文件,hiveserver在启动时切换到了hdfs用户,一旦遇到上述两种满足启用本地模式的情况,hdfs用户试图向当前工作目录/root拉取数据,必然没有权限从而导致以上错误。

        解决:先创建一个目录,把用户、用户组授权给hdfs,进入shell后,先切换工作目录,然后再启动hiveserver即可。如hdfs的home目录/home/hdfs
        然后在任务shell的公共配置文件conf/kettle.conf中增加一行切换目录脚本即可解决以上问题
cd /home/hdfs

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,"return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask" 是一个Hive错误示在执行MapReduce任务时出现了错误,并且返回代码为2。这种错误通常与Hive查询或作业的执行有关。 要解决这个问题,可以尝试以下几个步骤: 1. 检查Hive日志:查看Hive日志以获取更多详细信息,了解错误的具体原因和上下文。日志通常位于Hive的日志目录中,可以使用以下命令找到日志目录: ```shell hive --service metastore ``` 在日志目录中查找包含错误信息的日志文件,并查看其中的错误堆栈跟踪和其他相关信息。 2. 检查Hadoop集群状态:确保Hadoop集群正常运行,并且所有必需的服务和组件都处于活动状态。可以使用以下命令检查Hadoop集群的状态: ```shell hadoop dfsadmin -report ``` 确保没有任何故障或错误报告,并且所有节点都处于正常状态。 3. 检查Hive配置:检查Hive的配置文件,确保所有必需的配置项都正确设置。特别是,确保Hive的元数据存储(例如MySQL或Derby)可用,并且Hive的配置与元数据存储的配置一致。 4. 检查查询语句:如果错误发生在执行查询语句时,检查查询语句本身是否正确。确保查询语句中的名、列名和语法都是正确的,并且与Hive的定义相匹配。 5. 检查资源限制:如果错误发生在执行作业时,检查Hadoop集群的资源限制。确保作业所需的资源(例如内存、CPU等)可用,并且没有超过集群的限制。 这些是解决"return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask"错误的一些常见步骤。根据具体情况,可能需要进一步调查和排除其他可能的问题。如果问题仍然存在,请提供更多详细信息以便进一步帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值