Sqoop1.4.4将文件数据集从HDFS中导出到MySQL数据库表中

本文介绍了Sqoop export工具如何将HDFS中的数据导入到MySQL,详细讲解了INSERT模式(默认)和UPDATE模式的区别及应用场景,同时探讨了--update-key、--export-dir和--update-mode参数的作用,以及在导出过程中遇到的错误分析和事务处理机制。
摘要由CSDN通过智能技术生成

问题导读:

        1、Sqoop export有哪三种导出模式,Sqoop默认是哪个模式?

        2、INSERT模式和UPDATE模式区别,各自应用场景?

        3、--update-key 、--column-key、--export-dir参数各自的作用?

        4、--update-mode参数有哪两种模式,区别是什么?

        5、Sqoop 导出插入事务提交原理,一条插入语句包含多少条记录?多少条语句执行一次事务提交?

        6、--update-mode参数默认后接的是updateonly吗?

        7、如果一个Map task任务执行失败了会怎么样?之前已经提交的事务操作会回滚吗?

一、Sqoop export简介

       Sqoop export工具被用来将文件集合从HDFS中导入到关系型数据库中。目标表必须事先已经在数据库中创建好。输入文件根据用户指定的分隔符被读取解析成记录集。Sqoop默认的是将这些操作转换成“INSERT模式”,向目标数据库中注入数据记录。在“更新模式”中,Sqoop将会产生更新语句替换数据库中已经存在的记录。在“调用模式”中,Sqoop会为每个记录产生一个存储过程调用。
      “INSERT模式”:Sqoop默认将每条记录以转换成INSERT语句,添加到数据库表中,如果你的表存在一些约束如关键字唯一等,使用插入模式要当心,避免违反这些约束。如果一条记录插入失败那么,该导入job将会失败。这种模式一般用于将数据导入到一个新的、空的表Sqoop默认情况下使用INSERT 模式
      “UPDATE模式”:如果指定--update-key参数,Sqoop将会修改一个数据库中存在的数据集,每一条记录都会当做UPDATE语句来修改存在的记录。记录的修改语句根据--update-key指定的列决定。如果一个更新语句在数据库中没有对应的记录,则不会报错,导出操作会继续进行。事实上,这意味着不会在数据库中导入新的记录,只是更新原始数据。同样的,如果使用--column-key指定的列不是唯一标识行的,也就是说不是关键字,那么多个行记录将会被更新通过使用一条语句。

二、参数介绍

        --update-key  后面也可以接多个关键字列名,可以使用逗号隔开,Sqoop将会匹配多个关键字后再执行更新操作。
        --export-dir    参数配合--table或者--call参数使用,指定了HDFS上需要将数据导入到MySQL中的文件集目录。
        --update-mode  updateonly和allowinsert。 基于目标数据库,如果指定--update-mode模式为allowinsert,可以将目标数据库中原来不存在的数据也导入到数据库表中。
即将存在的数据更新,不存在数据插入。

三、使用默认INSERT模式导出

[hadoopUser@secondmgt ~]$ sqoop-export --connect jdbc:mysql://secondmgt:3306/spice --username hive --password hive --table sqoopusers2 --export-dir /output/query/
Warning: /usr/lib/hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
15/01/18 19:06:06 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
15/01/18 19:06:06 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
15/01/18 19:06:06 INFO tool.CodeGenTool: Beginning code generation
15/01/18 19:06:07 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `sqoopusers2` AS t LIMIT 1
15/01/18 19:06:07 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `sqoopusers2` AS t LIMIT 1
15/01/18 19:06:07 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /home/hadoopUser/cloud/hadoop/programs/hadoop-2.2.0
Note: /tmp/sqoop-hadoopUser/compile/fac73511c484d2d5abe0c007245594ff/sqoopusers2.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
15/01/18 19:06:08 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-hadoopUser/compile/fac73511c484d2d5abe0c007245594ff/sqoopusers2.jar
15/01/18 19:06:08 INFO mapreduce.ExportJobBase: Beginning export of sqoopusers2
15/01/18 19:06:08 INFO Configuration.deprecation: mapred.job.tracker is deprecated. Instead, use mapreduce.jobtracker.address
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoopUser/cloud/hadoop/programs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值