不,你是對的 - 沒有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輸入數據的格式,所以我將其添加到我的答案中。 –