`
奔跑的羚羊
  • 浏览: 576869 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hive处理日志,自定义inputformat

    博客分类:
  • hive
阅读更多
开放环境,hadoop-0.20.2,hive-0.6

1.日志分隔符
2010-05-31 10:50:17|||61.132.4.82|||http://www.360buy.com/product/201185.html

分隔符是“ ||| ”,这是为了尽可能防止日志正文出现与分隔符相同的字符而导致数据混淆。
hive 的内部分隔符是“ \001 ”,所以我们需要做一下转换

2.编写自定义InputFormat
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(job, (FileSplit) genericSplit);
	}
}

3.自定义ClickstreamRecordReader实现RecordReader接口,并重写next方法
 
/** Read a line. */
  public synchronized boolean next(LongWritable key, Text value)
    throws IOException {

    while (pos < end) {
      key.set(pos);

      int newSize = in.readLine(value, maxLineLength,
                                Math.max((int)Math.min(Integer.MAX_VALUE, end-pos),
                                         maxLineLength));
      
      //start
      String strReplace = value.toString().toLowerCase().replaceAll("\\|\\|\\|" , "\001" );
	  Text txtReplace = new Text();
      txtReplace.set(strReplace );
      value.set(txtReplace.getBytes(), 0, txtReplace.getLength());
      //end
      
      
      if (newSize == 0) {
        return false;
      }
      pos += newSize;
      if (newSize < maxLineLength) {
        return true;
      }

      // line too long. try again
      LOG.info("Skipped line of size " + newSize + " at pos " + (pos - newSize));
    }

    return false;
  }

我们可以直接使用LineRecordReader,修改next方法

3.启动hive,添加我们自己刚刚添加的类


4.创建数据库
create table clickstream_table(time string, ip string, url string) stored as INPUTFORMAT 'com.jd.cloud.clickstore.ClickstreamInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION '/data/clickstream_20110216.txt';


5.导入数据
LOAD DATA LOCAL INPATH '/data/clickstream_20110216.txt' OVERWRITE INTO TABLE clickstream_table;


6.查询刚刚到入的数据
select * from clickstream_table;



参考http://wiki.apache.org/hadoop/Hive/SerDe
  • 大小: 10.2 KB
0
0
分享到:
评论
2 楼 bin_1715575332 2013-04-20  
为何不直接指定row format delimited field terminated as '\\|\\|\\|'?
1 楼 lvshuding 2011-08-08  
请问,能把完整的程序代码打个包传上来吗?

相关推荐

    hive inputformat

    Hive的InputFormat允许我们灵活地处理各种数据源和格式,通过自定义InputFormat,我们可以按需定制数据读取逻辑,比如这里演示的按照空格拆分日志文件。理解并掌握InputFormat对于优化Hive查询性能和处理复杂数据...

    hive源码分析

    2. **初始化日志**:通过`SessionState.initHiveLog4j()`初始化日志相关的类,确保在Hive其他核心类初始化前完成。 3. **创建SessionState**:为当前会话创建一个`SessionState`实例,并传入一个`HiveConf`对象。 4....

    Hive编程指南

    4. **UDF/UDAF/UDTF**:Hive支持用户自定义函数(UDF)、聚合函数(UDAF)以及表生成函数(UDTF),可以扩展Hive的功能。 ### 性能优化 1. **小文件合并**:Hive可以通过调整参数来减少小文件的数量,从而提高查询性能。...

    hadoop项目--网站流量日志分析--5.docx

    通过自定义InputFormat和OutputFormat,Sqoop能够适应不同的数据源和目标格式。例如,你可以使用Sqoop将MySQL、Oracle等传统数据库中的数据导入到HDFS或Hive,反之亦然,将Hadoop中的数据导出回关系数据库。 在数据...

    hadoop 开发者入门专刊 1-4

    6. Hadoop数据输入与输出:学习如何使用InputFormat和OutputFormat进行数据读取和写入,以及自定义InputFormat和OutputFormat的方法。 7. Hadoop作业提交与监控:了解如何使用Hadoop命令行工具提交作业,以及如何...

    大数据应用技术介绍.pptx

    MapReduce还提供了扩展接口,允许用户自定义InputFormat、Mapper、Partitioner、Reducer和OutputFormat,以适应不同的数据处理需求。 在Hadoop生态系统中,还有许多其他工具和框架。例如,Pig是一种高级查询语言,...

    《实战Hadoop--开启通向云计算的捷径》源码

    3. **MapReduce编程**:讲解如何编写Map和Reduce函数,包括键值对的处理、分区、排序和归约过程,以及自定义InputFormat和OutputFormat。 4. **Hadoop生态组件**:如HBase(分布式数据库)、Hive(数据仓库工具)、...

    Hadoop高级编程- 构建与实现大数据解决方案

    6. **数据输入和输出格式**:学习自定义InputFormat和OutputFormat,以处理非标准格式的数据,如CSV、JSON或其他定制格式。 7. **错误处理和容错机制**:理解Hadoop的检查点、故障检测和恢复策略,以及如何在代码中...

    hadoop-3.1.2-src.tar.gz

    2. 功能扩展:Hadoop提供了丰富的API,允许开发人员根据需求扩展其功能,如自定义InputFormat、OutputFormat、Partitioner等。源码中包含了大量的示例,可以帮助我们更好地理解和使用这些接口。 四、Hadoop在实际...

    hadoop应用开发技术详解代码

    - 自定义InputFormat和OutputFormat:根据实际需求定制数据输入输出格式。 - 分析日志数据:使用MapReduce处理大量服务器日志,提取有价值信息。 - 处理复杂数据结构:例如XML或JSON文件的解析和处理。 6. **...

    hadoop权威指南第二版源代码

    7. **Hadoop的扩展性**:源代码中会有关于如何自定义InputFormat、OutputFormat、RecordReader、RecordWriter等内容,这让你能够根据需求扩展Hadoop以适应各种数据格式和处理需求。 8. **配置与优化**:书中源码还...

    高级软件人才培训专家-Hadoop课程资料-5-第五章 - 分布式SQL计算 Hive 语法与概念

    ### 高级软件人才培训专家-Hadoop课程资料-5-第五章 - 分布式SQL计算 Hive 语法...通过本章节的学习,学员不仅能够掌握Hive的基础操作,还能够理解Hive与HDFS之间的紧密联系,为日后的大数据处理与分析打下坚实的基础。

    Hadoop实战 随书源码

    - `listing-4-1`至`listing-4-11`涵盖了数据输入格式的定义(如自定义InputFormat)以及数据输出格式(OutputFormat)的实现,这对于定制化数据处理流程至关重要。 4. **Hadoop配置与集群管理**: - 文件名未明确...

    hadoop.rar

    用户还可以自定义InputFormat和OutputFormat以适应特定的数据格式。 7. 容错机制:Hadoop通过数据复制和心跳检测机制来确保系统的高可用性。当DataNode出现故障时,HDFS能自动从其他副本恢复数据。 8. 性能优化:...

    Hadoop Map Reduce教程

    - **自定义类**:用户可以自定义 `InputFormat` 和 `OutputFormat` 类来控制输入输出格式。 #### 四、Hadoop MapReduce 性能调优 - **内存管理**:合理设置 MapReduce 任务的内存大小可以提高整体性能。 - **数据...

Global site tag (gtag.js) - Google Analytics