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

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互导数据

[Hadoop] Sqoop安装过程详解

用Sqoop进行MySQL和HDFS系统间的数据互导

Hadoop Oozie学习笔记 Oozie不支持Sqoop问题解决

Hadoop生态系统搭建(hadoop hive hbase zookeeper oozie Sqoop)

Hadoop学习全程记录——使用Sqoop将MySQL中数据导入到Hive中

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5206c688b655f26a48823986a5759198.html