MaxCompute支持您通过ETL工具Kettle实现MaxCompute作业调度。您可以通过拖拽控件的方式,方便地定义数据传输的拓扑结构。本文为您介绍如何通过MaxCompute
JDBC驱动,连接Kettle和MaxCompute项目并调度作业。
背景信息
Kettle是一款开源的ETL工具,纯Java实现,可以运行于Windows、Unix、Linux操作系统,为您提供图形化的操作界面。Kettle支持丰富的输入输出数据源,数据库支持Oracle、MySQL,DB2等,也支持各种开源的大数据系统,例如HDFS、HBase、Cassandra、MongoDB等。
您可以在Kettle中通过创建Job的方式连接MaxCompute项目,并按照ETL流程调度作业。
步骤一:放置MaxCompute JDBC驱动
将MaxCompute JDBC驱动JAR包(例如odps-jdbc-3.2.9-jar-with-dependencies.jar
)放置于Kettle的安装目录data-integration/lib
下。
步骤二:Kettle连接MaxCompute项目
- 在Kettle的安装目录
data-integration
下,双击Spoon.bat
(Windows系统)或者双击Spoon
(macOS系统),即可启动Spoon,进入Spoon界面。
- 在顶部菜单栏,选择,创建Kettle作业,用于后续创建作业调度流程。
- 在主对象树页签的DB连接处单击右键选择新建。
- 在数据连接对话框单击一般,并配置下表所列参数信息。

参数 |
说明 |
连接名称 |
新建数据连接的名称,用于在系统中区分不同数据库的连接。例如MaxCompute。 |
连接类型 |
固定选择Generic database。
|
连接方式 |
固定选择Native (JDBC) 。
|
Dialect |
固定选择Hadoop Hive 2 。
|
自定义连接URL |
连接MaxCompute项目的URL。格式为jdbc:odps:<MaxCompute_endpoint>?project=<MaxCompute_project_name> 。配置时删除<> 符号。参数说明如下:
|
自定义驱动类名称 |
用于连接MaxCompute项目的驱动程序。固定取值为com.aliyun.odps.jdbc.OdpsDriver。
|
用户名 |
具备目标MaxCompute项目访问权限的AccessKey ID。
您可以进入AccessKey管理页面获取AccessKey ID。
|
密码 |
AccessKey ID对应的AccessKey Secret。
您可以进入AccessKey管理页面获取AccessKey Secret。
|
- 单击测试,连接成功后依次单击确定、确认,完成Kettle和MaxCompute连接。
步骤三:创建作业调度流程
您可以在Spoon界面的核心对象页签通过创建、关联核心对象(作业)的方式构造作业调度流程。
此处以通过LOAD命令从OSS加载数据,并写入MaxCompute内部表的ETL过程为例为您介绍操作流程,对应示例数据请参见通过内置Extractor(StorageHandler)导入数据。该ETL过程涉及的作业可根据核心对象类型拆解如下。

- 在Spoon界面,单击核心对象页签。
- 基于上图拆解的核心对象,从左侧导航栏中依次拖拽核心对象组件至右侧作业区域中,并按照下图所示结构连接各核心对象。
连接核心对象的方式为:选中核心对象后,按住Shift同时单击核心对象,即可出现连接线,连接至目标核心对象即可。

- 在脚本类型的核心对象上单击右键,选择编辑作业入口,在SQL对话框配置下表所列参数信息后,单击确定。依次完成所有脚本类型核心对象配置。

参数 |
说明 |
作业项名称 |
调度作业的名称。例如Create table、Load from OSS、Processing。 |
数据库连接 |
访问的数据连接名称。即步骤二中创建的数据连接。例如MaxCompute。
|
将SQL脚本作为一条语句发送 |
不选中。 |
SQL脚本 |
调度作业对应的SQL脚本。示例中脚本类型核心对象对应的SQL脚本如下:
- Create table
create table ambulance_data_csv_load (
vehicleId INT,
recordId INT,
patientId INT,
calls INT,
locationLatitute DOUBLE,
locationLongtitue DOUBLE,
recordTime STRING,
direction STRING);
- Load from OSS
load overwrite table ambulance_data_csv_load
from
location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/'
stored by 'com.aliyun.odps.CsvStorageHandler'
with serdeproperties (
'odps.properties.rolearn'='acs:ram::xxxxx:role/aliyunodpsdefaultrole', --AliyunODPSDefaultRole的ARN信息,可通过RAM角色管理页面获取。
'odps.text.option.delimiter'=','
);
- Processing
insert overwrite table ambulance_data_csv select * from ambulance_data_csv_load;
|
步骤四:运行作业调度流程
- 在创建的作业调度流程界面,单击左上角的
图标后,在执行作业对话框右下角单击执行。
- 可选:如果弹出如下对话框,单击是,保存创建的作业调度流程,并按照提示指引命名。例如mc。
- 通过调度流程界面的DAG图或执行结果区域查看运行状态,当呈现下图所示状态时,表明作业调度流程运行结束。
步骤五:查看作业调度结果
作业调度流程运行完成后,通过简单SQL脚本查看数据是否成功写入目标表中。
- 在Spoon界面单击主对象树页签,在创建的Kettle作业(例如mc)下单击DB连接。
- 在创建的数据连接(例如MaxCompute)上单击右键,选择SQL编辑器。
- 在简单SQL编辑器对话框,输入SQL脚本并单击执行,即可在预览数据对话框查看到查询结果。

SQL脚本如下:
select * from ambulance_data_csv;