热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sqoop传递数据实践

应用场景:1将原有关系数据库的数据传递到大数据平台如hive、hbase。2将大数据平台的数据传递到关系数据库中。简单应用:表对表的同步。复杂应用:在同步时可以通过query-sql来指定所要传递的数
应用场景:

1将原有关系数据库的数据传递到大数据平台如hive、hbase。

2将大数据平台的数据传递到关系数据库中。

简单应用:表对表的同步。

复杂应用:在同步时可以通过query-sql来指定所要传递的数据。

所有红字“注意”都是坑,我都帮你踩过了,你感到幸福吗?

导入(import)

导入的意思就是将关系数据库的数据导入到HDFS、Hive、HBase,这个解释似乎是废话

导入到HIve

import --connect jdbc:postgresql://url:port/schema --username u --password p --table RelationalDatabaseTable --hive-import --hive-table HiveTable -m 1 --null-string \\N --null-non-string \\N

导入到HBase

import --connect jdbc:postgresql://url:port/schema --username u --password p --table RelationalDatabaseTable --hbase-table HbaseTable --column-family YourFamily --hbase-row-key RelationalDatabaseTable_PrimaryKey -m 1

注意:

当你在关系数据库中使用了schema,此时如何导入呢。

应添加-- --schema yourSchema,是的你没看错是两个--,如果你偷懒或者强迫症发作了,真是对不起,sqoop救不了你

延伸阅读:对于postgresql,默认情况下,sqoop的list-tables只列出public目录下的表,所以要想列出特定schema下的表,你需要使用-- --schema来指定哦

简介--query的使用

导入时使用sql查询语句,此时-m 1表示并行度为1,如果你要想增加并行度,对于--query 的情况,你还要格外指定并行度参考字段,即使用

--split-by columnName
 sqoop import \
--query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \
--split-by a.id --target-dir /user/foo/joinresults
注意:使用--query时,以上红字是必须的

导出(export)

导出的意思就是将大数据平台上的数据导出到传统的关系数据,这个解释貌似也是废话

将Hive的数据导出到关系数据库

export  --connect jdbc:postgresql://url:port/schema --username u --password p --table RelationalDatabaseTable --export-dir HDFS_Hive_Table_URL --input-fields-terminated-by "\001" --lines-terminated-by "\n" --input-null-string "\\N" --input-null-non-string "\\N" -m 1

注意:

--input-fields-terminated-by "\001" --lines-terminated-by "\n"
这两个选项一定记得加上, 不然错了都不知道怎么错的(含义hive中的数据存储格式,字段以"\001"分隔,行以"\n"分隔)

将HBase的数据导出关系数据,怎么破。目前sqoop没有破,以后也许会破。

一个解决思路,创建一个Hive外部表A关联到HBase的表,通过A将Hbase的数据导入到一个Hive内部表B,然后再用上面Hive数据导出到关系数据的方法。一句话曲线救国。


其他(eval)

eval就是估算、计算、尝试的意思,解释的不好,因为这是我解释的

eval命令可以发送一个简单的SQL到关系数据库引擎,神奇吧,有些人可能有想法了。。

sqoop eval --connect jdbc:mysql://db.example.com/corp \
--query "SELECT * FROM employees LIMIT 10"
注意:官方说此方法只适用于测试数据库连接。对这就是官方设计它的原因。当然其他复杂sql也可以执行哦,难道是官方在吓人。。等你实践。


参考:

快看这里



推荐阅读
author-avatar
xlenny
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有