本文为您介绍小文件优化以及作业诊断时的常见问题。

Windows环境下双击客户端工具闪退是什么原因?

您可以在命令行工具中(Win 键+R后,输入cmd后回车),输入客户端工具的全路径(例如 D:\odps\bin\odpscmd,请根据实际路径填写)定位问题原因。此操作如果出错,会在命令行中给出具体的错误信息。常见的原因,如下所示:
  • 没有配置Java环境。可以在命令行工具里使用java -version命令进行验证。
  • 安装路径存在非法字符。您可以尝试将安装路径改为全英文无空格路径。
  • 参数文件配置错误,详情请参见客户端

执行并发插入操作报错,如何处理?

  • 问题现象:执行并发插入操作时,MaxCompute报错如下。
    ODPS-0110999: Critical! Internal error happened in commit operation and rollback failed, possible breach of atomicity - Rename directory failed during DDLTask.       
  • 解决方法:MaxCompute没有并发控制,可能有多个任务在修改这张表。这种情况下,有极小的概率在最后的META操作时,发生并发冲突导致执行异常。同时ALTER、INSERT操作都会发生此情况。

    建议您将此表修改为分区表,每个SQL语句插入的数据写入单独的分区里,这样便可以执行并发操作。

运行作业时,报错ODPS-0130121是什么原因?

详细的错误信息如下。
FAILED:ODPS-0130121:Invalid argument type - line 1:7 'testfunc':in function class

通常,此错误是内建函数接收到的参数类型不正确导致的。建议您检查输入参数的数据类型是否正确。

创建的Shell任务执行失败,在ECS服务器执行显示成功,运维中心无法查看失败的原因,如何解决?

可以在ECS上执行su - admin /home/admin/alisatasknode/target/alisatasknode/bin/serverctl restart命令重启Agent后, 重新执行任务。

如果还是看不到运行日志,配置IP10.116.134.123访问8000端口后再试。

DataWorks-运维中心-任务管理中查看某个任务属性,为何显示的状态是暂停?

配置中心 > 项目配置中查看是否启用了此任务,详情请参见工作空间配置
  • 如果启用了此任务,请查看此任务的上游任务是否执行失败。
  • 如果没有启用此任务,请右键单击工作节点查看是否运行正常,或将此任务重新命名后配置调度。

执行数据集成操作时,右上角总是弹出消息框提示Order字段是否已经删除,是什么原因?

首先查看数据库中的Order字段是否已经被删除。

清除缓存后,将同步任务重新配置或者重新创建同步任务,再次执行验证。

odpscmd -f执行SQL文件失败,没有提示报错信息,如何处理?

首先需要获取任务的运行日志或者报错信息,才能定位问题。

通过Shell执行odpscmd -f命令,日志信息会打印在Shell中。不过在Shell中调用正常,但是在crontab中调用时会报错且没有日志。

针对这种情况,您可以在crontab中把任务执行的输出记录下来,后续出了问题可以在日志文件里获取任务的日志。执行语句为odpscmd -f xxx.sql >> path/to/odpscmd.log 2>&1

配置了同步数据到MaxCompute后,在MaxCompute中查不到同步过来的数据,如何解决?

进入日志服务的控制台进行查询,查看是否可以查询数据。
  • 如果无法查询到数据,说明日志服务没有获取日志,需要从日志服务收集日志的地方开始排查原因。
  • 如果可以查询到数据,请参考以下截图查看是否有同步任务。
    • 如果存在同步记录并且状态为失败,可以单击记录上的日志,定位到问题的原因。

      如果存在同步记录并且状态为成功,可以根据同步任务上设置的MaxCompute数据源,检查是否在MaxCompute里查错表。

    • 如果没有同步任务,请检查MaxCompute的同步任务是否已经配置,或者是否在同步周期中。

数据同步过程中,某些数据同步出错,可以配置用户邮件列表,把出错的表发送给用户吗?

目前节点或者工作流出错会报节点任务名称和工作流名称信息,以任务为单位,无法精确到表。详情请参见智能监控概述

使用DataWorks时很多数据同步任务处于等待状态是什么原因?

同步任务使用公共调度资源时一直在等待状态, 您可以通过优化配置实现最大化的同步速度。

您也可以添加自己的调度资源,详情请参见新增自定义资源组

Shell任务执行时,调度资源管理添加的其中一台服务器一直显示停止状态,重新执行了初始化还是显示停止,是什么原因?

  • 如果是经典网络,请确认注册使用的机器名称是否为机器的真实名称。在ECS上执行hostname命令,返回的结果即为机器名称,不支持自定义名称。
  • 如果是专有网络,请确认是否修改过ECS的主机名称,注意这里不是指实例名。如果修改过主机名称,在ECS上执行/etc/hosts命令查询是否绑定正确。

MaxCompute什么情况下会产生小文件?如何解决小文件问题?

  • 产生场景:

    MaxCompute使用盘古分布式文件系统是按块(Block)存放的,通常文件大小比块大小小的文件(默认块大小为64MB),被称为小文件。

    以下场景会产生小文件:
    • Reduce计算过程会产生大量小文件。
    • Tunnel数据采集过程中会生成小文件。
    • Job执行过程中生成的各种临时文件、回收站保留的过期的文件等,主要分类有以下几种:
      • TABLE_BACKUP:回收站中超过保留天数的表。
      • FUXI_JOB_TMP:作业运行临时目录。
      • TMP_TABLE:作业运行中产生的临时表。
      • INSTANCE:作业运行时保留在META表中的日志。
      • LIFECYCLE:超过生命周期的数据表或分区。
      • INSTANCEPROFILE:作业提交及执行完成后的Profile信息。
      • VOLUME_TMP:没有META信息,但在盘古上有路径的数据。
      • TEMPRESOURCE:用户自定义函数使用的一次性临时资源文件。
      • FAILOVER:系统发生失效转移(Failover)时保留的临时文件。
    可以通过如下命令查看表中的小文件数量。
    desc extended + 表名          
  • 问题影响:
    小文件过多会带来以下影响:
    • 影响伏羲启动Map Instance,默认情况下一个小文件对应一个Instance,造成浪费资源,影响整体的执行性能。
    • 过多的小文件给盘古文件系统带来压力,且影响空间的有效利用,严重的会直接导致盘古文件系统不可服务。
  • 处理方式:
    不同原因产生的小文件,需要有不同的处理方法:
    • Reduce过程中产生的小文件。您需要使用Insert Overwrite源表(或分区)即可,或者将数据写入到新表删除源表。
    • Tunnel数据采集过程中产生的小文件,通过如下方式处理:
      • 调用Tunnel SDK时,当缓存达到64MB时提交一次。
      • 使用客户端时避免频繁上传小文件,建议积累较大时一次性上传。
      • 如果导入的是分区表,建议给分区设置生命周期,过期不用的数据自动清理。
      • Insert Overwrite源表(或分区)。
      • ALTER合并模式,通过如下命令进行合并。
        ALTER TABLE tablename [PARTITION] MERGE SMALLFILES;