新老DataHub迁移手册

简介: 原Odps版内测DataHub,于2016年11月21日起已经处于维护状态,新版DataHub届时已经开启公测,公测至今已有一年时间,我们决定开始逐步下线老DataHub服务,老版部分用户需要迁移至新版DataHub。

DataHub服务用户迁移文档

前言

原Odps版内测DataHub(下文统称为老DataHub服务),于2016年11月21日起已经处于维护状态,新版DataHub届时已经开启公测,公测至今已有半年以上时间,我们决定开始逐步下线老DataHub服务,老版部分用户需要迁移至新版DataHub。

新版本具有更多的特性,性能功能都有不少提升,可以同时支持数据一份数据同步到Odps、OSS、ElasticSearch等多个不同服务中,且提供WebConsole控制台进行更简单的操作。

准备工作

本文档针对使用Logstash、Fluentd、Flume以及使用SDK写入老DataHub服务的用户,提供迁移到新服务的指引,过程中遇到任何困难可以联系我们

dingtalk

新版DataHub相关文档

DataHub产品使用文档

DataHub控制台

创建新datahub project

新版DataHub中存在项目空间-Project概念,与Odps中Project类似,但是不等于Odps中的Project,为了方便管理,我们建议迁移时在DataHub中创建与Odps Project同名的Project(不同名称也可以)

  • 登录DataHub官网控制台,使用阿里云账号登录;
  • 点击创建Project,输入名称及描述,点击创建(Project描述中建议携带Project用处及Owner的邮箱或联系方式)

创建新DataHub topic

新版DataHub存在主题-Topic的概念,与Odps的Table类似,但是不等于Odps的Table,通常如果是需要导入数据到Odps的话,需要为每张表创建一个Topic,且字段类型、顺序与名称需要一致,Odps中的分区字段当做普通的Topic字段处理,新版DataHub会根据该分区字段再DataHub中的数据值,将数据同步到Odps离线表中。

例如:

MaxCompute表: table_test(f1 string, f2 string, f3 double) partitioned by (ds string, pt string)
对应Topic应为如下的Schema:
Topic: topic_test(f1 string, f2 string, f3 double, ds string, pt string)

创建Topic可以通过以下方式:

  • 若Topic数量较少,可以再WebConsole控制台,进入Project页面后点击创建Topic按钮,选择从MaxCompute导入,输入配置信息后勾选“自动创建DataConnector”,点击“导入表结构”即可导入odps表对应的格式,确认格式无误后选择Shard数量及生命周期, Shard数量建议与老服务一样,生命周期建议3天,点击创建即可。
  • 若Topic过多,可以使用迁移工具DataHub表结构迁移工具,工具将对列表中的所有表创建对应Topic及Connector。

DataHub与MaxCompute字段类型对应表

MaxCompute表中的类型 DataHub Topic中的类型
STRING STRING
DOUBLE DOUBLE
BIGINT BIGINT
DATETIME TIMESTAMP (注:以微秒为度量单位)
BOOLEAN BOOLEAN
DECIMAL 不支持
MAP 不支持
ARRAY 不支持

映射Odps分区

老DataHub在写入数据时需要直接指定分区,如果是通过fluend或logstash等插件写入的用户是需要配置分区信息或者通过某个时间字段转为固定格式作为分区

新版DataHub在这一行为上有所改变,Odps表的分区字段再DataHub中将会变成一个普通字段,后台Connector同步任务在同步数据到Odps表时会根据分区字段比如pt具体每条记录的值写入Odps对应分区中。

例如:

MaxCompute表: table_test(f1 string, f2 string, f3 double) partitioned by (ds string, pt string)
对应Topic应为如下的Schema:
Topic: topic_test(f1 string, f2 string, f3 double, ds string, pt string)
数据1: ("test", "test", "0.14", "a1", "20170405")
数据2: ("test", "test", "0.14", "aa", "20170406")
则数据1将会同步到odps分区ds=a1,pt=20170405
则数据2将会同步到odps分区ds=a2,pt=20170406
  • 若使用插件导入,并且是通过字符串转换为固定格式的分区值的用户,新的插件需要使用fluentd/logstash的filter功能,对分区字段的值进行转换,具体使用方式可以参考这些开源工具的官方文档

