本文将为您介绍自定义资源组的相关问题。

如何安装监控?

如果使用自定义调度资源组出现问题,需要首先确认Agent是否安装监控。操作如下所示:
  1. 登录每台机器,切换至root账号下。
  2. 执行下述命令。
    wget https://alisaproxy.shuju.aliyun.com/install_monitor.sh --no-check-certificate
  3. 执行下述脚本。
    sh install_monitor.sh

如何处理添加自定义调度资源服务器失败的情况?

出现添加自定义调度资源服务器失败,服务状态一直显示为停止,可能有以下原因:
  • 界面注册的机器名称和实际的机器名称不一致。
    确认方法如下:
    • 经典网络下(仅华东2支持),需要确保填写的主机名称和IP是在ECS上执行命令hostnamehostname -i返回的名称和IP。
      说明 请注意是否修改过主机名称,如果修改过主机名称,请进入/etc/hosts查看是否绑定对应的host,确认绑定后,使用绑定的hosts到界面注册使用。
    • 专有网络下,需要确保填写的是在ECS上执行命令dmidecode | grep UUID返回的值。
      说明
      • 如果没有安装dmidecode,请首先进行安装。
      • 不同版本的dmidecode返回的UUID区分大小写。
      • 机器名称需要区分大小写。
    如果确认是该原因导致的问题,请根据下述方法解决:
    1. 删除原来注册的服务器。
    2. 填写正确的主机名称(UUID)和IP,重新注册服务器。
  • 初始化命令使用错误。
    确认方法如下:
    1. 登录ECS执行下述命令。
      cat /home/admin/alisatasknode/target/alisatasknode/conf/config.properties | grep driver
    2. 登录DataWorks控制台,单击左侧导航栏中的资源组列表
    3. 单击自定义资源组页签。
    4. 单击相应资源组后的服务器初始化
    5. 对照ECS执行的命令结果和服务器初始化窗口显示的username是否一致。
    如果确认是该原因导致的问题,请根据页面正确的初始化语句,重新进行初始化即可解决。
    说明
    • 在界面注册好服务器后,您可以在资源组列表 > 自定义资源组页面进行服务器初始化操作。

      不同资源组的初始化命令不同,且不可互相使用。

    • 请务必完全复制服务器初始化对话框中的命令,并按照顺序执行。
    • 专有网络的机器需要执行经典网络的初始化语句。
  • 时间与北京时间相差5分钟以上。
    确认方法如下:
    1. 登录ECS。
    2. 执行命令date,查看返回的时间是否与北京时间相差5分钟以上。

    如果确认是该原因导致的问题,请在非业务影响的情况下,同步ECS时间至北京时间时区。

  • 目录权限点有误。
    确认方法如下:
    1. 登录ECS,执行命令ps -ef | grep zoo | grep -v cdp
    2. 确认返回一个进程的是否是admin账号。

      如果是admin账号,请继续确认/home/admin/alisatasknode的目录及子目录下是否都是admin权限。

    如果有root权限,请根据下述操作进行修复:
    1. 切换至root账号下,执行chown admin:admin /home/admin -R
    2. 切换至admin账号下,执行命令/home/admin/alisatasknode/target/alisatasknode/bin/serverctl restart重启Agent。
  • 执行install.sh时便报错。
    确认方法如下:
    1. 执行命令install.sh
    2. 查看/home/admin/alisatasknode/logs下是否有日志文件生成。如果没有,则说明没有安装成功。
    如果确认是该原因导致的问题,解决方法如下:
    1. 确认当前ECS的OS是否是CentOS5、CentOS6或CentOS7版本。如果不是,请切换为该类版本并重新初始化。
    2. 执行命令执行/opt/taobao/java/bin/java -V,确认JDK版本是否返回1.8版本。
    3. 执行命令ls -al /opt/taobao,确认该目录权限是否为admin。如果不是,请执行chown admin:admin /opt/taobao -R,并重新执行初始化语句。

如何处理服务器突然终止服务且重启失败的情况?

