当前位置:   article > 正文

Hive调用MapReduce任务失败_本地运行mapreduce没有结果

本地运行mapreduce没有结果

1. Hive简介

Hive(蜂巢)Apache Hadoop生态圈的构成之一,其主要功能是基于Hadoop提供MapReduce的类SQL查询。Hive的语法规则和Mysql中SQL的语法规则极为相似,有Mysql使用经验的同学都能轻松上手。
Hive的执行分为本地模式和集群模式。本地模式执行简单的Hive SQL,不需要启动MapReduce程序,如

-- 本地模式
select col_name1, col_name2, col_name3 from db_name.tb_name where date='2017-09-23' limit 50;
  • 1
  • 2

集群模式则需要将Hive SQL转换为MapReduce,并提交到Hadoop集群上进行执行,如

-- 集群模式
select col_name1, count(1) pv, count(distinct uid) uv from db_name.tb_name where date='2017-09-23' group by col_name1
  • 1
  • 2

2. 问题1:输入格式不兼容

前不久在公司集群上搭建Hive环境,所需要的JDK、Hadoop、Zookeeper、Mysql等都已经搭建完成。下载解压Hive jar包并修改配置文件之后,启动Hive CLI(Command Line Interface),执行本地模式的SQL毫无问题,但只要调用MapReduce就会报错,下面是报错的情况。

2.1 java.io.IOException(mapreduce.job.inputformat.class is incompatible with map compatability mode.

先说解决方案吧,主要是由于Hadoop或者Hive的配置文件中同时指定了老版本输入格式mapred.input.format.classmapreduce.job.inputformat.class,Hadoop的调用Job的submit的方法时,会首先校验使用了mapreduce1还是mapreduce2的API,如果两个同时存在,是一定会报错的。

比较推荐的解决方式是:修改Job的**setUseNewAPI**方法,根据集群当前使用的API版本,将另外一个版本的配置信息设置为null。 
  • 1

在Hive中执行

select count(1) from db_name.tb_name where date='2017-09-23'
  • 1

执行错误信息如下

java.io.IOException: mapreduce.job.inputformat.class is incompatible with map compatability mode.
        at org.apache.hadoop.mapreduce.Job.ensureNotSet(Job.java:1210)
        at org.apache.hadoop.mapreduce.Job.setUseNewAPI(Job.java:1245)
        at org.apache.hadoop.mapreduce.Job.submit(Job.java:1299)
        at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:564)
        at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:559)
        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:1671)
        at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:559)
        at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:550)
        at org.apache.hadoop.hive.ql.exec.mr.ExecDriver.execute(ExecDriver.java:429)
        at org.apache.hadoop.hive.ql.exec.mr.MapRedTask.execute(MapRedTask.java:137)
        at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:160)
        at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:88)
        at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1640)
        at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1399)
        at org.apache.hadoop.hive
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/976651
推荐阅读
相关标签
  

闽ICP备14008679号