centos7安装flink集群_一文搞懂 FlinkX,基于flink的分布式数据同步工具

1 什么是FlinkX

  • FlinkX是在是袋鼠云内部广泛使用的基于flink的分布式离线数据同步框架,实现了多种异构数据源之间高效的数据迁移。

不同的数据源头被抽象成不同的Reader插件,不同的数据目标被抽象成不同的Writer插件。理论上,FlinkX框架可以支持任意数据源类型的数据同步工作。作为一套生态系统,每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。

8a16584463c5599a1e26a31fb623c8c1.png

2 工作原理

在底层实现上,FlinkX依赖Flink,数据同步任务会被翻译成StreamGraph在Flink上执行,工作原理如下图:

ed52e6fb91472f72ef37911bbbae9f4b.png

3 快速起步

3.1 运行模式

  • 单机模式:对应Flink集群的单机模式
  • standalone模式:对应Flink集群的分布式模式
  • yarn模式:对应Flink集群的yarn模式

3.2 执行环境

  • Java: JDK8及以上
  • Flink集群: 1.4及以上(单机模式不需要安装Flink集群)
  • 操作系统:理论上不限,但是目前只编写了shell启动脚本,用户可以可以参考shell脚本编写适合特定操作系统的启动脚本。

3.3 打包

进入项目根目录,使用maven打包:

mvn clean package -Dmaven.test.skip

打包结束后,项目根目录下会产生bin目录和plugins目录,其中bin目录包含FlinkX的启动脚本,plugins目录下存放编译好的数据同步插件包

3.4 启动

3.4.1 命令行参数选项
  • model描述:执行模式,也就是flink集群的工作模式local: 本地模式standalone: 独立部署模式的flink集群yarn: yarn模式的flink集群,需要提前在yarn上启动一个flink session,使用默认名称"Flink session cluster"必选:否默认值:local
  • job描述:数据同步任务描述文件的存放路径;该描述文件中使用json字符串存放任务信息。必选:是默认值:无
  • pluginRoot描述:插件根目录地址,也就是打包后产生的pluginRoot目录。必选:是默认值:无
  • flinkconf描述:flink配置文件所在的目录(单机模式下不需要),如/hadoop/flink-1.4.0/conf必选:否默认值:无
  • yarnconf描述:Hadoop配置文件(包括hdfs和yarn)所在的目录(单机模式下不需要),如/hadoop/etc/hadoop必选:否默认值:无
3.4.2 启动数据同步任务
  • 以本地模式启动数据同步任务
bin/flinkx -mode local -job /Users/softfly/company/flink-data-transfer/jobs/task_to_run.json -pluginRoot /Users/softfly/company/flink-data-transfer/plugins -confProp "{"flink.checkpoint.interval":60000,"flink.checkpoint.stateBackend":"/flink_checkpoint/"}" -s /flink_checkpoint/0481473685a8e7d22e7bd079d6e5c08c/chk-*
  • 以standalone模式启动数据同步任务
bin/flinkx -mode standalone -job /Users/softfly/company/flink-data-transfer/jobs/oracle_to_oracle.json  -pluginRoot /Users/softfly/company/flink-data-transfer/plugins -flinkconf /hadoop/flink-1.4.0/conf -confProp "{"flink.checkpoint.interval":60000,"flink.checkpoint.stateBackend":"/flink_checkpoint/"}" -s /flink_checkpoint/0481473685a8e7d22e7bd079d6e5c08c/chk-*
  • 以yarn模式启动数据同步任务
bin/flinkx -mode yarn -job /Users/softfly/company/flinkx/jobs/mysql_to_mysql.json  -pluginRoot /opt/dtstack/flinkplugin/syncplugin -flinkconf /opt/dtstack/myconf/conf -yarnconf /opt/dtstack/myconf/hadoop -confProp "{"flink.checkpoint.interval":60000,"flink.checkpoint.stateBackend":"/flink_checkpoint/"}" -s /flink_checkpoint/0481473685a8e7d22e7bd079d6e5c08c/chk-*

4 数据同步任务模版

从最高空俯视,一个数据同步的构成很简单,如下:

{    "job": {        "setting": {...},        "content": [...]    }}

数据同步任务包括一个job元素,而这个元素包括setting和content两部分。

  • setting: 用于配置限速、错误控制和脏数据管理
  • content: 用于配置具体任务信息,包括从哪里来(Reader插件信息),到哪里去(Writer插件信息)