服务器使用了一段时间,出现突然终止服务,重启无效果或重启失败的情况,可能有以下原因:
  • 不同账户启动过Agent,导致目录权限不一致。
    确认方法如下:
    1. 登录ECS,切换至root账号。
    2. 执行命令ps -ef | grep zoo | grep -v cdp
    如果返回两个进程,则说明是该原因导致,解决方法如下:
    1. 登录ECS,对上述ps出的两个进程执行kill -9
    2. 执行命令chown admin:admin /home/admin/ -R
    3. 执行命令/home/admin/alisatasknode/target/alisatasknode/bin/serverctl restart,重启Agent。
  • 句柄数被过多占用。
    确认方法如下:
    • 登录ECS,执行命令grep "temporarily unavailable" /home/admin/alisatasknode/logs/alisatasknode.log。如果有结果返回,则说明有问题。
    • 重启Agent失败,报错为Caused by: java.io.IOException: error=11, Resource temporarily unavailable
    如果确认是该原因导致的问题,请根据下述方法解决:
    1. 切换至root账号下,执行命令ps -ef | grep zoo | grep -v cdp
    2. 对上述ps出的进程全部执行kill -9命令。
    3. 执行命令chown admin:admin /home/admin/ -R
    4. 执行命令/home/admin/alisatasknode/target/alisatasknode/bin/serverctl restart,重启Agent。
  • 专有网络的ECS的UUID发生变化。
    1. 登录ECS,执行命令dmidecode | grep UUID,确认返回的UUID是否全部为小写字母(假设原来是大写)。
    2. 将返回的结果和资源组列表 > 自定义资源组页面服务器管理对话框中的结果进行对比。

    如果确认是该原因导致的问题,请在自定义资源组页面删除原来大写UUID的服务器,重新添加小写UUID的服务器。

说明 如果出现服务器无法删除,报错remove node failed, exception: [3006:ERROR_GATEWAY_EXIST_TASKS]:gateway tasks not empty的情况,请记录服务器所在区域,并复制报错内容,提交工单进行咨询。

如何处理自定义调度资源下的任务长期等待资源的情况?

出现使用自定义调度资源运行的任务,长时间等待资源未能运行的情况,可能有以下原因:
  • 服务器终止服务。
    确认方法如下:
    1. 登录DataWorks控制台,单击左侧导航栏中的资源组列表
    2. 单击自定义资源组页签。
    3. 单击相应服务器后的服务器管理,查看当前服务器的状态是否终止。

    如果确认服务器终止服务,请登录ECS,启动Agent。

  • 服务器暂停服务。
    • 确认方法如下:
      1. 登录ECS。
      2. 查看/home/admin/alisatasknode/logs/alisatasknode_status.log日志。

        日志会实时显示服务器的状态。如果显示BUSYHANGUP,说明当前服务器存在大任务进程占用资源的情况。

    • 解决方法如下:
      1. 执行命令ps -ef | grep taskexec,查看执行任务的进程。
      2. 通过日志排查占用资源的任务。

      如果发现任务异常,请进入DataWorks页面终止任务的运行。等待两分钟后,服务器即可自动恢复服务。

  • 服务器Agent异常。
    确认方法如下:
    • 执行命令df -h,查看磁盘是否存在100%的使用率。
    • 查看CPU、内存等指标是否过高。

    如果确认是该原因导致的问题,请在机器本身的异常处理完成后,重启Agent。

如何暂停和初始化Agent服务?

如果您需要暂停Agent服务,请根据以下两种情况进行选择:
  • 如果是在资源组列表 > 自定义资源组页面添加的Agent,您可以单击相应服务器后的服务器管理,在管理服务器对话框中单击暂停即可。
  • 如果是在数据集成 > 资源组页面添加的Agent,则不支持暂停Agent服务,请提交工单进行咨询。
如果您需要初始化Agent服务,操作如下:
  1. 切换至root下,执行ps -ef | grep zoo | grep alisa命令。
  2. 执行kill -9命令,结束ps获得的进程的运行。
  3. 删除/home/admin/alisatasknode目录。
  4. 在新的空目录下执行install.sh命令。
    说明 请确保下载的为相应区域的install.sh文件。