不同类型接入方式迁移

使用Java SDK

需要换成新版本DataHub的SDK,Mvn依赖变化

原依赖

<dependency>
    <groupId>com.aliyun.odps</groupId>
    <artifactId>odps-sdk-core</artifactId>
    <version>0.xxx</version>
</dependency>

新依赖

<dependency>
    <groupId>com.aliyun.datahub</groupId>
    <artifactId>aliyun-sdk-datahub</artifactId>
    <version>2.3.0-public</version>
</dependency>

Client初始化

原Client初始化步骤

Account account = new AliyunAccount(accessId, accessKey);
odps = new Odps(account);
odps.setDefaultProject(project);
odps.setEndpoint(odpsEndpoint);
DatahubClient client = new DatahubClient(odps, project, table, datahubEndpoint);
client.loadShard(shardNumber);
client.waitForShardLoad();

新Client初始化步骤

AliyunAccount account = new AliyunAccount(accessId, accessKey);
DatahubConfiguration conf = new DatahubConfiguration(account, datahubEndpoint);
DatahubClient client = new DatahubClient(conf);

获取Shard列表

原获取Shard列表及状态方式

HashMap<Long, DatahubClient.ShardState> shardStatus = client.getShardStatus();

新方式

ListShardResult listShardResult = client.listShard(projectName, topicName);

写入数据

原写入方式

DatahubWriter writer = client.openDatahubWriter(shardId);
TableSchema schema = client.getStreamSchema();
DatahubRecordPack recordPack = new DatahubRecordPack(schema);

/* Write another 20 records recordPack into another partition */
for (int i = 0; i < 20; i++) {
    Record record = makeRecord(schema);
    recordPack.append(record);
}

partSpec = "pt='20150809'";
packId = writer.write(new PartitionSpec(partSpec), recordPack)
    .getPackId();
System.out.println("record append to the pack: " + packId);

新写入方式

List<RecordEntry> recordEntries = new ArrayList<RecordEntry>();
RecordEntry entry = new RecordEntry(schema);
entry.setString(0, "Test");
entry.setBigint(1, 5L);
entry.setShardId(shardId);
recordEntries.add(entry);
PutRecordsResult result = client.putRecords(projectName, topicName, recordEntries);
if (result.getFailedRecordCount() != 0) {
    List<ErrorEntry> errors = result.getFailedRecordError();
    // deal with result.getFailedRecords()
}

使用Fluentd

通过Fluend插件写入数据的用户,迁移除了上述准备工作外,还需进行三个步骤

  • 更换,安装新插件包
  • 根据配置文件对比,修改现有配置文件
  • 使用新配置文件重新启动fluend进程

插件包更换

原安装语句

gem install fluent-plugin-aliyun-odps

新安装语句(也可按照新版文档提供的一键安装包安装logstash)

gem install fluent-plugin-datahub

配置对比

部分配置不需更改,更改match 部分配置即可。

老服务配置项 新服务配置项 备注
type type 需要从aliyun_odps改为dataHub
aliyun_access_id access_id 云账号accessid
aliyun_access_key access_key 云账号accesskey
aliyun_odps_hub_endpoint endpoint Datahub服务域名,需要改为新服务的域名
aliyun_odps_endpoint 无 不再需要
buffer_chunk_limit buffer_chunk_limit 不需要变化,但是新配置不能超过3MB
buffer_queue_limit buffer_queue_limit 不需要变化
flush_interval flush_interval 不需要变化
project project_name datahub的Project,非odps project
table topic_name datahub的topic,非odps table
fields column_names 指定需要采集的列
partition 无 不再需要
time_format 无 不再需要
shard_number 无 不再需要
enable_fast_crc 无 不再需要
retry_time retry_time 重试次数
retry_interval retry_interval 重试间隔
abandon_mode 无 不再需要

新增配置

