美文网首页大数据程序员我爱编程
解读《Hadoop 构建数据仓库实践》

解读《Hadoop 构建数据仓库实践》

作者: LifePassenger | 来源:发表于2018-03-17 13:04 被阅读95次

书中构建一个数据仓库示例模型的讲解,实实在在的从 0 到 1 讲述了一个基于big data 的数据仓库原型的搭建。可以看做是一个非典型的应用场景。里面有很多的点,是可以值得拿出来好好深入思考的,举一反三

在数据建模这块,遇到一个数据模型的存储细节问题。

Hive 的用途在整个数据仓库中,是可以放在RDS,TDS两个阶段的。按照作者的思路,RDS, TDS 分别承载了整个数据仓库数据流的两个不同存储阶段。RDS, 即 Raw Data Source, 用来缓存各个应用系统过来的数据。没有经过转化,所以存储在 Hive 中,便可以有效利用 Hive 提供的分布式聚合功能,整合好数据,进入下一步转换。TDS, 即 Transmission Data Source, 也就是承载转换后的数据存储区域。

Hive 的这两种应用,底层存储的可以是 Text 文本文件,也可以是 Json 格式文件,还可以是其他格式文件,比如压缩版本的 Text 文件,压缩版本的 Json 文件。Text 文件是内置默认的文件格式,那么怎么来适配 Json 文件格式?因为 Hive 调用的输入输出 API , 其实就是 Hadoop 的 InputFormat, OutputFormat API. 这些 API 是 Java 编写的,因此如果要想用其他 InputFormat, OutputFormat API, 就需要添加这些 API 的 Jar 包。过程如下:

1. 先打开 Hive

2. 加载新的 Json 适配 API :

add jar /JsonApi/hive-hcatalog-core.jar

这里的 /JsonApi 是一个替代路径,在这个路径下面,存放着对应的 Json Format Api 的Jar 包

3. 创建新表的时候,使用这个 Jar 包来作为表结构的存储方式:

create table if not exists sales(

       name string

,       salary float

,       subordinates array

,       deductions map

,       address struct

)

row format serde "org.apache.hadoop.hive.contrib.serde2.JsonSerde"

stored as textfile

;

4. 在生成Json 格式的数据时,尤其要注意的是:所有的 Json 对象必须写在一行上。

因为一个Json对象,就被当做是一行记录,存到 Hive 表里面。如果将一个 Json 对象写成了多行,并且用回车换行,那么就会报这样的错误:

Failed with exception java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: java.io.IOException: Start token not found where expected

Failed with exception java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: org.codehaus.jackson.JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (from [Source: java.io.ByteArrayInputStream@498b611e; line: 1, column: 0])

at [Source: java.io.ByteArrayInputStream@498b611e; line: 1, column: 3]

针对 Json 文件的适配器,Hive 有自带的 SerDe 包,也有第三方的包可以使用。必须都在 add jar 命令中指定明确要使用的 SerDe 包的 Jar 名。

Hive 2.2.0 自带的 JsonSerDe 包是 hive-hcatalog-core.jar.

serDe 类是 row format serde 'org.apache.hive.hcatalog.data.JsonSerDe'

比如 cdh 有自己的 Json SerDe Jar 包: hive-hcatalog-core.jar .

需要下载这个 Jar 包,并在 create table 中指定 JsonSerDe 类。

row format serde "org.apache.hive.hcatalog.data.JsonSerde"

第三方的包,还有:

1. 随着 Google "Summer of Code" 项目(http://code.google.com/p/hive-json-serde/)发展起来的 Json Serde

2. 在 Google "Summer Of Code" 的 Json Serde 上交叉形成的分支, Think Big Analytics Json Serde: https://github.com/thinkbiganalytics/hive-json-serde。 这个时候我们就需要使用对应 的 Json Serde 类了: row format serde "org.apache.hadoop.hive.contrib.serde2.JsonSerde"。

----------------------------------

欢迎关注【有关SQL】,加入微信群。

相关文章

  • 解读《Hadoop 构建数据仓库实践》

    书中构建一个数据仓库示例模型的讲解,实实在在的从 0 到 1 讲述了一个基于big data 的数据仓库原型的搭建...

  • hadoop学习笔记

    这篇为学习hadoop的笔记,书籍来自《Hadoop构建数据仓库实战》 hadoop简介   hadoop是一个由...

  • 实训总结20170917

    hive介绍 基于Hadoop的一个数据仓库工具,构建于hadoop的hdfs和mapred之上,用于管理和查询结...

  • Hive入门学习记录

    一、概述 Hadoop的发音是 [hædu:p] Hive是构建在hadoop HDFS上的一个数据仓库。(HDF...

  • Hive sql语法详解

    Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分...

  • hive sql 基本语法@2019-02-12

    Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分...

  • Hive从入门到精通(一) - 简介和安装

    0. 背景 Apache Hive是基于Hadoop构建的一套数据仓库分析系统(数仓)。它是一个数据仓库工具,用来...

  • 在Hive上构建数据仓库使用的数据模型

    现状 针对大数据Hadoop体系中,Hive作为数据仓库工具;但是对于大数据中数据仓库上构建数据模型的方法和传统的...

  • Hive | 绪

    绪 hive构建在hadoop上的数据仓库平台,为数据仓库管理提供了许多功能定义了一种类SQL语言HiveQL,除...

  • Hive元数据结构梳理

    一、概述 我们知道Apache Hive 是构建在Apache Hadoop之上的数据仓库,适合处理海量的离线数据...

网友评论

    本文标题:解读《Hadoop 构建数据仓库实践》

    本文链接:https://www.haomeiwen.com/subject/xeykrxtx.html