6

Gzip アーカイブから Hive テーブルにデータをロードしようとしていますが、gzip ファイルには次のような拡張子があります。

apache_log.gz_localhost

これらのファイルが配置されている HDFS ディレクトリの場所を指定すると、Hive は GZip 圧縮ファイルを認識しません。.gz 拡張子のファイルを検索しているためです。

データを Hive にロードするときにファイル タイプを定義することはできますか? (PSEUDO) のようなもの:

input.format=gzip を設定します。

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

テーブル作成のための私のSQLは次のとおりです。

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/';
4

1 に答える 1

7

xxx.gzHDFS に入れた後にファイル名を に変更しないのはなぜですか?

本当に をサポートしたい場合は.gz_localhost、独自のものをカスタマイズして再利用できると思いますGzipCodec:

  1. NewGzipCodecを拡張する独自のクラスを作成しますGzipCodec

    public class NewGzipCodec は org.apache.hadoop.io.compress.GzipCodec を拡張します { }

  2. オーバーライド方法getDefaultExtension:

    public String getDefaultExtension() { return ".gz_locahost"; }

  3. javac と圧縮NewGzipCodec.classしてNewGzipCodec.jar

  4. NewGzipCodec.jarにアップロード{$HADOOP_HOME}/lib

  5. あなたの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>
于 2013-06-17T16:15:41.050 に答える