重启ECS后,如何使Agent自行恢复服务?

重启ECS后,您可以通过下述操作,使Agent自行恢复服务:
  1. 登录机器,切换至root账号。
  2. 执行命令:wget https://alisaproxy.shuju.aliyun.com/install_monitor.sh --no-check-certificate
  3. 执行脚本:sh install_monitor.sh

如何处理无法启动自定义资源组的情况?

出现使用经典网络的方式注册专有网络的机器后,无法启动自定义资源组的情况,您可以执行命令tail -f /home/admin/alisatasknode/logs/alisatasknode.log,查看运行日志确定问题原因。日志

以专有网络UUID的方式注册的服务器名称,可能是初始化语句有误,需要进行修改。

解决方法如下:
  1. 登录DataWorks控制台,单击左侧导航栏中的资源组列表
  2. 单击自定义资源组页签。
  3. 单击相应服务器后的服务器初始化
  4. 根据服务器初始化对话框中提示进行操作。
    说明 其中step3命令中的enable_uuid=false,需要修改为enable_uuid=true

自定义资源组有哪些应用场景?

  • 保证运行资源:由于集群共享默认资源组,会存在水位变高导致任务长时间等待的情况。如果您对任务有较高的资源使用需求,可以使用自定义资源组来自建任务运行集群。
  • 连通网络:由于默认资源组无法连通VPC环境下的数据库,您可以使用自定义资源组进行网络连通。
  • 用于调度资源组:调度槽位资源紧张的情况下,您可以使用自定义资源组。
  • 提升并发能力:默认资源组的运行槽位有限,您可以通过自定义资源组扩大槽位资源,允许更多的并发任务同时调度运行。

自定义资源组有哪些使用限制?

  • 一台ECS只能注册到一个自定义资源组下,一个自定义资源组可以添加多个ECS。
  • 经典网络和专有网络注册的区别为:经典网络是主机名称,专有网络是UUID。
  • 一个自定义资源中只允许存在一种网络类型。
  • 不支持运行手动任务实例。
  • ECS需要具备公网访问能力,ECS可以配置公网IP、EIP、NAT网关SNAT。

安装自定义资源组后,需要查看哪些配置?

通过DataWorks界面引导,完成自定义资源组的安装后,请登录ECS查看Agent插件的以下信息:
  • 默认安装路径:/home/admin/, 默认路径下通常会有以下目录信息:
    • alisatasknode:Agent有关配置和命令所在目录。
    • dataxdatax-on-flume:数据同步插件库和配置所在目录。目录
  • Agent有关命令:目前支持对Agent进程进行stopstartrestart等命令操作。
    /home/admin/alisatasknode/target/alisatasknode/bin/serverctl start/stop/restart
  • 运行日志:Agent运行日志有以下两个存放路径:
    • /home/admin/alisatasknode/taskinfo/:存放Shell脚本运行的日志信息,和DataWorks节点运行日志页面中查看的结果一致。
    • /home/admin/alisatasknode/logsalisatasknode.log日志文件中存放的是Agent插件的运行信息,例如接收到的任务运行操作、Agent心跳状态等。
    • /home/admin/datax3/log:存放DataX任务的详细运行日志,如果任务执行失败,请查看该部分日志查找原因。

如何监控Agent进程的运行状态?

您可以通过下述方法监控Agent进程的运行状态,在监控到Agent进程退出后,可以及时进行恢复。
  1. root用户登录ECS机器。
  2. 执行命令wget https://alisaproxy.shuju.aliyun.com/install_monitor.sh --no-check-certificate
  3. 执行命令sh install_monitor.sh,监控日志默认存放在/home/admin/alisatasknode/monitor/monitor.log中。

DataWorks有哪些调度分类?

自定义资源组在DataWorks调度体系中使用, 当前DataWorks调度体系分为一级调度资源和二级运行资源。
  • 一级调度资源:进入运维中心页面,单击左侧导航栏中的周期任务运维 > 周期实例。右键单击相应实例的DAG图,选择查看更多详情,即可在属性面板查看一级调度资源。
  • 二级运行资源:进入数据集成 > 自定义资源组页面,即可查看二级任务运行资源。