新服务配置项 备注
dirty_data_continue true/false遇到增数据是否继续,若为true 遇到脏数据会重试,重试次数用完,会将脏数据写入脏数据文件
dirty_data_file 指定脏数据文件的位置
put_data_batch_size 每1000条record写一次DataHub
shard_id 指定shard_id写入,默认round-robin方式写入
shard_keys 指定用作分区key,用key值hash后作为写入shard的索引

[TODO] 能否放一个新老的diff文件example

使用Logstash

通过Logstash插件写入数据的用户,迁移除了上述准备工作外,还需进行三个步骤

  • 更换,安装新插件包
  • 根据配置文件对比,修改现有配置文件
  • 使用新配置文件重新启动Logstash进程

插件包更换

配置对比

input部分配置不需更改,更改output部分配置即可。

老服务配置项 新服务配置项 备注
type type 需要从aliyun_odps改为dataHub
aliyun_access_id access_id 云账号accessid
aliyun_access_key access_key 云账号accesskey
aliyun_odps_hub_endpoint endpoint Datahub服务域名,需要改为新服务的域名
aliyun_odps_endpoint 无 不再需要
value_field 无 不再需要
project project_name datahub的Project,非odps project
table topic_name datahub的topic,非odps table
partition 无 不再需要
partition_time_format 无 不再需要
shard_number 无 不再需要
batch_size 通过logstash启动参数设置 logstash -f <上述配置文件地址> -b 256 (256即为每次batch大小)
batch_timeout 无 不再需要

新增配置

新服务配置项 备注
dirty_data_continue true/false遇到增数据是否继续,若为true 遇到脏数据会重试,重试次数用完,会将脏数据写入脏数据文件
dirty_data_file 指定脏数据文件的位置
put_data_batch_size 每1000条record写一次DataHub
shard_keys 数组类型,数据落shard的字段名称,插件会根据这些字段的值计算hash将每条数据落某个shard, 注意shard_keys和shard_id都未指定,默认轮询落shard
shard_id 所有数据落指定的shard,注意shard_keys和shard_id都未指定,默认轮询落shard
retry_times 重试次数,-1为无限重试、0为不重试、>0表示需要有限次数, 默认值为-1
retry_interval 下一次重试的间隔,单位为秒,默认值为5

使用Apache Flume

通过Flume工具写入数据的用户,迁移除了上述准备工作外,还需进行三个步骤

  • 更换,安装新Flume工具插件
  • 根据配置文件对比,修改现有配置文件
  • 使用新配置文件重新启动Flume进程

插件更新

新版Flume工具文档

配置对比

老服务配置项 新服务配置项 备注
a1.sinks.k1.type a1.sinks.k1.type 从com.aliyun.odps.flume.sink.OdpsSink改为com.aliyun.datahub.flume.sink.DatahubSink
a1.sinks.k1.accessID a1.sinks.k1.datahub.accessID 云账号accessid
a1.sinks.k1.accessKey a1.sinks.k1.datahub.accessKey 云账号accesskey
a1.sinks.k1.odps.endPoint a1.sinks.k1.datahub.endPoint Datahub服务域名,需要改为新服务的域名
aliyun_odps_endpoint 无 不再需要
a1.sinks.k1.odps.project a1.sinks.k1.datahub.project datahub的Project,非odps project
a1.sinks.k1.odps.table a1.sinks.k1.datahub.topic datahub的topic,非odps table
a1.sinks.k1.odps.partition 无 不再需要
a1.sinks.k1.batchSize a1.sinks.k1.batchSize 批次大小
a1.sinks.k1.serializer a1.sinks.k1.serializer 无变化
a1.sinks.k1.serializer.delimiter a1.sinks.k1.serializer.delimiter 无变化
a1.sinks.k1.serializer.fieldnames a1.sinks.k1.serializer.fieldnames 无变化
a1.sinks.k1.serializer.charset a1.sinks.k1.serializer.charset 无变化
a1.sinks.k1.serializer.delimiter a1.sinks.k1.serializer.delimiter 无变化
a1.sinks.k1.shard.number 无 不再需要
a1.sinks.k1.shard.maxTimeOut a1.sinks.k1.shard.maxTimeOut 无变化
a1.sinks.k1.autoCreatePartition 无 不再需要

