从MySQL导入蜂巢使用Sqoop(Import from MySQL to Hive using

2019-10-18 07:41发布

我不得不从一个MySQL表(具有复合主键)到经由Sqoop分区蜂巢蜂房表导入“400万行。 该表有两年,一列日期,从20120605到一天的记录20140605和成千上万的数据。 我需要分区根据出发日期的数据。

版本:

Apache的Hadoop的 - 1.0.4

Apache的蜂巢 - 0.9.0

阿帕奇Sqoop - sqoop-1.4.2.bin__hadoop-1.0.0

按我的知识,有3种方法:

  1. MySQL的 - >非分区蜂巢表 - 从非分区蜂巢表> INSERT到分区蜂巢表
  2. MySQL的 - >分区蜂巢表
  3. MySQL的 - >非分区蜂巢表 - > ALTER非分区蜂巢表中添加PARTITION

    1. 是我在下面的当前阵痛

    2. 我读了这个支持加在后面的(?)蜂房和Sqoop的版本,但无法找到一个例子

    3. 语法决定指定分区,键值对 - 数以百万计的人们不能认为所有的分区键值对3的记录情况下不可行。

任何人都可以提供方案2和3的投入?

Answer 1:

我想你可以创建一个蜂巢的分区表。

然后为它编写的sqoop导入代码。

例如:

sqoop进口--hive重写--hive滴导入-delims --warehouse-DIR “/仓库” --hive表\ --connect JDBC <MySQL的路径> / DATABASE = XXXX \ --table --username XXXX XXXX --password --num映射器1 --hive分区密钥--hive分区值--hive导入\ --fields封端-由 '' --lines封端逐“\ N”



Answer 2:

你必须先创建一个分区表的结构,你移动你的数据之前表到分区表。 虽然sqoop,无需指定--hive分区键和--hive分区值,使用--hcatalog表,而不是--hive表。

马努



Answer 3:

如果这仍是一些人想了解,他们可以使用

sqoop import --driver <driver name> --connect <connection url> --username <user name> -P --table employee  --num-mappers <numeral> --warehouse-dir <hdfs dir> --hive-import --hive-table table_name --hive-partition-key departure_date --hive-partition-value $departure_date

从补丁说明:

sqoop import [all other normal command line options] --hive-partition-key ds --hive-partition-value "value"

一些限制:

  • 只允许一个分区键/值
  • 硬编码类型的分区键是一个字符串
  • 随着蜂巢0.7自动分区,我们可能需要调整这只是为重点的名字一个命令行选项,并使用该列从数据库表进行分区。


文章来源: Import from MySQL to Hive using Sqoop