标题

这里建议hadoop hive mysql都启动正常

  • 模拟大数据 重新一个个压缩形式大小进行测试
  • 下面比较乱 可能看不懂 先总结说明一下最终成功版本
  • 重命名为job.dat
  • 默认格式 textfile
  • 数据准备
  • 开始测试
  • 看文件大小(du及count(1)形式)
  • 下面仅介绍 没有自己动手安

这里建议hadoop hive mysql都启动正常

这篇一定要跟前面接起来下图所示处

据存储到Hive表中_据存储到Hive表中

据存储到Hive表中_据存储到Hive表中_02

据存储到Hive表中_据存储到Hive表中_03

本来配置环境变量直接 hive 就能启动 出现了毛病用下面方法启动(先启动hadoop)

据存储到Hive表中_hadoop_04

据存储到Hive表中_据存储到Hive表中_05

据存储到Hive表中_据存储到Hive表中_06

据存储到Hive表中_hive_07

据存储到Hive表中_hive_08

据存储到Hive表中_ci_09

据存储到Hive表中_hive_10

据存储到Hive表中_据存储到Hive表中_11

据存储到Hive表中_hadoop_12

参考地址

据存储到Hive表中_据存储到Hive表中_13

据存储到Hive表中_hive_14

据存储到Hive表中_ci_15

据存储到Hive表中_据存储到Hive表中_16

据存储到Hive表中_ci_17

据存储到Hive表中_hadoop_18

据存储到Hive表中_hive_19

据存储到Hive表中_hive_20

据存储到Hive表中_ci_21

据存储到Hive表中_据存储到Hive表中_22

据存储到Hive表中_ci_23

据存储到Hive表中_hadoop_24

据存储到Hive表中_ci_25

据存储到Hive表中_hadoop_26

据存储到Hive表中_据存储到Hive表中_27

下面这样是会报错 的换方式

据存储到Hive表中_据存储到Hive表中_28

据存储到Hive表中_hive_29

据存储到Hive表中_hive_30

这样来做

据存储到Hive表中_hive_31

据存储到Hive表中_ci_32

据存储到Hive表中_hive_33

据存储到Hive表中_ci_34

据存储到Hive表中_据存储到Hive表中_35

命令hdfs dfs -du -h /data

结果102.3 M 307.0 M /data/

第一列标示该目录下总文件大小

第二列标示该目录下所有文件在集群上的总存储大小和你的副本数相关,我的副本数是3,所以第二列的是第一列的三倍(第二列内容=文件大小副本数)

第三列标示你查询的目录

textfile SequenceFile这两个格式进10倍差距

据存储到Hive表中_ci_36

据存储到Hive表中_据存储到Hive表中_37

据存储到Hive表中_ci_38

据存储到Hive表中_ci_39

据存储到Hive表中_hadoop_40

据存储到Hive表中_hadoop_41

据存储到Hive表中_据存储到Hive表中_42

据存储到Hive表中_据存储到Hive表中_43

据存储到Hive表中_hadoop_44

据存储到Hive表中_ci_45

据存储到Hive表中_据存储到Hive表中_46

据存储到Hive表中_据存储到Hive表中_47

据存储到Hive表中_据存储到Hive表中_48

据存储到Hive表中_据存储到Hive表中_49

据存储到Hive表中_据存储到Hive表中_50

对应apache项目地址

据存储到Hive表中_据存储到Hive表中_51

据存储到Hive表中_hive_52

据存储到Hive表中_hive_53

据存储到Hive表中_hadoop_54

据存储到Hive表中_hadoop_55

据存储到Hive表中_hadoop_56

据存储到Hive表中_hadoop_57

据存储到Hive表中_据存储到Hive表中_58

据存储到Hive表中_据存储到Hive表中_59

用第二种建表

据存储到Hive表中_ci_60

据存储到Hive表中_据存储到Hive表中_61

执行下面报错 建表 ZLIB要大写 上面是小写

据存储到Hive表中_ci_62

好像建表 ZLIB要大写 上面是小写 先删除表 在新建

据存储到Hive表中_hive_63

据存储到Hive表中_据存储到Hive表中_64

这次成功

据存储到Hive表中_hadoop_65

这里注意这里按道理是压缩的越来越少的 但是这里有点问题

据存储到Hive表中_hive_66

据存储到Hive表中_hadoop_67

据存储到Hive表中_据存储到Hive表中_68

参考地址

据存储到Hive表中_hive_69

parquet 简介

据存储到Hive表中_hadoop_70

