一、背景
1、当进程在进行远程通信时,彼此可以发送各种类型的数据,无论是什么类型的数据都会以二进制序列的形式在网络上传送。发送方需要把对象转化为字节序列才可在网络上传输,称为对象序列化;接收方则需要把字节序列恢复为对象,称为对象的反序列化。
2、Hive的反序列化是对key/value反序列化成hive table的每个列的值。
3、Hive可以方便的将数据加载到表中而不需要对数据进行转换,这样在处理海量数据时可以节省大量的时间。
SerDe
SerDe 是 Serialize/Deserilize 的简称,目的是用于序列化和反序列化。序列化的格式包括:
- 分隔符(tab、逗号、CTRL-A)
- Thrift 协议
反序列化(内存内):
- Java Integer/String/ArrayList/HashMap
- Hadoop Writable 类
- 用户自定义类
目前存在的 Serde 见下图:
其中,LazyObject 只有在访问到列的时候才进行反序列化。 BinarySortable:保留了排序的二进制格式。
Input processing
-
Hive's
execution engine (referred to as just engine henceforth) first uses the
configured InputFormat to read in a record of data (the value object
returned by the RecordReader of the InputFormat).
-
The
engine then invokes Serde.deserialize() to perform deserialization of
the record. There is no real binding that the deserialized object
returned by this method indeed be a fully deserialized one.
For
instance, in Hive there is a LazyStruct object which is used by the
LazySimpleSerde to represent the deserialized object.
This object does
not have the bytes deserialized
up front but does at the point of access
of a field.
-
The
engine also gets hold of the ObjectInspector to use by invoking
Serde.getObjectInspector(). This has to be a subclass of
structObjectInspector since a record representing a row of input data is
essentially a struct type.
-
The
engine passes the deserialized object(
eg. LazyStruct
) and the object inspector to all
operators for their use in order to get the needed data from the record.
The object inspector
knows how to construct individual fields out of a
deserialized
record. For example, StructObjectInspector has a method
called getStructFieldData() which returns a certain field in the record.
This is the mechanism to access individual fields.
For instance
ExprNodeColumnEvaluator
class which can extract a column from the input
row uses this mechanism to get the real column object from the
serialized row object. This real column object in turn can be a complex
type (like a struct). To access sub fields in such complex typed
objects, an operator would use the object inspector associated with that
field (The top level StructObjectInspector for the row maintains a list
of field level object inspectors which can be used to interpret
individual fields).
ps:ExprNodeColumnEvaluator是真正将数据deserialize的结构,而
ObjectInspector使用的是deserialize以后的结果。
For
UDFs the new GenericUDF abstract class provides the ObjectInspector
associated with the UDF arguments in the initialize() method. So the
engine first initializes the UDF by calling this method. The UDF can
then use these ObjectInspectors to interpret complex arguments (for
simple arguments, the object handed to the udf is already the right
primitive object like LongWritable/IntWritable
etc).
Output processing
Output
is analogous to input. The engine passes the deserialized Object
representing a record and the corresponding ObjectInspector to
Serde.serialize(). In this context serialization means converting the
record object to an object of the type expected by the OutputFormat
which will be used to perform the write. To perform this conversion, the
serialize() method can make use of the passed ObjectInspector to get
the individual fields in the record in order to convert the record to
the appropriate type.
分享到:
相关推荐
《Hive与JSON-Serde:大数据处理中的关键组件》 在大数据处理领域,Apache Hive扮演着重要的角色,它是一个基于Hadoop的数据仓库工具,能够让我们通过SQL查询语言(HQL)来处理存储在Hadoop分布式文件系统(HDFS)...
`Hive-JSON-Serde-develop`项目就是针对JSON数据格式专门设计的一种SerDe,允许用户在Hive中直接处理JSON数据。 标题中的“Hive-JSON-Serde-develop”指的是一个开发项目,旨在为Hive提供对JSON数据的支持。这个...
row format serde 'com.bizo.hive.serde.csv.CSVSerde' stored as textfile ; 自定义格式 opencsv库中的默认分隔符,引号和转义符是: DEFAULT_ESCAPE_CHARACTER \ DEFAULT_QUOTE_CHARACTER " DEFAULT_SEPARATOR ...
适用于Apache Hadoop Hive的序列化/反序列化模块 此模块允许配置单元以JSON格式进行读写(有关更多信息,请参见 )。 特征: 读取以JSON格式存储的数据 INSERT INTO表时将数据转换为JSON格式 支持数组和映射 还...
【描述】提到的"hive-serde.zip"是与Hive数据处理框架相关的压缩文件,特别提到了用于配置单元的JSON序列化/反序列化(SerDe)组件。Hive SerDe是Hive(基于Hadoop的数据仓库工具)中的一种接口,它负责将表格中的每...
7. **hive-serde-0.11.0.jar**:Hive SerDe(Serilization/Deserialization)是 Hive 对数据进行序列化和反序列化的接口,用于将不同格式的数据转化为 Hive 可以理解的形式。 8. **log4j-1.2.14.jar**:这是一个...
【描述】中的 "hive-serde.zip" 提到的是与 Hive SerDe(Serilization/Deserialization)相关的库。Hive 是一个基于 Hadoop 的数据仓库工具,它允许通过 SQL 类似的查询语言访问存储在分布式系统中的大数据。SerDe ...
4. **Hive SerDe 支持**:Spark 2.3.1 支持 Hive 的序列化和反序列化(SerDe)机制,这意味着用户可以使用 Hive 中定义的复杂数据类型和自定义 SerDes。 5. **Spark SQL 和 HiveQL 混合使用**:用户可以在同一个 ...
3. **Hive SerDe**: SerDe(Serializer/Deserializer)是Hive中用于处理数据序列化和反序列化的组件。不同的SerDe对应不同格式的数据,例如:JSONSerDe、ParquetSerDe等。 4. **Hive Shim层**: 由于Hadoop和Hive的...
8. **Hive SerDe**:SerDe(Serializer/Deserializer)是Hive处理数据输入和输出的关键组件,它定义了如何序列化和反序列化数据。Hive支持多种SerDe,如LazySimpleSerDe、JSONSerDe、ParquetSerDe等。 9. **Hive与...
Hive SerDe(Serializer/Deserializer)是Hive处理不同类型数据的关键组件,这个jar文件可以帮助Hive解析和存储JSON格式的数据。 5. **MySQL连接器** “mysql-connector-java-5.1.47-bin.jar”是MySQL的Java驱动,...
8. **Hive SerDe**:序列化/反序列化库,用于处理不同格式的数据,如CSV、JSON等。 9. **Hive UDFs**:用户自定义函数,允许开发者扩展HQL的功能,实现更复杂的计算逻辑。 学习Hive的过程中,还需要了解如何在...
Hive提供了丰富的接口供外部应用访问,包括Hive JDBC和Hive SerDe(Serializer/Deserializer),Java程序可以利用这些接口读取Hive表中的数据。 2. **Spark计算框架**: Spark是大数据处理的开源框架,以其高效、...
例如,Hive可以通过Hive SerDe(Serialization/Deserialization)接口与各种数据格式交互,使数据导入导出更加灵活。 七、Hive的扩展性 随着需求增长,Hive提供了如Hive-on-Spark、Tez和Hive LLAP(Live Long and ...
1. **Hive SerDe**:在Hive中,SerDe(Serializer/Deserializer)负责将数据从Hive表中读取出来以及将数据写入Hive表。为了处理Protobuf序列化的文件,我们需要一个专门的Protobuf SerDe。Hive并不内置支持Protobuf...
9. **Hive SerDe支持**:Spark-Hive支持Hive的序列化和反序列化库(SerDe),使得Spark可以处理各种格式的数据,如JSON、Parquet、ORC等。 通过Spark-Hive 2.11-2.1.4-SNAPSHOT版本,我们可以看到Spark和Hive的深度...
hive-json-serde-0.2.jar
适用于Apache Hive XML SerDe的VTD处理器 使用基于VTD-XML的处理器代替默认的JDK DOM XPath处理器可以显着提高性能。 参见 使用以下DDL创建Apache Hive表,注意VTD-XML处理器的“ xml.processor.class”, 创建...
5. **Hive SerDe (Serializer/Deserializer)**: 负责数据的序列化和反序列化,使Hive能处理不同格式的数据。 ### 二、Hive架构 Hive架构主要包含以下组件: 1. **Client**: 用户交互接口,如Hive Shell、JDBC/...
7. **优化的Hive SerDe**:序列化/反序列化(SerDe)机制得到优化,能更好地处理复杂数据格式。 8. **Tez和Spark支持**:除了传统的MapReduce执行引擎,Hive-3.1.2还可以利用Tez或Spark进行更高效的计算。 在安装...