使用sqoop从mysql导入到hive

8qgya5xd  于 2021-06-04  发布在  Hadoop
关注(0)|答案(3)|浏览(434)

我必须通过sqoop将超过4亿行从mysql表(具有复合主键)导入到分区的配置单元表配置单元中。该表有两年的数据,列离开日期从20120605到20140605不等,一天有数千条记录。我需要根据出发日期对数据进行分区。
版本:
apache hadoop-1.0.4版
apache配置单元-0.9.0
apache sqoop-sqoop-1.4.2.bin\u hadoop-1.0.0版本
据我所知,有三种方法:
mysql->非分区配置单元表->从非分区配置单元表插入分区配置单元表
mysql->分区配置单元表
mysql->non-partitioned hive table->alter non-partitioned hive table添加分区
是我正在关注的最痛苦的一个
我读到hive和sqoop的后续(?)版本中增加了对此的支持,但是找不到一个示例
语法规定将分区指定为键值对—在数百万条记录的情况下不可行,其中无法想到所有分区键值对3。
有人能为方法2和3提供意见吗?

9rnv2umw

9rnv2umw1#

如果这仍然是人们想要理解的,他们可以使用

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"

一些限制:
它只允许一个分区键/值
将分区键的类型硬编码为字符串
对于hive0.7中的自动分区,我们可能希望将其调整为只有一个命令行选项作为键名,并使用db表中的该列作为分区。

5ktev3wc

5ktev3wc2#

我想您可以创建一个hive分区表。
然后为它编写sqoop导入代码。
例如:
sqoop import--hive overwrite--hive drop import delims--warehouse dir“/warehouse”--hive table--connect jdbc/database=x--table--username x--password x--num mappers 1--hive partition key--hive partition value--hive import--fields terminated by','--line terminated by'\n'

a64a0gku

a64a0gku3#

必须先创建分区表结构,然后才能将数据移动到分区表中。在使用sqoop时,不需要指定--hive partition key和--hive partition value,请使用--hcatalog table而不是--hive table。
马努

相关问题