共计 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