赞
踩
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;
集群模式则需要将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
前不久在公司集群上搭建Hive环境,所需要的JDK、Hadoop、Zookeeper、Mysql等都已经搭建完成。下载解压Hive jar包并修改配置文件之后,启动Hive CLI(Command Line Interface),执行本地模式的SQL毫无问题,但只要调用MapReduce就会报错,下面是报错的情况。
先说解决方案吧,主要是由于Hadoop或者Hive的配置文件中同时指定了老版本输入格式mapred.input.format.class
和mapreduce.job.inputformat.class
,Hadoop的调用Job的submit的方法时,会首先校验使用了mapreduce1还是mapreduce2的API,如果两个同时存在,是一定会报错的。
比较推荐的解决方式是:修改Job的**setUseNewAPI**方法,根据集群当前使用的API版本,将另外一个版本的配置信息设置为null。
在Hive中执行
select count(1) from db_name.tb_name where date='2017-09-23'
执行错误信息如下
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。