阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Sqoop在Hadoop和关系型数据库之间的数据转移

130次阅读
没有评论

共计 2836 个字符,预计需要花费 8 分钟才能阅读完成。

sqoop 支持增量导入

查看 job:

sqoop job –meta-connect jdbc:hsqldb:hsql://ip:port/sqoop –list

复制 mysql 中表结构到 hive 表:

sqoop create-hive-table –connect jdbc:mysql://ip:port/dbName –table tableName –username username –password pass –hive-table qinshiwei

表 qinshiwei 默认在 default 数据库中

mysql 数据导入 hive

sqoop import –connect jdbc:mysql://ip:port/dbName –username root –password mysql-password –table t1 –hive-import

hdfs 数据导入 mysql

sqoop-export –connect jdbc:mysql://ip:port/dbName –username username –password pass –table qinshiwei –export-dir tablename

export-dir 是要导出的 HDFS 平面文件位置。如果不是绝对路径,指 /user/username/datadir

参数:–input-fields-terminated-by ‘\0001’

mysql 导入 hdfs 文件分隔符:–fields-terminated-by ‘\0001’

mysql 导入 hdfs:

sqoop import –connect jdbc:mysql://Hadoop48/toplists –username root –table test -m 1

mysql 导入 hive:

sqoop import –connect jdbc:mysql://ip/tjcommon –verbose -m 1 –username username –password pass –hive-overwrite –direct –table tablename –hive-import –create-hive-table –hive-table mysql_award –fields-terminated-by ‘\t’ –lines-terminated-by ‘\n’ –append

执行命令前先删除 hadoop 下的表名.java 文件    rm /usr/lib/hadoop-0.20/tablename.java, 保证表名 mysql_award 在 hive 的 default 数据库中不存在。

sqoop import –connect jdbc:mysql://ip/dbName –username username –password pass –table qinshiwei -m 1 –hive-import –hive-table err –hive-overwrite –hive-delims-replacement “\t” –incremental append –last-value 0 –check-column id

hive 空值处理

sqoop 会自动把 NULL 转换为 null 处理,但是 hive 中默认是把 \N 来表示 null,因为预先处理不会生效, 我们需要使用 –null-string 和 –null-non-string 来处理空值 把 \N 转为 \\N

sqoop import  … –null-string ‘\\N’ –null-non-string ‘\\N’

Sqoop 导入 hive 若不加 hive-overwirte,会留下 hadoop 目录,对下次若执行相同任务有影响。

–incremental append

–check-column id

–last-value 0

这样,sqoop 会从 visit_log 中 id 比 0 大的 id 开始导入,实现了增量导入。可以采用非增量导入,但是 sqoop 似乎会在 warehouse-dir 目录下建立一个源表名的目录,如果有此目录存在会报错,所以建议采用增量导入。

每天导入时的 last value 值不一样,如何做到每天动态的读取新的 last value 呢?sqoop 支持把一条 sqoop 命令变为一个 job,sqoop 会通过 job 结果自动的更换 last value 的值。

最后我们得到的 sqoop 命令是:

sqoop job visit_import –create — import  –connect jdbc:mysql://localhost:3306/main  –username root  –password pass –table user –columns “id,url,time” –direct –hive-import  –hive-table hive_visit_log –incremental append  –check-column id –last-value 0

sqoop job –exec visit_import

创建 job:

sqoop job –meta-connect jdbc:hsqldb:hsql://ip:port/sqoop –create visit_import — import –connect jdbc:mysql://ip:port/dbname –username username –password pass –table table –direct –hive-import –hive-table mysql_award –incremental append –check-column id –last-value 0 

Sqoop 的详细介绍 :请点这里
Sqoop 的下载地址 :请点这里

相关阅读

通过 Sqoop 实现 Mysql / Oracle 与 HDFS / Hbase 互导数据 http://www.linuxidc.com/Linux/2013-06/85817.htm

[Hadoop] Sqoop 安装过程详解 http://www.linuxidc.com/Linux/2013-05/84082.htm

用 Sqoop 进行 MySQL 和 HDFS 系统间的数据互导 http://www.linuxidc.com/Linux/2013-04/83447.htm

Hadoop Oozie 学习笔记 Oozie 不支持 Sqoop 问题解决 http://www.linuxidc.com/Linux/2012-08/67027.htm

Hadoop 生态系统搭建(hadoop hive hbase zookeeper oozie Sqoop)http://www.linuxidc.com/Linux/2012-03/55721.htm

Hadoop 学习全程记录——使用 Sqoop 将 MySQL 中数据导入到 Hive 中 http://www.linuxidc.com/Linux/2012-01/51993.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计2836字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中