全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
DataWorks(数据工场)

使用Shell/MR时的常见问题

更新时间:2017-11-08 15:33:05

Q:如何配置/使用 OPEN_MR 类型任务

A:需要完成以下操作:

  1. 上传 MR Jar 包:所使用的 Jar 包,需要包含 Map,Reduce,Combiner 类对应的 class 文件,可以不包含 main 方法。

  2. 上传资源:MR 代码里涉及的资源:包括 Jar 包 、资源文件(资源表暂时不能支持,将在最后说明 work around 的方法)。

  3. 输入表设置:Map 端的输入表(支持多张表)。指定项目的数据表则填写格式为:projectName.tableInfo,如果直接写 tableInfo 则默认为当前 project。

    注意

    • 如果是非分区表,直接写入表名。

    • 如果是分区表,由于目前仅支持一级分区表,则分区表格式为: tablename/partitionSpace,比如:partition_table/ds=20160101(此时的 ds=’20160101’ 将被系统自动识别为输入)。

    • 如果是多级分区表,则只需写一级分区表的表名,而此表名下的所有分区都会被当成输入 。
  4. 填写 Mapper/Reducer/Combiner 信息。

    填写 Map/Reduce/Combiner 对应的类时应当注意:

    • 默认需要写全路径(packageName.className),比如com.aliyun.odps.mr.TokenizerMapper。

    • 如果是内部类,需要是 packageName.className$inerrClassName,类似com.aliyun.odps.mr.WordCount$TokenizerMapper。

    • Combiner 可为空,Mapper 不能为空。Reducer 只有 MapOnly(后面会提到的NumReduceTasks 为 0)才可以为空。

  5. 输出表设置:同输入表,可以用 project.tableInfo 来指定 project,也可以只指定 tableInfo。

    注意

    不支持多级分区,如果是分区表,必须指定需要写入的具体分区。如果对应的分区没创建会自动创建。

  6. 输出 Key/ Value 设置:

    此处配置的是 Map 往 Reduce 发送数据的时候的格式,当 MR 任务不是 MapOnly 的时候需要配置 。格式为:col1:type1,col2:type2。

  7. 其他设置:

    • OutputKeySortColumns 设置 Map 到 Reduce 的排序,用逗号分隔,对应到 SDK 为 public Builder setOutputKeySortColumns(String[ ] sortCols) 。

    • OutputGroupingColumns 和 PartitionColumns 组合配置 Map 往 Reduce 发送数据的分组方式,对应 sdk 里的 public Builder setOutputGroupingColumns(String[ ] cols) 和 public Builder setPartitionerClass(Class<? extends Partitioner> theClass),以逗号分隔多列。

    以上 3 个设置对应的使用方法,详情请参见 示例

    • SplitSize 设置 Map 读取文件的时候的单个块大小,默认是 640M,可以输入一个数字来设置(单位是 M)对应的 SDK 是 void setSplitSize(long size) 。

    • NumReduceTasks 一般不需要设置 Reducer 的个数,如果是 MapOnly,则需要设置成 0 。对应到 SDK 里是 void setNumReduceTasks(int n)。

    • MemoryForMapTask/MemoryForReduceTask 设置 Map 和 Reduce 的内存大小,对应的 SDK 是 void setMemoryForMapTask(int mem) 和 void setMemoryForReduceTask(int mem) 。单位是 MB,默认值是 2048 。

Q:怎么顺利执行 Shell/MR 类型任务