4.1 setting

    "setting": {        "speed": {...},        "errorLimit": {...},        "dirty": {...}    }

setting包括speed、errorLimit和dirty三部分,分别描述限速、错误控制和脏数据管理的配置信息

4.1.1 speed
            "speed": {                 "channel": 3,                 "bytes": 0            }
  • channel: 任务并发数
  • bytes: 每秒字节数,默认为 Long.MAX_VALUE
4.1.2 errorLimit
            "errorLimit": {                "record": 10000,                "percentage": 100            }
  • record: 出错记录数超过record设置的条数时,任务标记为失败
  • percentage: 当出错记录数超过percentage百分数时,任务标记为失败
4.1.3 dirty
        "dirty": {                "path": "/tmp",                "hadoopConfig": {                    "fs.default.name": "hdfs://ns1",                    "dfs.nameservices": "ns1",                    "dfs.ha.namenodes.ns1": "nn1,nn2",                    "dfs.namenode.rpc-address.ns1.nn1": "node02:9000",                    "dfs.namenode.rpc-address.ns1.nn2": "node03:9000",                    "dfs.ha.automatic-failover.enabled": "true",                    "dfs.client.failover.proxy.provider.ns1": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",                    "fs.hdfs.impl.disable.cache": "true"                }            }
  • path: 脏数据存放路径
  • hadoopConfig: 脏数据存放路径对应hdfs的配置信息(hdfs高可用配置)
4.1.4 restore
"restore": {        "isRestore": false,        "restoreColumnName": "",        "restoreColumnIndex": 0      }

restore配置请参考断点续传

4.2 content

        "content": [            {               "reader": {                    "name": "...",                    "parameter": {                        ...                    }                },               "writer": {                    "name": "...",                    "parameter": {                         ...                     }                }            }        ]
  • reader: 用于读取数据的插件的信息
  • writer: 用于写入数据的插件的信息

reader和writer包括name和parameter,分别表示插件名称和插件参数

4.3 数据同步任务例子

详见flinkx-examples子工程

代码地址:https://github.com/DTStack/flinkx

我们已经开始应用了,小伙伴们赶紧来尝鲜吧!

### Deepspeed 分布式训练示例 #### 使用 DeepSpeed 进行分布式训练的概述 DeepSpeed 是一种用于高效大规模模型训练的库,它提供了多种优化技术来加速训练过程并降低内存消耗。通过利用零冗余优化器 (ZeRO),可以显著提高资源利用率和吞吐量[^2]。 #### 安装与配置 为了使用 DeepSpeed 开始一个新项目或改造已有 PyTorch 代码,首先需要安装该库: ```bash pip install deepspeed ``` 接着,在启动脚本时需指定 `deepspeed` 命令以及相应的配置文件路径。 #### 示例代码展示 下面是一个简单的例子展示了如何基于 Hugging Face Transformers 库中的 BERT 模型实现分布式训练: ```python import torch from transformers import BertForSequenceClassification, BertTokenizerFast import deepspeed model_name = "bert-base-uncased" tokenizer = BertTokenizerFast.from_pretrained(model_name) model = BertForSequenceClassification.from_pretrained(model_name) # 配置 DeepSpeed 参数 ds_config = { 'train_batch_size': 32, 'fp16': {'enabled': True}, } engine, optimizer, _, _ = deepspeed.initialize( model=model, config=ds_config ) for epoch in range(num_epochs): for batch in dataloader: inputs = tokenizer(batch['text'], return_tensors='pt', padding=True, truncation=True).to(engine.local_rank) labels = batch['label'].to(engine.local_rank) outputs = engine(**inputs, labels=labels) loss = outputs.loss engine.backward(loss) engine.step() ``` 这段代码片段说明了怎样初始化带有特定设置(比如批量大小、混合精度)的 DeepSpeed 引擎,并将其应用于标准循环内的前向传播/反向传播操作中[^3]。 #### 实际应用案例分析 在实际生产环境中,许多研究机构和技术公司已经成功采用了 DeepSpeed 来提升他们自己的自然语言处理和其他领域的大规模机器学习任务效率。例如,微软亚洲研究院曾报告说在其内部开发的一个超大型多模态预训练框架 MoE 中集成了 DeepSpeed 后取得了好的性能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值