sqoop無法導出parquet文件到mysql


1.問題描述


在CDH集群中我們需要將Hive表的數據導入到RDBMS數據庫中,使用Sqoop工具可以方便的將Hive表數據抽取到RDBMS數據庫中,在使用Sqoop抽取Hive Parquet表時作業執行異常。

Sqoop抽數腳本:

sqoop export \
--connect jdbc:mysql://localhost:3306/test_db \
--username root \
--password 123456 \
--table mytest_parquet \
--export-dir /user/hive/warehouse/mytest_parquet \
-m 1

 

異常日志:

Sqoop: org.kitesdk.data.DatasetNotFoundException: Descriptor location does not exist: hdfs://nameservice1/user/hive/warehouse/mytest_parquet/.metadata
Exception: Descriptor location does not exist: hdfs://nameservice1/user/hive/warehouse/mytest_parquet/.metadata
        at org.kitesdk.FileSystemMetadataProvider.checkExists(FileSystemMetadataProvider.java:562)
        at org.kitesdk.FileSystemMetadataProvider.find(FileSystemMetadataProvider.java:605)
        at org.kitesdk.ileSystemMetadataProvider.load(FileSystemMetadataProvider.java:114)
        at org.kitesdk.FileSystemDatasetRepository.load(FileSystemDatasetRepository.java:197)
        at org.kitesdk.data.Datasets.load(Datasets.java:108)
        at org.kitesdk.data.Datasets.load(Datasets.java:140)        

 

2.解決方法


1.將Sqoop抽數腳本修改為如下:

sqoop export \
--connect jdbc:mysql://ip-172-31-22-86.ap-southeast-1.compute.internal:3306/test_db \
--username testuser \
--password password \
--table mytest_parquet \
--hcatalog-database default \
--hcatalog-table mytest_parquet --num-mappers 1

參數說明:

--table:MySQL庫中的表名

--hcatalog-database:Hive中的庫名

--hcatalog-table:Hive庫中的表名,需要抽數的表

--num-mappers:執行作業的Map數

作業執行成功。

3.總結


目前通過Sqoop從Hive的parquet抽數到關系型數據庫的時候會報kitesdk找不到文件的錯,這是Sqoop已知的問題,參考SQOOP-2907:

https://issues.apache.org/jira/browse/SQOOP-2907

該jira目前並沒有修復,如果要實現該功能,需要參考第二章的做法,使用hcatalog參數指定到Hive表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM