【问题标题】:Sqoop is not using all the specified mappersSqoop 没有使用所有指定的映射器
【发布时间】:2014-12-13 10:25:38
【问题描述】:

我正在使用 Sqoop 将数据从 Oracle 导入 Hadoop。在 Oracle 表中,我有大约 200 万条记录,主键是我作为拆分字段提供的。

我的 sqoop 作业即将完成,我正在获取正确的数据,并且作业运行了 30 分钟,到目前为止一切正常。

当我检查输出文件时,我看到第一个文件约为 1.4 GB,第二个文件约为 157.2 MB,最后一个文件(第 20 个文件)约为 10.4 MB,而从第 3 到第 19 的所有其他文件都是 0 字节。

我设置 -m 20 是因为我想为我的工作运行 20 个映射器。

这里是 sqoop 命令:

sqoop import --connect "CONNECTION_STRING" --query "SELECT * FROM WHERE AND \$CONDITIONS" --split-by .ID --target-dir /output_data -m 20

注意:我的集群能够处理 20 个映射器,而数据库也能够一次处理 20 个请求。

有什么想法吗?

  • 达摩

【问题讨论】:

    标签: sqoop


    【解决方案1】:

    这是因为主键 (ID) 不是均匀分布的。因此,您的映射器没有被适当地使用。因此,您必须使用其他一些均匀分布的字段进行拆分。

    【讨论】:

      【解决方案2】:

      来自http://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html#_controlling_parallelism...

      如果主键的实际值不是均匀分布的 在其范围内,那么这可能会导致不平衡的任务。

      --split-by 参数可用于选择分布更好的列。通常,这会因数据类型而异。

      【讨论】:

        【解决方案3】:

        尝试使用不同的 --split-by 字段以获得更好的负载平衡。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-15
          • 1970-01-01
          • 1970-01-01
          • 2017-05-19
          • 1970-01-01
          • 2018-09-04
          相关资源
          最近更新 更多