大數據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文件數據?

我們來嘗試一下

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