我正在建立一个新的hadoop集群(在此阶段进行实验)。
我希望它被配置为无论何时将文件复制到集群上(通过copyFromLocal或使用sqoop等),hadoop / hdfs都应该以镶木地板文件格式存储数据。
我对此有何看法?可能吗 ?
我认为在hdfs级别应该有一个配置参数,在那里我可以指定在存储数据时使用哪种格式,不知何故无法找到它。想知道我是否在这里遗漏了什么。
答案 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;