SET hive.exec.compress.output=true;
SET parquet.compression=**SNAPPY**; --this is the default actually
CREATE TABLE raw (line STRING) STORED AS PARQUET ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
LOAD DATA LOCAL INPATH '/tmp/weblogs/20090603-access.log' INTO TABLE raw;
3条答案
按热度按时间vlf7wbxs1#
在hdfs中存储压缩文件的标准方法是在将任何文件写入hdfs时使用默认的压缩参数。这在mapper库、sqoop、flume、hive、hbase目录等中可用。我在这里引用一些来自hadoop的例子。在这里,您不需要担心在hadoop中为了提高效率而在本地压缩文件。最好使用默认的hdfs文件格式选项来执行这项工作。这种类型的压缩将与hadoopMap程序处理顺利集成。
通过mapper库编写的作业
在mapper程序中创建writer时。这是定义。您将编写自己的Map器和缩减器,将文件写入hdfs,并将编解码器定义为writer方法的参数。
sqoop导入
下面的选项发送文件导入到hdfs的默认压缩参数
使用sqoop,您还可以使用选项指定特定的编解码器
配置单元导入
在下面的示例中,您可以使用所需的选项将文件读入配置单元。这也是您在读取本地文件时可以设置的属性。
在导入hdfs时,我没有提到所有数据压缩方法的示例。
hdfs cli没有(例如hdfs dfs-copyfromlocal)提供任何直接的压缩方法。这是我对使用hadoop cli的理解。
1l5u6lss2#
这在标准hdfs实现中不存在,您必须自己管理它。你必须管理自己的压缩。但是,如果解决这个问题对您来说足够重要的话,hadoop的专有实现mapr可以做到这一点。
在使用hadoop一段时间之后,这不再困扰我了。pig和mapreduce之类的自动处理压缩对我来说足够了。我知道这不是一个真正的答案,但我不能告诉你的问题,如果你只是恼火或你有一个真正的问题,这是造成。习惯添加
| gunzip
一切都没花多久。我举个例子:hadoop fs -cat /my/file.gz | gunzip
cat file.txt | gzip | hadoop fs -put - /my/file.txt.gz
wlp8pajw3#
当您使用压缩文件时,您需要考虑使其可拆分,即hadoop可以在运行map reduce时拆分此文件(如果文件不可拆分,则只能由单个map读取)
通常的解决方法是使用容器格式,例如序列文件、orc文件等,您可以在其中启用压缩。如果你使用的是简单文本文件(csv等)-twitter有一个lzo项目,但我没有亲自使用它