Sqoop根据列值导入as-parquetfile

时间:2018-09-06 17:58:00

标签: hadoop sqoop parquet partition

因此,我试图运行一个sqoop导入作业,在该作业中,我根据partition_key保存了镶木地板文件。最终,我希望文件夹/TABLE_DIR/具有5个镶木文件,每个唯一分区键1个。目前我只能得到4。我不能设置num-mappers5。Table2的partition_key可能会增加到8,为此我想得到8个实木复合地板文件,等等。

Table1:
primary_key:[1,2,3,4,5,6,7,8,9,10]
partition_key: [1,1,1,2,2,2,3,3,4,5]
value: [15,12,18,18,21,23,25,26,24,10]

Code:
sqoop import \
     --query "select primary_key,partition_key,value from Table1" \
     --compress --compression-codec snappy \
     --split-by partition_key \
     --target-dir /TABLE_DIR/

1 个答案:

答案 0 :(得分:1)

由于sqoop导入是仅地图作业,因此您无法控制输出文件的数量。可以通过hadoop拆分机制来解决(您可以在mapreduce或pig中控制它,但是无法确定sqoop的蜂巢脚本。尽管可以查看“ fetch_size”参数)。但是,如果您真的想执行以下操作

  1. 您可以在此数据上显示一个配置单元表(请小心元数据文件!)。
  2. 将这些数据插入另一个配置单元表(也是如此),并在插入时对任何列进行排序(这样做是为了将insert-select(将再次成为仅地图的工作)转换为map-reduce作业),然后将mapreduce.job.reduces设置为5或任何所需的值。

该属性将强制五个reducer提供5个输出文件。