使用 Pyth ASCII on 将EBCDIC数据转换并解压缩为AWS开启 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Pyth ASCII on 将EBCDIC数据转换并解压缩为AWS开启

由路易斯·古斯塔沃·丹塔斯创作 () AWS

代码存储库:大型机数据实用程序

环境:PoC 或试点

来源:大型机数据 EBCDIC

目标:分布式或云端现代化数据 ASCII

R 类型:更换平台

工作量:IBM

技术:大型机;数据库;存储和备份;现代化

AWS服务:亚马逊EBS;亚马逊 EC2

Summary

由于大型机通常托管关键业务数据,因此在将数据迁移到 Amazon Web Services (AWS) Cloud 或其他美国信息交换标准规范 () 环境时,实现数据现代化是最重要的任务之一。ASCII在大型机上,数据通常以扩展的二进制编码十进制交换码 () 格式编码。EBCDIC导出数据库、虚拟存储访问方法 (VSAM) 或平面文件通常会生成打包的二进制EBCDIC文件,这些文件迁移起来比较复杂。最常用的数据库迁移解决方案是 change data capture (CDC),在大多数情况下,它会自动转换数据编码。但是,这些数据库VSAM、或平面文件可能没有可用的CDC机制。对于此文件,需要另一种方法来实现数据现代化。

此模式描述了如何通过将EBCDIC数据转换为ASCII格式来实现数据的现代化。转换后,您可将数据加载至分布式数据库中,也可以让云中的应用程序直接处理数据。该模式使用mainframe-data-utilities GitHub 存储库中的转换脚本和示例文件。

先决条件和限制

先决条件

限制

  • 不支持在COBOL程序内部定义的文件布局。它们必须单独提供。

产品版本

  • Python 版本 3.8 或更高版本。

架构

源技术堆栈

  • EBCDIC大型机上的数据

  • COBOL复印本

目标技术堆栈

  • 虚拟私有云中的亚马逊弹性计算云 (AmazonEC2) 实例 (VPC)

  • 亚马逊 Elastic Block Store(亚马逊EBS)

  • Python 及其必需的包、 JavaScript 对象表示法 (JSON)、sys 和日期时间

  • ASCII平面文件可供现代应用程序读取或加载到关系数据库表中

目标架构

EBCDIC使用 Python 脚本和COBOL抄写本将数据转换为EC2实例ASCII上

架构图显示了在EC2实例上将ASCII文件转换为文件的过程:EBCDIC

  1. 使用 parse_copybook_to_json.py 脚本,您可以将COBOL抄写本转换为JSON文件。

  2. 使用该JSON文件和 extract_ebcdic_to_ascii.py 脚本,可以将EBCDIC数据转换为ASCII文件。

自动化和扩缩

在首次手动文件转换所需资源到位后,您可自动进行文件转换。此示例不包括自动化说明。有多种方法可自动转换。下文概述了一种可能使用的方法:

  1. 将AWS命令行接口 (AWSCLI) 和 Python 脚本命令封装到外壳脚本中。

  2. 创建一个 AWS Lambda 函数,以异步方式将 shell 脚本任务提交到实例。EC2有关更多信息,请参阅使用 AWS Lambda 安排SSH作业

  3. 创建 Amazon Simple Storage Service (Amazon S3) 触发器,该触发器在每次上传旧文件时调用 Lambda 函数。有关更多信息,请参见使用 Amazon S3 触发器调用 Lambda函数

工具

AWS服务

其他工具

  • GitHub是一项代码托管服务,提供协作工具和版本控制。

  • Python 是高级编程语言。

代码存储库

此模式的代码可在mainframe-data-utilities GitHub 存储库中找到。

操作说明

任务描述所需技能

启动 EC2 实例。

该EC2实例必须具有出站互联网访问权限。这允许实例访问上可用的 Python 源代码 GitHub。创建实例:

  1. https://console.aws.amazon.com/ec2 上打开亚马逊EC2控制台。

  2. 启动一个 EC2 Linux 实例。使用公有 IP 地址,允许通过端口 22 进行入站访问。确保实例的存储大小至少为EBCDIC数据文件大小的两倍。有关说明,请参阅 Amazon EC2 文档

将军 AWS

