在平时使用的都是指定分割符的存储,在遇到特殊符号的,比如有好几个字符相连的,hive是不能自己处理的,这时候就需要在inputformat/outputformat上处理:
实现这个功能需要实现两个函数:
一个是InputFormat的next函数:
在这里处理的特殊字符是 @##@ 分割符号
:
@Override
public boolean next(LongWritable key, BytesWritable value)
throws IOException {
while (reader.next(key, text)) {
String strReplace = text.toString().toLowerCase().replace(
"@##@", "\001");
Text txtReplace = new Text();
txtReplace.set(strReplace);
value.set(txtReplace.getBytes(), 0, txtReplace.getLength());
return true;
}
// no more data
return false;
}
另一个是实现HiveIgnoreKeyTextOutputFormat的write函数:
@Override
public void write(Writable w) throws IOException {
String strReplace = ((Text)w).toString().replace("\001", "@##@");
Text txtReplace = new Text();
txtReplace.set(strReplace);
byte[] output = txtReplace.getBytes();
bytesWritable.set(output, 0, output.length);
writer.write(bytesWritable);
}
上述两个类可参考hive/src/contrib/org/apache/hadoop/hive/contrib/fileformat.base64下的两个类
然后就是使用:
1.
先把自己写的程序打包添加:
add
jar /home/hadoop/Desktop/generate-lib/format.jar;
2.
创建表:
create
table t_person(p_time string, id string,ip string, phone string,
blood_pressure int) stored as INPUTFORMAT
'org.apache.hadoop.hive.contrib.
fileformat.base64
.LogInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.contrib.
fileformat.base64
.LogOutputFormat';
3.
往表里添加数据:
load
data local inpath '/home/hadoop/Desktop/hivedata.log' overwrite into
table t_person;
分享到:
相关推荐
Hive多字节分隔符解决方案 Hive是一种基于Hadoop的数据仓库工具,用于存储和处理大量数据。然而,在加载数据到Hive表中时,我们可能会遇到多字节分隔符问题,即数据中的分隔符不是单字节的,而是多字节的。这种情况...
在Hive 2.0及更高版本中,启用Metastore审计日志是确保数据安全性与合规性的重要步骤。审计日志记录了用户对Hive Metastore的所有操作,包括元数据的创建、修改和查询等,这对于追踪系统活动、故障排查以及满足法规...
基于Hive的搜狗日志分析 本文档主要介绍了基于Hive的搜狗日志分析的整个过程,从数据预处理、构建数据仓库、数据分析到其他数据操作等方面进行了详细的介绍。 一、 数据预处理 数据预处理是整个日志分析的第一步...
针对传统分布式模型在海量日志并行处理时的可扩展性和并行程序编写困难的问题, 提出了基于Hive的Web海量搜索日志分析机制。利用HQL语言以及Hadoop分布式文件系统(HDFS)和MapReduce编程模式对海量搜索日志进行分析...
文档编写目的 Hive在0.14及以后版本支持字段的多分隔符,参考: ... 而Fayson在以前的文章中也基于C5...如何将多个字符作为字段分割符的数据文件加载到Hive表中,示例数据如下: 字段分隔符为“@#$” test1@#$test1name@#$t
Hadoop/Hive系统通过HDFS存储Web日志数据,并通过Hive处理这些数据,最终实现日志分析的功能。 设计Web日志分析系统时,需要考虑到以下几个核心功能模块: 1. 日志采集模块:负责实时或定时从Web服务器获取日志...
这里使用了制表符`\t`作为字段之间的分隔符,并指定了数据文件的具体存储位置。 #### 三、数据导入 完成表结构的定义后,下一步是将实际的日志数据导入到Hive表中。这通常可以通过两种方式实现: 1. **上传数据文件...
Apache Web日志Hive实验数据是针对大数据处理和分析领域的一个常见练习,主要涉及Apache Hive这一强大的大数据处理工具。Apache Hive是一种基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,...
实验中创建了一个名为`stocks`的内部表,字段分隔符为英文逗号。表结构包括`exchange`、`symbol`、`ymd`、`price_open`、`price_high`、`price_low`、`price_close`、`volume`和`price_adj_close`等字段,数据类型...
HIVE是一种基于Hadoop的数据仓库工具,主要用于处理和分析大规模数据。下面是关于HIVE的安装及详解。 HIVE基本概念 HIVE是什么?HIVE是一种数据仓库工具,主要用于处理和分析大规模数据。它将结构化数据文件转换为...
1. **日志数据提取**:在 Eclipse 中创建一个 MapReduce 工程(HiveHadoopMysqlPro),用于处理日志分析任务。在开始之前,确保将 Hive 的库目录(lib)下的所有 JAR 包复制到 Hadoop 的 lib 目录下,以便 MapReduce...
海量数据处理-hive数据仓库 很好的讲解的大数据海量数据处理的数据仓库模型建设
【Hive函数重要应用案例1】本章主要探讨在Hive中处理特殊数据格式的技巧,特别是涉及多字节分隔符和字段内包含分隔符的问题。在Hive中,通常使用单字节分隔符(如逗号、制表符)来加载文本数据,但在实际场景中,...
Hive优化案例、Hive数据处理模式、Hive常见问题与优化、Hive实践 Hive是一种基于Hadoop的数据仓库工具,用于对大规模数据进行处理和分析。在大数据时代,Hive的应用非常广泛,本文将从Hive优化案例、Hive数据处理...
【标题】:“基于Hadoop平台Hive数据库处理电影数据”的文档详细介绍了如何在Hadoop分布式环境中利用Hive进行大规模电影数据的分析。该系统的主要目标是建立一个分布式Hadoop集群,并在此基础上对电影数据进行深入...
此外,Hive的SerDe(序列化/反序列化)库需要与日志格式匹配,比如使用`org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe`来处理常见的Nginx日志格式。 在Hive中创建表结构,以匹配Nginx日志字段: ```sql ...
在大数据处理领域,Hive是一个非常重要的工具,它提供了一个基于Hadoop的数据仓库基础设施,用于数据查询、分析和管理大规模数据集。本教程将详细讲解如何在Linux环境下安装Hive客户端,以便进行数据操作和分析。 ...