Parquet 如何与组件协作

数据从内存到 Parquet 文件或者反过来的过程主要由以下三个部分组成:

据存储到Hive表中_ci_71

  1. 存储格式 (storage format) parquet-format项目定义了 Parquet 内部的数据类型、存储格式等。
  2. 对象模型转换器 (object model converters) 这部分功能由parquet-mr项目来实现,主要完成外部对象模型与 Parquet 内部数据类型的映射。
  3. 对象模型 (object models) 对象模型可以简单理解为内存中的数据表示,Avro, Thrift, Protocol Buffers, Hive SerDe, Pig Tuple, Spark SQL InternalRow 等这些都是对象模型。Parquet 也提供了一个example object model 帮助大 家理解。

例如parquet-mr项目里的 parquet-pig 项目就是负责把内存中的 Pig Tuple 序列化并按列存储成 Parquet 格式,以及反过来把 Parquet 文件的数据反序列化成 Pig Tuple。

这里需要注意的是 Avro, Thrift, Protocol Buffers 都有他们自己的存储格式,但是 Parquet 并没有使用 他们,而是使用了自己在parquet-format项目里定义的存储格式。所以如果你的应用使用了 Avro 等对 象模型,这些数据序列化到磁盘还是使用的parquet-mr定义的转换器把他们转换成 Parquet 自己的存 储格式。

Parquet 数据模型

理解 Parquet 首先要理解这个列存储格式的数据模型。我们以一个下面这样的 schema 和数据为例来 说明这个问题。

据存储到Hive表中_hive_72

这个 schema 中每条记录表示一个人的 AddressBook。

有且只有一个 owner,

owner 可以有 0 个或者多个 ownerPhoneNumbers,

owner 可以有 0 个或者多个 contacts。

每个 contact 有且只有一个 name,

这个 contact 的 phoneNumber 可有可无。

据存储到Hive表中_hadoop_73

据存储到Hive表中_ci_74

据存储到Hive表中_hive_75

Parquet 文件在磁盘上的分布

据存储到Hive表中_hadoop_76

所有的数据被水平切分成 Row group,

一个 Row group 包含这个 Row group 对应的区间内的所有列的 column chunk。

一个 column chunk 负责存储某一列的数据,这些数据是这一列的 Repetition levels,

Definition levels 和 values(详见后文)。

一个 column chunk 是由 Page 组成的,Page 是压缩和编码的单元,对数据模型来说是透明的。

Row group 是数据读写时候的缓存单元,所以推荐设置较大的 Row group 从而带来较大的并行度,当然 也需要较大的内存空间作为代价。

一般情况下推荐配置一个 Row group 大小 1G,一个 HDFS 块大小 1G,一个 HDFS 文件只含有一个

块。

一个 Parquet 文件最后是 Footer,存储了文件的元数据信息和统计信息。

数据测试 语法格式

据存储到Hive表中_hadoop_77

据存储到Hive表中_hive_78

据存储到Hive表中_ci_79

据存储到Hive表中_据存储到Hive表中_80

据存储到Hive表中_ci_81

据存储到Hive表中_hive_82

上面这块是没有经过压缩的 下面来个对应压缩版

据存储到Hive表中_hadoop_83

据存储到Hive表中_hadoop_84

据存储到Hive表中_据存储到Hive表中_85

据存储到Hive表中_hive_86

模拟大数据 重新一个个压缩形式大小进行测试

下面比较乱 可能看不懂 先总结说明一下最终成功版本

