我正在尝试将数据从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/';
答案 0 :(得分:5)
放入HDFS后,为什么不将文件名更改为xxx.gz
?
如果您真的想支持.gz_localhost
,我认为您可以自定义GzipCodec
来重新启用它:
创建一个自己的NewGzipCodec
类,扩展GzipCodec
:
public class NewGzipCodec extends org.apache.hadoop.io.compress.GzipCodec { }
覆盖方法getDefaultExtension
:
public String getDefaultExtension(){return“.gz_locahost”; }
javac并将NewGzipCodec.class
压缩为NewGzipCodec.jar
将NewGzipCodec.jar
上传至{$HADOOP_HOME}/lib
设置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>