Sqoop 根据列值导入as-parquetfile

Sqoop Import as-parquetfile based on column value

所以我正在尝试 运行 一个 sqoop 导入作业,我在其中保存基于我的 partition_key 的镶木地板文件。最后,我希望我的文件夹 /TABLE_DIR/ 有 5 个 parquet 文件,每个唯一分区键 1 个。目前我只有 4 个。我无法设置 num-mappers 5。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/

由于 sqoop 导入是一个仅映射的作业,您无法控制输出文件的数量。它将由 hadoop 拆分机制处理(您可以在 mapreduce 或 pig 中控制它,但 hive 脚本不确定 sqoop。"fetch_size" 参数可以查看)。但是,如果您真的想执行以下

  1. 您可以在此数据上公开一个配置单元 table(小心元数据文件!)。
  2. 将此数据插入另一个配置单元 table(这也是镶木地板)并在插入时对任何列进行排序(这样做是为了转换插入-select,这将是一个map only job 再次映射到 map-reduce 作业)并将 mapreduce.job.reduces 设置为 5 或任何所需的值。

属性 将强制 5 个减速器提供 5 个输出文件。