A:需要完成如下操作:

  1. 购买 ECS 云服务器

    注意

    • 建议使用 centos6、centos7,或者 aliyunos,其他操作系统初始化脚本暂时不支持。

    • 如果您添加的 ECS 需要执行 MaxCompute 任务或者同步任务,需要检查当前 ECS 的 python 版本是否是 python2.6.5 以上的版本(centos5 的版本为 2.4,其余 os 自带 2.6 以上版本)。

    • 请确保 ECS 有公网 IP。

    • 建议 ECS 的内存大小在 8G 以上。

    • 用户自定义添加的 ECS 只能支持执行 同步任务、ODPS_SQL、MR 和 SHELL 的任务类型,不支持其它任务类型。

    • 您需要购买 华东区 经典网络 ECS 服务器,否则查询日志会出现网络不可达的问题。

  2. 添加安全组规则。

    导航至安全组点击配置规则,进入配置规则页面 ,如图所示:

    DM_5_12

    • 添加内网入方向规则:

    DM_5_12

    配置 IP:10.116.134.123 访问 8000 端口 。

    • 添加公网出方向规则:

      配置可以访问公网 IP

      注意

      ECS 需开通 8000 端口,因为读取日志是通过 IP+port 方式获取的本地日志,如果不开通则无法查阅日志。若不开通公网出的 80 端口,则无法正常将该 ECS 注册到 DataWorks(数据工场,原大数据开发套件)中。

  3. 查看 ECS 主机名和 IP 地址。

    购买的 ECS 主机名和 IP 如图所示:

    DM_5_12

  4. 组织管理员进入 DataWorks > 调度资源列表,单击 新增调度资源,填写新增的调度资源名称。添加后,在弹窗界面内单击新建调度资源操作栏中的 服务器管理,进入服务器添加页面。将购买的 ECS 云服务器添加到资源组。

    1

    1

    单击 增加服务器,并在添加服务器弹出框中选择网络类型、输入 ECS 主机名和 机器 IP,然后点击提交

    注意

    • 如果您的 ECS 未开通 VPC,请允许该服务器可访问互联网(外网出端口 80),以及可被内网以 8000 端口访问(内网入端口 8000)。

    • 如果您的 ECS 开通了 VPC,请允许该服务器可访问互联网(外网端口 80),专有云网络填写 ECS 的 UUID,获取 UUID 的方式:

      登录到ECS机器执行命令:dmidecode | grep UUID;

      执行该指令后,如果系统返回结果为:713F4718-8446-4433-A8EC-6B5B62D75A24,则对应的 UID 为 713F4718-8446-4433-A8EC-6B5B62D75A24 。

  5. 经过上述步骤后,已经将新购买的 ECS 信息注册到了 DataWorks 中,但是目前为止还不能服务。如果是新添加机器,请按照如下步骤操作:

    执行初始化

    注意

    如果执行 install.sh 过程中出错或需要重新执行,请先删除已经生成的文件,请在 install.sh 的同一个目录下执行:rm –rf base-biz;然后执行:install.sh。

    DM_5_12

  6. 稍后(大约 15 秒后)在添加服务器页面,单击 刷新 按钮,观察服务状态是否转为 正常 状态,若显示正常则表示新建 ECS 服务注册成功。


Q:为什么按照流程部署完 ECS,界面依旧显示终止?

A:部属完 ECS,界面依旧显示终止,原因如下:

  • 如果是经典网络,请确认您注册使用的机器名称是真实的机器名,请在 ECS 上执行命令:hostname,返回的结果即为机器名称(不支持自定义名称)。
  • 如果是专有网络,请确认使用的是界面提供的命令查询到的 uuid。

  • 如果注册信息都是正确的,而且也是按照 执行初始化 的命令复制粘贴部署的,但还是 终止,请将 ECS 上的 /home/admin/alisatasknode/logs/alisatasknode.log 文件转为 txt 格式,提工单反馈给我们。


Q:为什么添加了调度资源,并成功安装了 ECS,但是 shell 任务还是执行失败,报错:exec target was null?

A:执行 shell 任务,需要到 运维中心 > 任务管理 > 列表 将任务修改资源组,修改到自定义创建的调度资源中。


Q:如何使用 shell 执行 MR 任务?

A:shell 执行 MR 任务的逻辑同您在本地使用 odpscmd 的执行逻辑一样,比如以下执行代码:

  1. ##@resource_reference{"aaa.jar"}
  2. /opt/taobao/tbdpapp/odpswrapper/odpsconsole/bin/odpscmd -u testid -p testkey --project=testproject --endpoint=http://service.odps.aliyun.com/api -e "jar -resources aaa.jar -classpath ./aaa.jar com.XXX.A"

注意

  • ##@resource_reference{"aaa.jar"} 表示您上传到 DataIDE 中的资源 Jar 包,您可以直接在编辑界面找到这个资源,然后单击 引用 即可,无需自己编写。

  • aaa.jar:表示 Jar 的名称。这个名称需要保证资源名称、classpath 的名称、resource 的名称都一致,不然会报找不到对应的 Jar。

  • 需要自己传 accessid,accesskey,project,endpoint;其中 endpoint 固定为 “endpoint=http://service.odps.aliyun.com/api"。

  • -e 后面就是需要执行的代码,需要用双引号括起来。执行不同的 MaxCompute 任务,只需要替换双引号内部的代码即可,其余为固定的执行命令。


Q:为什么我注册了 ECS 服务器,经常会出现自动的暂停服务的状态?

A:在注册 ECS 的时候,部署了一个 agent,agent 会有一个监听动作,发现当前 ECS 的内存、cpu、load 较高,不适合继续接收新的任务执行时,会主动将 agent 服务暂停,待机器指标下降后会自动置为 正常 状态。


Q:为什么安装 ECS 时,部署完成了,但是启动失败?

A:请检查您的 ECS 系统是否是 jdk1.6 以上的环境。如果您是 centos5.x 的操作系统需要您自己安装 jdk 的版本以及 python2.6.5 以上的版本。

本文导读目录