Sqoop1.4.4将MySQL中数据导入到Hive表中

本文详细介绍了Sqoop1.4.4将MySQL数据导入到Hive的过程,包括参数解析,如--hive-import、--hive-overwrite,以及处理特殊字符、NULL值的方法。此外,还讨论了分区导入、压缩编码等关键步骤。
摘要由CSDN通过智能技术生成

问题导读:

         1、--hive-import、--hive-overwrite的作用?

         2、如何处理关系型数据库字段中字符串含有分隔符问题?

         3、使用--hive-import默认字段分隔符是?一行记录分隔符是?

         4、NULL值是怎么处理的?--null-string和--null-string的作用?

         5、--hive-partition-key作用?分区值类型必须是?

         6、--compression-codec作用?

         7、Sqoop将关系型数据库数据导入Hive中,默认导入数据库是?默认导入路径是?如何指定某个特定的数据库?

一、原理及部分参数简介

        1、Sqoop import主要功能是将数据导入到HDFS文件中。但是如果你有与Hadoop集群关联的Hive元数据服务,Sqoop也可以将数据导入到Hive中,通过创建表语句CREATE TABLE <表名>在Hive中定义数据布局。导入数据到Hive中很简单,在Sqoop命令行中,使用--hive-import选项。
        2、 如果Hive中表已经存在,你可以使用--hive-overwrite选择来表明,在Hive中的此表必须被替换。如果你的数据已经被导入到HDFS中或者此步骤被忽略了,Sqoop将会产生一个Hive脚本,它包含"CREATE TABLE"操作使用Hive数据类型定义列和“LOAD DATA INPATH” 语句的来将数据文件加载到Hive warehouse目录中。
        3、尽管Hive支持转义字符,但是它并不处理新行字符的转义。Hive使用Sqoop导入数据将会出现问题,当你的数据行中包含着含有Hive默认行分隔符(\n or \r)的字符串字段或者列分隔符(\01)。你可以使用--hive-drop-import-delims选项将那些字符删掉,提供给Hive兼容的文本数据,或者使用--hive-delims-replacement选择替换掉那些字符以用户自定义字符串以提供给Hive兼容的文本数据。这些选项仅仅在你使用Hive默认分隔符的时候使用。在已经指定不同分隔符的情况下,不应该使用。
      如果你不使用指定的分隔符而使用--hive-import,那么默认使用^A作为字段分隔符 \n作为一条记录分隔符
      4、Sqoop默认的会将NULL值以string类型导入,在Hive中默认是使用\N表示NULL。这会导致,在Hive中执行查询的使用(like IS NULL)不起作用。你可以使用 --null-string和 --null-non-string在导入操作的时候。或者使用--input-null-string和--input-null-non-string在导出的时候来保护NULL值。因为Sqoop将会在生成的代码中使用这些参数。所以需要将\N变为\\N。如:$ sqoop import ... --null-string '\\N' --null-non-string '\\N'。
      5、使用--hive-table 修改输出表名
      6、Hive可以将数据分区导入以便提高查询性能。你可以使用--hive-partition-key或者 --hive-partition-value参数告诉Sqoop job以指定分区形式导入Hive中。分区值必须是个字符串
      7、使用--compression-codec 如后面接"com.hadoop.compression.lzo.LzopCodec"可以实现压缩。

二、启动Hive元数据服务

       Hive安装此处不介绍,我使用的版本是Hive0.13.1,Hadoop2.2.0

[hadoopUser@secondmgt ~]$ hive --service metastore
Starting Hive Metastore Server
15/01/18 20:13:52 INFO Configuration.deprecation: mapred.reduce.tasks is deprecated. Instead, use mapreduce.job.reduces
15/01/18 20:13:52 INFO Configuration.deprecation: mapred.min.split.size is deprecated. Instead, use mapreduce.input.fileinputformat.split.minsize
15/01/18 20:13:52 INFO Configuration.deprecation: mapred.reduce.tasks.speculative.execution is deprecated. Instead, use mapreduce.reduce.speculative
15/01/18 20:13:52 INFO Configuration.deprecation: mapred.min.split.size.per.node is deprecated. Instead, use mapreduce.input.fileinputformat.split.minsize.per.node
15/01/18 20:13:52 INFO Configuration.deprecation: mapred.input.dir.recursive is deprecated. Instead, use mapreduce.input.fileinputformat.input.dir.recursive
15/01/18 20:13:52 INFO Configuration.deprecation: mapred.min.split.size.per.rack is deprecated. Instead, use mapreduce.input.fileinputformat.split.minsize.per.rack
15/01/18 20:13:52 INFO Configuration.deprecation: mapred.max.split.size is deprecated. Instead, use mapreduce.input.fileinputformat.split.maxsize
15/01/18 20:13:52 INFO Configuration.deprecation: mapred.committer.job.setup.cleanup.needed is deprecated. Instead, use mapreduce.job.committer.setup.cleanup.needed

三、原始数据库

       查看原数据库表中内容

mysql> select * from users;
+----+-------------+----------+-----+-----------+-------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值