安装 Git。

  1. 使用安全 shell (SSH) 客户端,连接到您刚刚启动的EC2实例。有关更多信息,请参阅连接到您的 Linux 实例

  2. 在 Amazon EC2 控制台中,运行以下命令。这会在EC2实例上安装 Git。

    sudo yum install git
  3. 运行以下命令并确认 Git 已成功安装。

    git --version
通用AWS,Linux

安装 Python。

  1. 在 Amazon EC2 控制台中,运行以下命令。这将在EC2实例上安装 Python。

    sudo yum install python3
  2. 在 Amazon EC2 控制台中,运行以下命令。这会在EC2实例上安装 Pip3。

    sudo yum install python3-pip
  3. 在 Amazon EC2 控制台中,运行以下命令。这会在 Python (Boto3) 上安装AWSSDK到实例上。EC2

    sudo pip3 install boto3
  4. 在 Amazon EC2 控制台中,运行以下命令,其中<us-east-1>是您所在AWS地区的代码。有关区域代码的完整列表,请参阅 Amazon EC2 文档中的可用区域

    export AWS_DEFAULT_REGION=<us-east-1>
通用AWS,Linux

克隆 GitHub 存储库。

  1. 在 Amazon EC2 控制台中,运行以下命令。这将从中克隆mainframe-data-utilities存储库 GitHub 并打开默认的副本位置,即home文件夹。

    git clone https://github.com/aws-samples/mainframe-data-utilities.git
  2. home 文件夹,确认该 mainframe-data-utilities 文件夹存在。

将军AWS, GitHub
任务描述所需技能

将COBOL字帖解析到JSON布局文件中。

mainframe-data-utilities 文件夹中,运行 parse_copybook_to_json.py 脚本。该自动化模块从COBOL抄本中读取文件布局并创建JSON文件。该JSON文件包含解释和提取源文件中的数据所需的信息。这将从COBOL副本中创建JSON元数据。

以下命令将COBOL副本转换为JSON文件。

python3 parse_copybook_to_json.py \ -copybook LegacyReference/COBPACK2.cpy \ -output sample-data/cobpack2-list.json \ -dict sample-data/cobpack2-dict.json \ -ebcdic sample-data/COBPACK.OUTFILE.txt \ -ascii sample-data/COBPACK.ASCII.txt \ -print 10000

该脚本打印所接收到的参数。

----------------------------------------------------------------------- Copybook file...............| LegacyReference/COBPACK2.cpy Parsed copybook (JSON List).| sample-data/cobpack2-list.json JSON Dict (documentation)...| sample-data/cobpack2-dict.json ASCII file..................| sample-data/COBPACK.ASCII.txt EBCDIC file.................| sample-data/COBPACK.OUTFILE.txt Print each..................| 10000 -----------------------------------------------------------------------

有关参数的更多信息,请参阅 GitHub 存储库中的README文件

通用AWS,Linux

检查JSON布局文件。

  1. 导航到 parse_copybook_to_json.py 脚本中定义的输出路径。

  2. 检查 sample-data/cobpack2-list.json 文件的创建时间,以确认您选择了相应的布局文件。JSON

  3. 检查JSON文件并确认其内容是否与以下内容相似。

