不,你是对的 - 没有HDFS级配置。每次操作某些数据时,您都必须设置存储格式。想象一下,如果每个文件都自动转换为Parquet,将会造成的损害。所有由应用程序创建的临时文件,任何Hive/Pig脚本和任何查找文件都将被破坏。
向Sqoop命令的输出保存到镶木:
sqoop import --connect JDBC_URI --table TABLE --as-parquetfile --target-dir /path/to/files
将写入数据转换成平面格式。
没有办法用copyFromLocal
来做到这一点。
要移动上已有的HDFS到木地板的数据,将数据加载到一个外部蜂巢表原始格式,创建一个平面表,然后将数据加载到它,即
//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;
感谢本。我有几千个文件要加载到集群中,并且由于它们可以在外部磁盘上使用,所以我们现在正在考虑使用copyFromLocal方式......尽管并行......这里的任何技巧?我想最终得到实木复合地板文件,因为我需要稍后在火花上操作它们。 – Gyan
假设外部磁盘是USB硬盘,那么主要瓶颈将是数据从该磁盘到集群边缘节点的不可避免的传输。除了将不同的文件放在不同的边缘节点上并在每个节点上运行'put'以使其有效地并行运行之外,没有办法提高'put'命令的速度。 –
我意识到我错过了将原始问题的一部分改为Parquet输入数据的格式,所以我将其添加到我的答案中。 –