如何使用自定义资源组?

  • 配置一级调度资源
    登录DataWorks控制台,单击左侧导航栏中的资源列表,进入自定义资源组页面进行新建。
    说明 在该页面创建的调度资源适用于Shell任务,配置的是一级调度资源。
  • 配置二级运行资源
    1. 登录DataWorks控制台,进入数据集成 > 自定义资源组页面,单击右上角的新增自定义资源组进行新建,详情请参见新增自定义资源组
      说明 该页面添加的资源组仅用于数据同步任务,配置的是二级运行资源。
    2. 新建完成后,能且只能在数据开发页面配置任务时,在通道控制 > 任务资源组配置中进行选择。通道控制

如何处理添加ECS资源组时报错的情况?

添加ECS资源组时,报错gateway already exists的解决方法如下:
  1. 报错提示对应ECS已经在gateway中注册过,因为一个ECS只能添加到一个自定义资源组下,所以需要您在资源列表数据集成 > 自定义资源组页面,查看是否存在同名或同UUID的自定义资源组。
  2. 如果工作空间中没有发现对应的自定义资源组,则需要收集request ID信息进行咨询。

如何处理添加自定义资源组后状态不可用的情况?

  • 查看alisatasknode.log日志,确认是否有心跳上报302的情况。如果上报心跳302,请排查下述问题:
    • 查看UUID是否一致。对比自定义资源组页面的UUID信息和ECS上执行命令dmidecode|grep UUID的结果是否一致。
      说明 此处的UUID区分大小写。
    • 如果UUID不一致,需要填写正确的UUID并重新安装Agent。
      说明 dmidecode命令在3.0.5版本及之前版本会是大写的方式显示UUID, 如果升级到3.1.2或以上版本, 则会小写显示UUID,此时会导致心跳异常,需要重新安装Agent进行恢复。
    • 确认config.properties中配置的用户名及密码是否和自定义资源组添加界面一致,如果不一致,请参见Agent插件安装界面给出的命令重新安装Agent。
    • 如果UUID和密码信息正确,请查看config.properties中的字段node.uuid.enable。针对VPC类型的ECS,该字段的值需要为true。如果VPC类型下node.uuid.enable的值为false,则修改为true,重启Agent进程即可。
  • 查看alisatasknode.log日志,确认是否存在connection timeout的信息。如果存在,则可以进行如下处理:
    1. 查看ECS是否有公网能力,例如公网IP、EIP、NAT网关SNAT IP,请执行ping www.taobao.com确认是否可以连通。
    2. 如果ECS有公网能力,请查看ECS的安全组配置中内网出方向或公网出方向是否有访问限制。如果有访问限制,需要对gateway的IP和端口放行。

如何处理ECS状态正常,但Shell任务执行失败的情况?

  • 查看alisatasknode.log日志中具体的报错信息,可以根据T3_0699121848关键字进行搜索。
  • 登录ECS,切换至admin用户下,执行python -V命令查看Python版本是否为2.7或2.6版本。
    说明 Agent当前支持的是Python2.7或2.6版本,通常Python版本不对会导致replace user hive conf error的错误。agent

如何处理查看DataWorks运行日志,找不到对应文件的情况?

对应文件

请登录ECS并切换至admin用户,执行命令sh -x脚本名,确认是否可以正常执行,根据报错信息进行调试。

如何处理自定义资源组下任务执行OOM,无法分配内存给作业线程的情况?

自定义资源组下任务执行OOM,下图为运行报错日志,提示无法分配内存给作业线程。报错问题

自定义资源组创建时设置的内存数决定了资源组可以提供的槽位能力。资源组内的系统进程和Agent进程会占用一部分内存,不能将ECS实例所有内存都用于槽位资源,会导致高并发下某些作业OOM。

建议您调小自定义资源组下的内存数设置,可以考虑预留2G的空间给系统和Agent进程使用。如果还有其它进程,则需要预留更多的内存。