gpt4 book ai didi

hadoop - 如何在将数据加载到 Hive 时指定输入文件格式

转载 作者:可可西里 更新时间:2023-11-01 14:19:12 24 4
gpt4 key购买 nike

我正在尝试将数据从 Gzip 存档加载到 Hive 表中,但我的 gzip 文件具有扩展名,例如:

apache_log.gz_localhost

当我指定这些文件所在的 HDFS 目录位置时,Hive 无法识别 GZip 压缩文件,因为它正在搜索扩展名为 .gz 的文件。

是否可以在将数据加载到 Hive 时定义文件类型?类似(伪)的东西:

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

最佳答案

为什么放入HDFS后文件名不改为xxx.gz

如果你真的想支持 .gz_localhost,我想你可以自定义你自己的 GzipCodec 来重新利用它:

  1. 创建一个您自己的 NewGzipCodec 类,它扩展了 GzipCodec:

    公共(public)类 NewGzipCodec 扩展了 org.apache.hadoop.io.compress.GzipCodec {

  2. 覆盖方法getDefaultExtension:

    public String getDefaultExtension() { 返回“.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>

关于hadoop - 如何在将数据加载到 Hive 时指定输入文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17106338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com