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

default storage file format in hadoop/hdfs

我正在设置一个新的 hadoop 集群(现阶段处于实验阶段)。

我希望将其配置为每当将文件复制到集群(通过 copyFromLocal 或使用 sqoop 等)时,hadoop/hdfs 应该以 parquet 文件格式存储数据。

我对此是否期待正确?可能吗 ?

我认为在 hdfs 级别的某处应该有一个配置参数,我可以在其中指定存储数据时使用的格式,但不知何故找不到。想知道我是否遗漏了什么。

不,你是对的 - 没有 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 table,创建一个 Parquet table,然后将数据加载到其中,即

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