HIVE自定义TextInputFormat (旧版MapReduceAPI ok, 新版MapReduceAPI实现有BUG?)

我们的输入文件 hello0, 内容如下:

xiaowang 28 [email protected][email protected] 38 [email protected][email protected] 100 unknown

逻辑上有3条记录, 它们以@[email protected]分隔. 我们将分别用旧版MapReduce API 和新版MapReduce API实现自定义TextInputFormat,然后在hive配置使用, 加载数据.

首先用旧版API

1, 自定义Format6继承自TextInputFormat

package MyTestPackage;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileSplit;
import org.apache.hadoop.mapred.InputSplit;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.JobConfigurable;
import org.apache.hadoop.mapred.LineRecordReader;
import org.apache.hadoop.mapred.RecordReader;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TaskAttemptContext;
import org.apache.hadoop.mapred.TextInputFormat;  

public class Format6 extends TextInputFormat {

    @Override
    public RecordReader getRecordReader (InputSplit split, JobConf job, Reporter reporter)  throws IOException {
        byte[] recordDelimiterBytes = "@[email protected]".getBytes();
        return new LineRecordReader(job, (FileSplit)split, recordDelimiterBytes);
    }

}

2.导出为MyInputFormat.jar, 放到 hive/lib中

3.在HIVE DDL中配置使用

create table hive_again2(name varchar(50), age int, city varchar(30))
stored as INPUTFORMAT ‘MyTestPackage.Format6‘ OUTPUTFORMAT ‘org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat‘;

成功load数据-

新API

1, 自定义Format5继承自TextInputFormat

package MyTestPackage;

import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.apache.hadoop.mapreduce.lib.input.LineRecordReader;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;

public class Format5 extends TextInputFormat {

    @Override
    public RecordReader createRecordReader (InputSplit split, TaskAttemptContext tac) {
        byte[] recordDelimiterBytes = "@[email protected]".getBytes();
        return new LineRecordReader(recordDelimiterBytes);
    }

}

2.导出为MyInputFormat.jar, 放到 hive/lib中

3.在HIVE DDL中配置使用

create table hive_again1(name varchar(50), age int, city varchar(30))
stored as INPUTFORMAT ‘MyTestPackage.Format5‘ OUTPUTFORMAT ‘org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat‘;

出错了!

把Format5放到MapReduce中debug一切正常(http://www.cnblogs.com/silva/p/4490532.html), 为什么给hive用就不行了呢? 没明白.. 有知道的同学请指点.谢了!

时间: 2024-10-15 05:11:13

HIVE自定义TextInputFormat (旧版MapReduceAPI ok, 新版MapReduceAPI实现有BUG?)的相关文章

[JIRA] Jira从3.6.2旧版升级到新版6.0.8的详细过程

前言: JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域. 公司原来用的是JIRA 3.6.2版本,Atlassian官方已不推荐使用JIRA 4.4之前的版本,之前的版本有漏洞也已不再更新,同事已经安装好了JIRA6.0.8版本,新版的JIRA界面扁平化设计,支持移动端浏览,很符合移动互联网企业的风格,现在JIRA升级到了新的版本JIRA 6.1.7,但是在迁移数据的时候,直接从3.6.2迁移到

win10系统,jdk环境变量配置,编辑系统变量窗口显示旧版单行和新版列表问题

大家好,今天说一下我在配置jdk环境变量时遇到的编辑系统变量窗口显示问题. 首先我们说一下如何配置jdk环境变量. 右击此电脑,点击属性. 跳出如下窗口,点击高级系统设置. 跳出如下窗口,点击环境变量. 跳出如下窗口,点击新建,(注意一定是系统变量栏下的新建). 跳出如下窗口,编辑变量名和变量值,变量名如下:JAVA_HOME,变量值为安装的jdk路径,点击确定按钮. 找到path点击编辑,按照图上编号步骤执行,编号4是题主之前配置好的,这里需要读者自己输入一下,%JAVA_HOME%/bin.

删除 centOS6.5 默认安装的旧版 firefox ,安装最新版 firefox 全过程

前言 在当前的 centOS6.5 安装光盘中,自带的 firefox web browser 版本过旧,而且是 ESR 版,也就是无法进行自动更新,这会导致安装系统以后,默认的 17.0.10 旧版与新版的差距越来越大,参考如下截图: 我们可以通过卸载这个旧版,然后安装可以自动升级的新版 firefox 来解决这个问题: 必须指出,安装新版的 firefox 有2种途径:通过 yum 自动升级安装和从 firefox 官网下载最新版来安装: 无论是 centos 官方 yum 源服务器,还是查

弹性盒模型--新版与旧版比较(1)

<style> body{ margin:0; } #box{ height:200px; border:1px solid #000; 新版弹性盒模型 /*display:flex;*/ /*flex-direction:row;*/  设置主轴方向为水平方向 /*flex-direction:column;*/  设置主轴方向为垂直方向 /*flex-direction:row-reverse;*/  设置主轴方向为水平,元素排列为反序 /*flex-direction:column-re

创建本地RPM源之更新系统旧版软件

事情起因: 系统版本为Centos6.6 ,因为之前同事没有采用最小化选择性安装,所以系统安装好后自带有mysql5.1的三个安装包: [[email protected] ~]# rpm -qa | grep mysql mysql-5.1.73-3.el6_6.x86_64 mysql-devel-5.1.73-3.el6_6.x86_64 mysql-lib-5.1.73-3.el6_6.x86_64 在安装新版本mysql前,只卸载掉了 mysql 和 mysql-devel,但没能成功

(转)Resources和AssetBundle(新旧版)学习

Resources: Resources的缺点:1.与显示Inspector上直接引用相比,Resources使用不方便. 2.不管你Resources上的资源是否调用了,当你发布的时候,Resources上的资源会全部一起打包掉,无法作更新. Resources里的方法: Resources.Load :动态加载特殊文件夹Resources里的文件. Resources.UnloadAsset:回收指定的缓存. Resources.UnloadUnusedAsset:回收没有被引用的缓存 这里

4.6之前旧版动画系统(Animation),AI

一:4.6之前旧版动画系统(Animation)二:4.6版本之后新版动画系统(Animator)方法:动画分割方法:(控制动画播放的动画)1. Play2. CrossFade3. CrofdFadeQueuedIsPlaying()指定的动画是否正在播放Stop()停止播放指定的动画属性:isPlaying:当前是否有动画正在播放 Rig标签中的Animation Type要是Legacy(旧版动画系统) 动画融合(通过指定关节来播放动画) 动画帧事件(当动画播放到某一帧时执行指定的方法,比

Resources和AssetBundle(新旧版)学习(来自蛮牛)

Resources: Resources的缺点:1.与显示Inspector上直接引用相比,Resources使用不方便. 2.不管你Resources上的资源是否调用了,当你发布的时候,Resources上的资源会全部一起打包掉,无法作更新. Resources里的方法: Resources.Load :动态加载特殊文件夹Resources里的文件. Resources.UnloadAsset:回收指定的缓存. Resources.UnloadUnusedAsset:回收没有被引用的缓存 这里

Arcgis API For IOS扩展AGSDynamicLayer新旧版API对比

AGSDynamicLayer(ForSubclassEyesOnly) Category Reference Description This category organizes the methods that are relevant to subclassing a dynamic layer. Developer can create custom dynamic layers by paying special attention to the methods in this ca