温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
Fayson的github:https://github.com/fayson/cdhproject
1.问题描述
在CDH集群中我们需要将Hive表的数据导入到RDBMS数据库中,使用Sqoop工具可以方便的将Hive表数据抽取到RDBMS数据库中,在使用Sqoop抽取Hive Parquet表时作业执行异常。
Sqoop抽数脚本:
sqoopexport \
--connect jdbc:mysql://localhost:3306/test_db \
--username root \
--password123456\
--table mytest_parquet \
--export-dir /user/hive/warehouse/mytest_parquet \
-m1
异常日志:
17/12/1701:18:52 ERROR sqoop.Sqoop: Got exception running Sqoop: org.kitesdk.data.DatasetNotFoundException: Descriptor location does not exist: hdfs://nameservice1/user/hive/warehouse/mytest_parquet/.metadataorg.kitesdk.data.DatasetNotFoundException:Descriptor location does not exist: hdfs://nameservice1/user/hive/warehouse/mytest_parquet/.metadataatorg.kitesdk.data.spi.filesystem.FileSystemMetadataProvider.checkExists(FileSystemMetadataProvider.java:562)atorg.kitesdk.data.spi.filesystem.FileSystemMetadataProvider.find(FileSystemMetadataProvider.java:605)atorg.kitesdk.data.spi.filesystem.FileSystemMetadataProvider.load(FileSystemMetadataProvider.java:114)atorg.kitesdk.data.spi.filesystem.FileSystemDatasetRepository.load(FileSystemDatasetRepository.java:197)atorg.kitesdk.data.Datasets.load(Datasets.java:108)atorg.kitesdk.data.Datasets.load(Datasets.java:140)atorg.kitesdk.data.mapreduce.DatasetKeyInputFormat$ConfigBuilder.readFrom(DatasetKeyInputFormat.java:92)atorg.kitesdk.data.mapreduce.DatasetKeyInputFormat$ConfigBuilder.readFrom(DatasetKeyInputFormat.java:139)atorg.apache.sqoop.mapreduce.JdbcExportJob.configureInputFormat(JdbcExportJob.java:84)atorg.apache.sqoop.mapreduce.ExportJobBase.runExport(ExportJobBase.java:429)atorg.apache.sqoop.manager.SqlManager.exportTable(SqlManager.java:931)atorg.apache.sqoop.tool.ExportTool.exportTable(ExportTool.java:80)atorg.apache.sqoop.tool.ExportTool.run(ExportTool.java:99)atorg.apache.sqoop.Sqoop.run(Sqoop.java:147)atorg.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)atorg.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)atorg.apache.sqoop.Sqoop.runTool(Sqoop.java:234)atorg.apache.sqoop.Sqoop.runTool(Sqoop.java:243)atorg.apache.sqoop.Sqoop.main(Sqoop.java:252)[ec2-user@ip-172-31-22-86~]$
2.解决方法
1.将Sqoop抽数脚本修改为如下:
sqoopexport \
--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-mappers1
参数说明:
--table:MySQL库中的表名
--hcatalog-database:Hive中的库名
--hcatalog-table:Hive库中的表名,需要抽数的表
--num-mappers:执行作业的Map数
2.修改后执行抽数作业
作业执行成功。
3.查看MySQL表数据
3.总结
目前通过Sqoop从Hive的parquet抽数到关系型数据库的时候会报kitesdk找不到文件的错,这是Sqoop已知的问题,参考SQOOP-2907:
https://issues.apache.org/jira/browse/SQOOP-2907
该jira目前并没有修复,如果要实现该功能,需要参考第二章的做法,使用hcatalog参数指定到Hive表。
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
您可能还想看
安装
安全
数据科学
其他
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操