hadoop / hdfs中的默认存储文件格式

时间:2015-11-06 11:04:56

标签: hadoop compression hdfs

我正在建立一个新的hadoop集群(在此阶段进行实验)。

我希望它被配置为无论何时将文件复制到集群上(通过copyFromLocal或使用sqoop等),hadoop / hdfs都应该以镶木地板文件格式存储数据。

我对此有何看法?可能吗 ?

我认为在hdfs级别应该有一个配置参数,在那里我可以指定在存储数据时使用哪种格式,不知何故无法找到它。想知道我是否在这里遗漏了什么。

1 个答案:

答案 0 :(得分:3)

不,你是对的 - 没有HDFS级别的配置。每次操作某些数据时都必须设置存储格式。想象一下如果每个文件都自动转换为Parquet会造成的损害。应用程序创建的所有临时文件,任何Hive / Pig脚本和任何查找文件都将被破坏。

将Sqoop命令的输出保存到Parquet:

sqoop import --connect JDBC_URI --table TABLE --as-parquetfile --target-dir /path/to/files

会将数据写入Parquet格式。

使用copyFromLocal无法做到这一点。

要将已经在HDFS上的数据移动到Parquet中,将数据以其原始格式加载到外部Hive表中,创建一个Parquet表,然后将数据加载到其中,即

//Overlay a table onto the input data on the HDFS
CREATE EXTERNAL TABLE input (
  id int,
  str string
STORED AS <the-input-data-format>
LOCATION 'hdfs://<wherever-you-put-the-data>';

//Create a Parquet-formatted table
CREATE TABLE parquet (
  id int,
  str string
STORED AS PARQUET;

//Write your input data into the Parquet table - this will format the data into Parquet
INSERT INTO TABLE parquet
SELECT * FROM input;