2013-06-27 95 views
1

我必须通过Sqoop从MySQL表(具有复合主键)将4亿多行导入PARTITIONED Hive表Hive。该表具有两年的数据,列出发日期范围从20120605到20140605,以及一天的成千上万条记录。我需要根据出发日期对数据进行分区。使用Sqoop从MySQL导入到Hive

版本:

的Apache Hadoop的 - 1.0.4

的Apache蜂巢 - 0.9.0

的Apache Sqoop - sqoop-1.4.2.bin__hadoop-1.0.0

由于根据我的知识,有3种方法:

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

    1. 电流那我下面

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

    3. 的语法规定指定分区的键值对 - 数以百万计的记录,人们不能认为所有的分区键值对 3.

任何人的情况下不可行为方法2和方法3提供输入?

+0

截至sqoop 1.4.3你被困在#1中。我不认为#2或#3是可能的。你可以写一个MR作业,直接使用sqoop metastore来实现#3,但它不会很漂亮。 –

回答

0

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

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

例如:

sqoop进口--hive重写--hive滴导入-delims --warehouse-DIR “/仓库” --hive表\ --connect JDBC < MySQL的路径>/DATABASE = xxxx \ --table --username xxxx --password xxxx --num-mappers 1 --hive-partition-key --hive-partition-value --hive-import \ --fields-terminated '''''''''''''''''''''''''\ n'

+0

在我原来的问题中,这是方法-2。找不到工作示例。 –

+0

这是否回答你的第二种方法? – DrewRose

0

在将数据移动到表格中之前,您必须首先创建分区表结构。而sqoop,不需要指定--hive-partition-key和--hive-partition-value,使用--hcatalog-table而不是--hive-table。

马努

+0

您是否会重写这一点,以便在OP的背景下更清楚地表明要做什么? –

0

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

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" 

一些限制:

  • 它只允许一个分区k ey /值
  • 将分区键的类型硬编码为字符串
  • 在hive 0.7中自动分区时,我们可能需要调整它以仅为键名指定一个命令行选项并使用db中的该列表进行分区。
相关问题