首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >从MySql 导数 到Hive数据不一致问题

从MySql 导数 到Hive数据不一致问题

作者头像
幽鸿
发布2020-04-01 20:54:56
发布2020-04-01 20:54:56
1.8K0
举报

从MySql 导数 到Hive数据不一致问题

作者:幽鸿 

   最近在使用Sqoop的时候,发现从MySql导入到Hive的数据莫名其妙会多少好多,并且没有任何规律可循。最后观察发现是由于MySql中存储的一个大字段中含有若干干扰字符导致而成:

    而Hive在碰到\n\r等的时候,会被默认识别为换行,即一条数据可能被拆分成多条数据。而sqoop显然考虑到了这个问题,只需在sqoop中加上--hive-delims-replacement "#"参数就可避免这种问题,但是该字段却不可还原了。对于不可缺少的精确性确实是一种遗憾。

    那么如何查看Sqoop导出的源数据呢?我们可以现将数据导入到HDFS,使用-z命令:

代码语言:javascript
复制
sqoop import --connect "jdbc:mysql://$ip:$port/$DBName?useUnicode=true&characterEncoding=utf-8" --username $username --password $password  \
    --target-dir /apps-data/hduser06/$tablename --table $tablename --columns $columns \
    --hive-drop-import-delims --delete-target-dir -m 1 --null-string '\\N' --null-non-string '\\N' -z --where "1=1"

    导入数据成功以后,我们可以将数据从/apps-data/hduser06/$tablename路径下download下来,这里使用了-z命令:该命令可以将数据压缩成gizp格式,而sqoop的默认压缩格式是deflate压缩,这种格式我们必须转换才能看,所以加上-z命令后,就可以查看源数据库文件,进行查看数据的具体原因了。

   Sqoop在导数据的时候其实还有许多bug的,比如在使用多个map并行导入的时候,由于不能有效识别主键,会有少量重复字段,只好加上“ -m 1”参数。问题虽然解决了,但肯定让人不舒服,既然是分布式系统,为什么不能使用多个map呢?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从MySql 导数 到Hive数据不一致问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档