# 概要说明 首先我从数据库导出了一个数据比较多的表city.txt 并且上传到~/data下 (当然数据你也可以自己定义去)
#其数据字段及其内容为(tab键分割) 
#ID	Name	CountryCode	District	Population
#"1"	"Kabul"	"AFG"	"Kabol"	"1780000"
#(注意 下面一直追加 却还是188k没变化 所以建议 在本机的时候把city.txt里内容多复制几次,最好好几兆 然后再上传上来,或者通过load形式(去掉覆盖)这里采用的load形式)
create table hive_city(id string,name string,countrycode string,district string,population string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as textfile;
#load多次
load data local inpath '/home/hadoop/data/city.txt' into table hive_city;
================textfile 最原始的数据 下面都可以复制他表中的数据======================
#like表 这张表才是load多次后的数据都在这表里头 所以后面都以此表为模板复制其数据
create table like as select * from hive_city;

===============sequencefile===================
create table test_city(id string,name string,countrycode string,district string,population string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as sequencefile;
insert into table test_city select * from like;

===============rcfile===================
create table test_city_rc(id string,name string,countrycode string,district string,population string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as rcfile;
insert into table test_city_rc select * from like;

===============orcfile===================
create table test_city_orc(id string,name string,countrycode string,district string,population string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as orc tblproperties("orc.compress"="NONE");
insert into table test_city_orc select * from like;

===============parquet===================
create table test_city_parquet(id string,name string,countrycode string,district string,population string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as parquet;
insert into table test_city_parquet select * from like;

===============parquet-gzip压缩版的===================
set parquet.compress=GZIP;
create table test_city_parquet_gz(id string,name string,countrycode string,district string,population string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as parquet;
insert into table test_city_parquet_gz select * from like;

====文件大小比较 textfile>sequencefile>rcfile>orcfile>parquet>parquet-gzip======
[hadoop@hadoop000 data]$ hadoop fs -du -h /user/hive/warehouse/like
290.8 K  290.8 K  /user/hive/warehouse/like/000000_0.bz2
[hadoop@hadoop000 data]$ hadoop fs -du -h /user/hive/warehouse/test_city
5.3 M  5.3 M  /user/hive/warehouse/test_city/000000_0
[hadoop@hadoop000 data]$ hadoop fs -du -h /user/hive/warehouse/test_city_rc
206.6 K  206.6 K  /user/hive/warehouse/test_city_rc/000000_0
[hadoop@hadoop000 data]$ hadoop fs -du -h /user/hive/warehouse/test_city_orc
627.6 K  627.6 K  /user/hive/warehouse/test_city_orc/000000_0
[hadoop@hadoop000 data]$ hadoop fs -du -h /user/hive/warehouse/test_city_parquet
107.3 K  107.3 K  /user/hive/warehouse/test_city_parquet/000000_0
[hadoop@hadoop000 data]$ hadoop fs -du -h /user/hive/warehouse/test_city_parquet_gz
107.3 K  107.3 K  /user/hive/warehouse/test_city_parquet_gz/000000_0

接下来我们把data下我们之前编写的job.txt下载到本地(或者本地新建(job.data)到时候上传到data下一样) 疯狂复制 模拟大量数据

据存储到Hive表中_hive_87

据存储到Hive表中_hadoop_88

重命名为job.data 并上传到 ~/data

据存储到Hive表中_hive_89

重命名为job.dat

据存储到Hive表中_hive_90

默认格式 textfile

据存储到Hive表中_据存储到Hive表中_91

据存储到Hive表中_ci_92

据存储到Hive表中_据存储到Hive表中_93

据存储到Hive表中_ci_94

据存储到Hive表中_据存储到Hive表中_95

据存储到Hive表中_hive_96

按道理没问题啊 但是下面操作RCFfile等的时候却出了问题 这块内容作废 重新来

数据准备

我从数据库导出city(因为这里数据多 注意数据结构建表的时候字段–属性要对应好)

据存储到Hive表中_ci_97

据存储到Hive表中_hadoop_98

然后把city.txt上传到~/data下

(注意 下面一直追加 却还是188k没变化 所以建议 在本机的时候把city.txt里内容多复制几次,最好好几兆 然后再上传上来)

据存储到Hive表中_hive_99

据存储到Hive表中_ci_100

据存储到Hive表中_据存储到Hive表中_101

多追加几次 模拟大数据 但是下面追加没效果

据存储到Hive表中_据存储到Hive表中_102

据存储到Hive表中_ci_103

可以通过下面建好表后这种方式追加也可以

load data local inpath ‘/home/hadoop/data/city.txt’ into table hive_city;

据存储到Hive表中_hive_104

据存储到Hive表中_ci_105

开始测试

注意字段的关联上 下面id 是string 不是int类型

据存储到Hive表中_据存储到Hive表中_106

删表从来

据存储到Hive表中_ci_107

据存储到Hive表中_hive_108

据存储到Hive表中_据存储到Hive表中_109

据存储到Hive表中_hadoop_110

据存储到Hive表中_hadoop_111

据存储到Hive表中_hive_112

据存储到Hive表中_hadoop_113

看文件大小(du及count(1)形式)

据存储到Hive表中_ci_114

据存储到Hive表中_ci_105

Parquet 文件的存储格式

下面仅介绍 没有自己动手安

下载个工具 下载安装snappy库 参考网址下载网址 按下面往里点

据存储到Hive表中_hadoop_116

Hive中常用的数据压缩snappy