为何要设置此功能是由于 hive fields terminated by '||||' 不支持 字符串导致
将你的inputformat类打成jar包,如MyInputFormat.jar
将MyInputFormat.jar放到 hive/lib里,然后就可以建表了
假设你的inputFormat类路径是com.hive.myinput
则建表语句为:create table tbname(name stirng,id int, ...) stored as INPUTFORMAT 'com.hive.myinput' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
HiveIgnoreKeyTextOutputFormat是系统自带的outputformat类,你也可以自定义
由于hive是基于hadoop集群运行的,所以hadoop/lib里面也必须放入MyInputFormat.jar,
此功能需要二个CLASS 类:ClickstreamInputFormat ClickstreamRecordReader
- package com.jd.cloud.clickstore;
- import java.io.IOException;
- 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.RecordReader;
- import org.apache.hadoop.mapred.Reporter;
- import org.apache.hadoop.mapred.TextInputFormat;
- /**
- * 自定义hadoop的 org.apache.hadoop.mapred.InputFormat
- *
- * @author winston
- *
- */
- public class ClickstreamInputFormat extends TextInputFormat implements
- JobConfigurable {
- public RecordReader<LongWritable, Text> getRecordReader(
- InputSplit genericSplit, JobConf job, Reporter reporter)
- throws IOException {
- reporter.setStatus(genericSplit.toString());
- return new ClickstreamRecordReader((FileSplit) genericSplit,job);
- }
- }
- package com.jd.cloud.clickstore;
- import java.io.IOException;
- import java.io.InputStream;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FSDataInputStream;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.io.LongWritable;
- import org.apache.hadoop.io.Text;
- import org.apache.hadoop.io.compress.CompressionCodec;
- import org.apache.hadoop.io.compress.CompressionCodecFactory;
- import org.apache.hadoop.mapred.FileSplit;
- import org.apache.hadoop.util.LineReader;
- import org.apache.hadoop.mapred.RecordReader;
- public class ClickstreamRecordReader implements
- RecordReader<LongWritable, Text> {
- private CompressionCodecFactory compressionCodecs = null;
- private long start;
- private long pos;
- private long end;
- private LineReader lineReader;
- int maxLineLength;
- public ClickstreamRecordReader(FileSplit inputSplit, Configuration job)
- throws IOException {
- maxLineLength = job.getInt("mapred.ClickstreamRecordReader.maxlength",
- Integer.MAX_VALUE);
- start = inputSplit.getStart();
- end = start + inputSplit.getLength();
- final Path file = inputSplit.getPath();
- compressionCodecs = new CompressionCodecFactory(job);
- final CompressionCodec codec = compressionCodecs.getCodec(file);
- // Open file and seek to the start of the split
- FileSystem fs = file.getFileSystem(job);
- FSDataInputStream fileIn = fs.open(file);
- boolean skipFirstLine = false;
- if (codec != null) {
- lineReader = new LineReader(codec.createInputStream(fileIn), job);
- end = Long.MAX_VALUE;
- } else {
- if (start != 0) {
- skipFirstLine = true;
- --start;
- fileIn.seek(start);
- }
- lineReader = new LineReader(fileIn, job);
- }
- if (skipFirstLine) {
- start += lineReader.readLine(new Text(), 0,
- (int) Math.min((long) Integer.MAX_VALUE, end - start));
- }
- this.pos = start;
- }
- public ClickstreamRecordReader(InputStream in, long offset, long endOffset,
- int maxLineLength) {
- this.maxLineLength = maxLineLength;
- this.lineReader = new LineReader(in);
- this.start = offset;
- this.pos = offset;
- this.end = endOffset;
- }
- public ClickstreamRecordReader(InputStream in, long offset, long endOffset,
- Configuration job) throws IOException {
- this.maxLineLength = job.getInt(
- "mapred.ClickstreamRecordReader.maxlength", Integer.MAX_VALUE);
- this.lineReader = new LineReader(in, job);
- this.start = offset;
- this.pos = offset;
- this.end = endOffset;
- }
- public LongWritable createKey() {
- return new LongWritable();
- }
- public Text createValue() {
- return new Text();
- }
- /**
- * Reads the next record in the split. get usefull fields from the raw nginx
- * log.
- *
- * @param key
- * key of the record which will map to the byte offset of the
- * record's line
- * @param value
- * the record in text format
- * @return true if a record existed, false otherwise
- * @throws IOException
- */
- public synchronized boolean next(LongWritable key, Text value)
- throws IOException {
- // Stay within the split
- while (pos < end) {
- key.set(pos);
- int newSize = lineReader.readLine(value, maxLineLength,
- Math.max((int) Math.min(Integer.MAX_VALUE, end - pos),
- maxLineLength));
- if (newSize == 0)
- return false;
- String str = value.toString().toLowerCase()
- .replaceAll("\\@\\_\\@", "\001");
- value.set(str);
- pos += newSize;
- if (newSize < maxLineLength)
- return true;
- }
- return false;
- }
- public float getProgress() {
- if (start == end) {
- return 0.0f;
- } else {
- return Math.min(1.0f, (pos - start) / (float) (end - start));
- }
- }
- public synchronized long getPos() throws IOException {
- return pos;
- }
- public synchronized void close() throws IOException {
- if (lineReader != null)
- lineReader.close();
- }
- // 测试 输出
- //public static void main(String ags[]){
- // String str1 ="123@_@abcd@_@fk".replaceAll("\\@\\_\\@", "\001");
- // System.out.println(str1);
- //}
- }
1.上传到 HIVE 服务器上 JAVAC 编译
- javac -cp ./:/usr/lib/hadoop/hadoop-common.jar:/home/op1/hadoop/hadoop-core-1.0.3.jar:/usr/lib/hadoop/lib/commons-logging-1.1.1.jar */**/*/*/*
2.JAR 打包 类文件
- jar -cf ClickstreamInputFormat.jar /home/op1/uerdwdb/src/
3.复制 Hive/lib Hadoop/lib 文件夹内
4.Hive 创建表命令
- create table hive_text(num int,name string,`add` string)
- stored as INPUTFORMAT 'com.jd.cloud.clickstore.ClickstreamInputFormat'
- OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
- location '/home/op1/uerdwdb/text.txt';
http://blog.csdn.net/iquicksandi/article/details/8533699
大家可以加我个人微信号:scccdgf
或者关注soledede的微信公众号:soledede
微信公众号:

相关推荐
6. **数据输入和输出格式**:学习自定义InputFormat和OutputFormat,以处理非标准格式的数据,如CSV、JSON或其他定制格式。 7. **错误处理和容错机制**:理解Hadoop的检查点、故障检测和恢复策略,以及如何在代码中...
9. **RESTful接口**:除了传统的MapReduce和Spark支持,Elasticsearch-Hadoop还支持通过Hadoop的InputFormat和OutputFormat使用Hadoop的通用工具(如Hive和Pig)来与Elasticsearch交互,这些工具可以直接利用Elastic...
轴类零件加工工艺设计.zip
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
seaborn基本绘图人力资源数据集
移动机器人(sw三维)
自制html网页源代码查看器
3吨叉车的液压系统设计().zip
1_实验三 扰码、卷积编码及交织.ppt
北京交通大学软件学院自命题科目考试大纲.pdf
雅鲁藏布江流域 shp矢量数据 (范围+DEM).zip
基于RUST的数据结构代码示例,栈、队列、图等
NIFD:2024Q1房地产金融报告
详细介绍及样例数据:https://blog.csdn.net/li514006030/article/details/146916652
【工业机器视觉定位软件Vision-Detect】基于C#的WPF与Halcon开发的工业机器视觉定位软件(整套源码),开箱即用 有用户登录,图片加载,模板创建,通讯工具,抓边抓圆,良率统计,LOG日志,异常管理,九点标定和流程加载保存等模块,功能不是很完善,适合初学者参考学习。 资源介绍请查阅:https://blog.csdn.net/m0_37302966/article/details/146912206 更多视觉框架资源:https://blog.csdn.net/m0_37302966/article/details/146583453
内容概要:本文档详细介绍了Java虚拟机(JVM)的相关知识点,涵盖Java内存模型、垃圾回收机制及算法、垃圾收集器、内存分配策略、虚拟机类加载机制和JVM调优等内容。首先阐述了Java代码的编译和运行过程,以及JVM的基本组成部分及其运行流程。接着深入探讨了JVM的各个运行时数据区,如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区等的作用和特点。随后,文档详细解析了垃圾回收机制,包括GC的概念、工作原理、优点和缺点,并介绍了几种常见的垃圾回收算法。此外,文档还讲解了JVM的分代收集策略,新生代和老年代的区别,以及不同垃圾收集器的工作方式。最后,文档介绍了类加载机制、JVM调优的方法和工具,以及常用的JVM调优参数。 适合人群:具备一定Java编程基础的研发人员,尤其是希望深入了解JVM内部机制、优化程序性能的技术人员。 使用场景及目标:①帮助开发人员理解Java代码的编译和执行过程;②掌握JVM内存管理机制,包括内存分配、垃圾回收等;③熟悉类加载机制,了解类加载器的工作原理;④学会使用JVM调优工具,掌握常用调优参数,提升应用程序性能。 其他说明:本文档内容详尽,适合用作面试准备材料和技术学习资料,有助于提高开发人员对JVM的理解和应用能力。
Android项目原生java语言课程设计,包含LW+ppt
戴德梁行&中国房地产协会:2021亚洲房地产投资信托基金研究报告
Android项目原生java语言课程设计,包含LW+ppt
Thinkphp6.0+vue个人虚拟物品发卡网站源码 支持码支付对接 扫码自动发货 源码一共包含两个部分thinkphp6.0后端文件,以及vue前端文件.zip