"input": "extract-ebcdic-to-ascii/COBPACK.OUTFILE.txt", "output": "extract-ebcdic-to-ascii/COBPACK.ASCII.txt", "max": 0, "skip": 0, "print": 10000, "lrecl": 150, "rem-low-values": true, "separator": "|", "transf": [ { "type": "ch", "bytes": 19, "name": "OUTFILE-TEXT" }

JSON布局文件最重要的属性是:

  • input— 包含要转换的EBCDIC文件的路径

  • output— 定义生成ASCII文件的路径

  • lrecl — 指定逻辑记录长度的大小(以字节为单位)

  • transf — 列出所有字段及其大小(以字节为单位)

有关JSON布局文件的更多信息,请参阅 GitHub 存储库中的README文件

将军AWS,JSON

创建ASCII文件。

运行 extract_ebcdic_to_ascii.py 脚本,该脚本包含在克隆的 GitHub 存储库中。此脚本读取EBCDIC文件并写入转换后且可读的ASCII文件。

python3 extract_ebcdic_to_ascii.py -local-json sample-data/cobpack2-list.json

当脚本处理EBCDIC数据时,它会为每批 10,000 条记录打印一条消息。请参阅以下示例。

------------------------------------------------------------------ 2023-05-15 21:21:46.322253 | Local Json file | -local-json | sample-data/cobpack2-list.json 2023-05-15 21:21:47.034556 | Records processed | 10000 2023-05-15 21:21:47.736434 | Records processed | 20000 2023-05-15 21:21:48.441696 | Records processed | 30000 2023-05-15 21:21:49.173781 | Records processed | 40000 2023-05-15 21:21:49.874779 | Records processed | 50000 2023-05-15 21:21:50.705873 | Records processed | 60000 2023-05-15 21:21:51.609335 | Records processed | 70000 2023-05-15 21:21:52.292989 | Records processed | 80000 2023-05-15 21:21:52.938366 | Records processed | 89280 2023-05-15 21:21:52.938448 Seconds 6.616232

有关如何更改打印频率的信息,请参阅 GitHub 存储库中的README文件

将军 AWS

检查 ASCII 文件。

  1. 检查 extract-ebcdic-to-ascii/的创建时间COBPACK。 ASCII.txt 文件以验证它是否是最近创建的。

  2. 在 Amazon EC2 控制台中,输入以下命令。这将打开ASCII文件的第一条记录。

    head sample-data/COBPACK.ASCII.txt -n 1| xxd
  3. 检查第一条记录内容。由于EBCDIC文件通常是二进制文件,因此它们没有回车符和换行符 (CRLF) 特殊字符。extract_ebcdic_to_ascii.py 脚本添加了竖线字符作为列分隔符,该分隔符在脚本参数中定义。

如果您使用了提供的示例EBCDIC文件,则以下是该ASCII文件中的第一条记录。

00000000: 2d30 3030 3030 3030 3030 3130 3030 3030 -000000000100000 00000010: 3030 307c 3030 3030 3030 3030 3031 3030 000|000000000100 00000020: 3030 3030 3030 7c2d 3030 3030 3030 3030 000000|-00000000 00000030: 3031 3030 3030 3030 3030 7c30 7c30 7c31 0100000000|0|0|1 00000040: 3030 3030 3030 3030 7c2d 3130 3030 3030 00000000|-100000 00000050: 3030 307c 3130 3030 3030 3030 307c 2d31 000|100000000|-1 00000060: 3030 3030 3030 3030 7c30 3030 3030 7c30 00000000|00000|0 00000070: 3030 3030 7c31 3030 3030 3030 3030 7c2d 0000|100000000|- 00000080: 3130 3030 3030 3030 307c 3030 3030 3030 100000000|000000 00000090: 3030 3030 3130 3030 3030 3030 307c 2d30 0000100000000|-0 000000a0: 3030 3030 3030 3030 3031 3030 3030 3030 0000000001000000 000000b0: 3030 7c41 7c41 7c0a 00|A|A|.
通用AWS,Linux

评估EBCDIC文件。

在 Amazon EC2 控制台中,输入以下命令。这将打开EBCDIC文件的第一条记录。

head sample-data/COBPACK.OUTFILE.txt -c 150 | xxd

如果您使用了示例EBCDIC文件,则结果如下所示。

00000000: 60f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 f0f0 `............... 00000010: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 ................ 00000020: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 ................ 00000030: f0f0 f0f0 f0f0 d000 0000 0005 f5e1 00fa ................ 00000040: 0a1f 0000 0000 0005 f5e1 00ff ffff fffa ................ 00000050: 0a1f 0000 000f 0000 0c10 0000 000f 1000 ................ 00000060: 0000 0d00 0000 0000 1000 0000 0f00 0000 ................ 00000070: 0000 1000 0000 0dc1 c100 0000 0000 0000 ................ 00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000090: 0000 0000 0000 ......

要评估源文件和目标文件之间的等效性,需要全面EBCDIC的知识。例如,示例EBCDIC文件的第一个字符是连字符 () -。在EBCDIC文件的十六进制表示法中,此字符由表示60,在ASCII文件的十六进制表示法中,该字符由表示。2D有关 EBCDIC-to-ASCII转换表 EBCDIC,请参阅IBM网站ASCII上的内容。

通用AWS、Linux、EBCDIC

相关资源

参考

教程