使用OGG

通过OGG工具写入数据的用户,迁移除了上述准备工作外,还需进行三个步骤

  • 更换,安装新OGG工具插件
  • 根据配置文件对比,修改现有配置文件
  • 使用新配置文件重新启动OGG进程

插件更新

配置对比

老服务配置项 新服务配置项 备注
gg.handlerlist gg.handlerlist 不需修改,仍然为ggdatahub
gg.handler.ggdatahub.type gg.handler.ggdatahub.type 不需修改,仍然为com.aliyun.odps.ogg.handler.datahub.DatahubHandler
gg.classpath gg.classpath YOUR_DATAHUB_HANDLER_DIRECTORY/datahub_lib/改为{YOUR_HOME}/datahub-ogg-plugin/lib/

除以上配置外,其他DataHub相关配置均独立到configure.xml文件配置

相关文章
|
数据可视化 计算机视觉
ICCV2021 | TOOD:任务对齐的单阶段目标检测
单阶段目标检测通常通过优化目标分类和定位两个子任务来实现,使用具有两个平行分支的头部,这可能会导致两个任务之间的预测出现一定程度的空间错位。本文提出了一种任务对齐的一阶段目标检测(TOOD),它以基于学习的方式显式地对齐这两个任务。
ICCV2021 | TOOD:任务对齐的单阶段目标检测
|
自然语言处理 算法 机器人
PaddleNLP通用信息抽取技术UIE【一】产业应用实例:信息抽取{实体关系抽取、中文分词、精准实体标。情感分析等}、文本纠错、问答系统、闲聊机器人、定制训练
PaddleNLP通用信息抽取技术UIE【一】产业应用实例:信息抽取{实体关系抽取、中文分词、精准实体标。情感分析等}、文本纠错、问答系统、闲聊机器人、定制训练
PaddleNLP通用信息抽取技术UIE【一】产业应用实例:信息抽取{实体关系抽取、中文分词、精准实体标。情感分析等}、文本纠错、问答系统、闲聊机器人、定制训练
|
7月前
|
JavaScript 前端开发 API
VUE前端初级新手知识大全(一)
教程来源 https://app-a6nw7st4g741.appmiaoda.com/ Vue.js是轻量、易上手的渐进式前端框架,专注视图层,支持声明式编程与MVVM模式。本文系统讲解入门知识:从CDN/CLI环境搭建、核心语法(插值、指令、ref/reactive)、响应式原理,到计算属性与侦听器,助你快速构建首个Vue应用。
|
9月前
|
编译器 C语言 C++
VSCode电脑版下载安装使用教程:轻松设置中文界面(附安装包,2026最新)
本文手把手教你完成VSCode下载、安装、汉化及配置C/Python开发环境,零基础也能快速上手,轻松开启编程之旅。
4243 10
|
SQL 分布式计算 关系型数据库
Apache doris Datax DorisWriter扩展使用方法
DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据源之间高效的数据同步功能
2102 1
Apache doris Datax DorisWriter扩展使用方法
|
应用服务中间件 nginx
Nginx 出现403 Forbidden 的几种解决方案【已解决】
Nginx 出现403 Forbidden 的几种解决方案【已解决】
20351 3
|
网络协议
Mac下访问github网址速度慢或者无法访问终极解决方案
Mac下访问github网址速度慢或者无法访问终极解决方案
|
存储
AFDX总线协议规范
<div class="para"><strong>AFDX总线协议规范</strong></div> <div class="para">1、概述</div> <div class="para">2、 AFDX简介</div> <div class="para">3、AFDX的在数据传输性能的改进</div> <div class="para">3.1 AFDX以太网帧格式</d
3894 0
|
存储 Java 编译器
心得经验总结:源代码、目标代码、可执行代码、本地代码的区别
心得经验总结:源代码、目标代码、可执行代码、本地代码的区别
1585 0
uiu
|
Oracle Java 关系型数据库
JDK的下载与安装
JDK的下载与安装
uiu
1202 0
JDK的下载与安装