我在S3中創建了一個外部Hive(EMR中爲1.0)表。我可以成功地使用Hive將記錄插入到此表中,並將它們查詢回來,然後直接從S3存儲桶中提取文件作爲驗證。到現在爲止還挺好。豬通過HCatStorer()向S3寫入「成功」,寫入0字節
我希望能夠使用Pig(v0.14,同樣在EMR上)來讀寫這個邏輯表。使用HCatLoader()加載工作正常,轉儲/解釋確認我的數據和模式符合預期。
但是,當我嘗試使用HCatStorer()編寫代碼時,我遇到了問題。豬報告成功,N記錄,,但0字節,寫。我在日誌中看不到任何與相關或指示問題相關的內容,並且沒有數據寫入表/桶。
a = load 'myfile' as (foo: int, bar: chararray); // Just assume that this works.
dump a; // Records are there
describe a; // Correct schema, as specified above
store a into 'mytable' using org.apache.hive.hcatalog.pig.HCatStorer();
輸出(同樣包含的,我可以看到問題,並沒有其他指示)的結尾是:
Success!
...
Input(s):
Successfully read 2 records (24235 bytes) from: "myfile"
Output(s):
Successfully stored 2 records in: "mytable"
Counters:
Total records written : 2
Total bytes written : 0
Spillable Memory Manager spill count : 0
Total bags proactively spilled: 0
Total records proactively spilled: 0
值得注意的是:
- 這工作在相同的環境,如果表格位置在HDFS而不是S3中 - 對於外部和內部表格,以及來自Hive或Pig。
- 我可以直接成功地用S3存儲到S3。
store a into 's3n://mybucket/output' using PigStorage(',');
- 通過Hive shell插入到相同的查詢工作正常。
所以這似乎是Pig/HCatalog/S3作爲堆棧的相互作用的問題;其中任何兩個似乎都很好。
鑑於我在豬日誌中沒有看到任何非常有用的東西,我還應該看些什麼來調試呢?我應該關注這些技術的任何特定配置參數嗎?
哎...! 你已經提到,即使數據被「成功存儲」,你仍然無法將數據存儲在配置表格中,你能否檢查HDFS並找到「mytable」的路徑並查看是否有數據? – Pratik
@Pratik在錯誤的情況下,「mytable」存在於S3中,而不是HDFS ......這就是挑戰的癥結所在!當我在HDFS中找到「mytable」的版本時,它工作正常,數據按預期顯示。 – Greg
@Greg你有沒有找到一種解決方案,而不是在emr中進行升級?我需要使用豬來加載s3上的蜂巢表。考慮使用剛剛登陸文件夾中的數據的解決方法,並使用lambda函數將分區添加到配置單元中,但希望全豬解決方案 – TaylerJones