大数据BigData之hive怎么样才能够直接读取amazon s3中的.gz文件数据呢?

在看这篇文章之前,请确保以下几件事

  • 安装好 jdk
  • 安装好 hadoop (记得准备好需要用到的jar包)
  • 安装好 hive (记得配置元数据库、准备好需要用到的jar包)
  • 配置好 hadoop 连接 amazon s3 的文件
  • 配置好 hive 连接 amazon s3 的文件
  • 配置好 hive 与 hadoop 之间的连接

hive怎么样才能够直接读取amazon s3中的.gz文件数据呢?

我们分解一下这个问题,分成三个部分:

  1. hive 能不能读取 amazon s3 中的文件数据?
  2. hive 能不能读取 .gz 文件数据?
  3. hive 能不能读取在 amazon s3 中的 .gz 文件数据?


1. hive能不能读取amazon s3中的文件数据?

1.1 准备数据

提前准备好数据文件 a.txt,放在 s3a://bucket/test/ 目录下。

$ s3cmd put a.txt s3://bucket/test/

a.txt 的内容如下:

Edward,Lear,Baker Street 202
Stephen,Hawking,Baker Street 203
John,Dalton,Baker Street 204
Charles,Darwin,Baker Street 205
Sherlock,Holmes,Baker Street 221B

1.2 创建外部表

进入hive cli,并创建一张外部表,定位到 s3a://bucket/s3aTestBaker/ 目录

CREATE EXTERNAL TABLE test
(FirstName STRING, LastName STRING, StreetAddress STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3a://bucket/test/';

表会自动读取 s3a://bucketms/s3aTestBaker/ 目录下的文件(此目录下必须所有文件都是可读文件,不然下一步查询会报错:无法解析文件类型)

1.3 查询数据

可以实时把 s3a://bucketms/s3aTestBaker/ 目录下的文件数据通过创建好的外部表 select 出来

hive>select * from test;
Edward    Lear     Baker Street 202
Stephen   Hawking  Baker Street 203
John      Dalton   Baker Street 204
Charles   Darwin   Baker Street 205
Sherlock  Holmes   Baker Street 221B

2. hive能不能读取.gz文件数据?

尝试本地读取
将上述的 a.txt 文件压缩成 .gz 文件,本地操作

$ gzip a.txt
$ ls
a.txt    a.gz		//已经看到压缩成功了

这时,再创建一张本地表

CREATE TABLE test_local
(FirstName STRING, LastName STRING, StreetAddress STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/home/user/a.gz';

3. hive能不能读取在amazon s3中的.gz文件数据?

我们来尝试一下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章