2013-06-14 24 views
5

Tôi cố gắng để tải dữ liệu từ kho lưu trữ Gzip vào bảng Hive nhưng file gzip của tôi có phần mở rộng như ví dụ:Làm thế nào để xác định định dạng tập tin đầu vào khi tải dữ liệu vào Hive

apache_log.gz_localhost

Khi tôi chỉ định Vị trí thư mục HDFS nơi các tệp này được đặt Hive không nhận ra các tệp nén GZip vì nó đang tìm kiếm các tệp có phần mở rộng .gz.

Có thể xác định loại tệp khi tải dữ liệu vào Hive không? Một cái gì đó như (PSEUDO):

đặt input.format = gzip;

LOAD DATA INPATH/tmp/logs/INTO TABLE apache_logs;

Đây là SQL của tôi để tạo bảng:

CREATE EXTERNAL TABLE access_logs (
`ip`    STRING, 
`time_local`  STRING, 
`method`   STRING, 
`request_uri`  STRING, 
`protocol`   STRING, 
`status`   STRING, 
`bytes_sent`  STRING, 
`referer`   STRING, 
`useragent`   STRING, 
`bytes_received` STRING 
) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' 
WITH SERDEPROPERTIES (
'input.regex'='^(\\S+) \\S+ \\S+ \\[([^\\[]+)\\] "(\\w+) (\\S+) (\\S+)" (\\d+) (\\d+|\-) "([^"]+)" "([^"]+)".* (\\d+)' 
) 
STORED AS TEXTFILE 
LOCATION '/tmp/logs/'; 
+1

'đặt mapred.map.output.compression.codec = org.apache.hadoop.io.compress.GZipCodec;' ở đầu tập lệnh – Singleton

+1

Thật không may là không giúp được gì. Cảm ơn bạn – antunovic

+1

Câu hỏi thú vị, hy vọng nó sẽ được chú ý nhiều hơn. – javadba

Trả lời

5

Tại sao không thay đổi tên tập tin để xxx.gz sau khi đặt trong HDFS?

Nếu bạn thực sự hỗ trợ muốn .gz_localhost, tôi nghĩ bạn có thể tùy chỉnh của riêng bạn GzipCodec để relize nó:

  1. Tạo một NewGzipCodec Lớp của riêng bạn mà mở rộng GzipCodec:

    public class NewGzipCodec kéo dài org. apache.hadoop.io.compress.GzipCodec { }

  2. phương pháp ghi đè getDefaultExtension:

    chuỗi công khai getDefaultExtension() {return ".gz_locahost"; }

  3. javac và nén NewGzipCodec.class để NewGzipCodec.jar

  4. upload NewGzipCodec.jar để {$HADOOP_HOME}/lib

  5. thiết lập của bạn core-site.xml

<property> 
    <name>io.compression.codecs</name> 
    <value>NewGzipCodec, org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value> 
</property> 
+1

Đây là một ý tưởng thú vị và làm sáng tỏ một số cách thực thi codec và cách chúng có thể được mở rộng. – javadba

Các vấn đề liên quan