如何将数据从大型机拉到 Hadoop
Posted
技术标签:
【中文标题】如何将数据从大型机拉到 Hadoop【英文标题】:How to pull data from Mainframe to Hadoop 【发布时间】:2013-02-28 09:37:29 【问题描述】:我在大型机中有文件。我希望将这些数据推送到 Hadoop(HDFS)/HIVE。
我可以将 Sqoop 用于 Mainframe DB2 数据库并将其导入 HIVE,但是文件呢(例如 COBOL
、VASM
等)
是否有任何我可以编写的自定义水槽源或其他可以在这里使用的工具?
【问题讨论】:
【参考方案1】:COBOL 是一种编程语言,而不是一种文件格式。如果您需要导出由 COBOL 程序生成的文件,您可以使用与这些文件由 C、C++、Java、Perl、PL/I、Rexx 等生成的文件相同的技术。
通常,您将拥有三种不同的数据源:平面文件、VSAM 文件和 DBMS,例如 DB2 或 IMS。
DMBS 具有将数据复制到平面文件中的导出实用程序。请记住,DB2 中的数据可能会被规范化,因此您可能需要相关表的内容才能理解数据。
VSAM 文件可以通过IDCAMS 实用程序导出为平面文件。
我强烈建议您将文件转换为文本格式,然后再将它们传输到具有不同代码页的另一个盒子。尝试处理混合文本(必须翻译其代码页)和二进制(不得翻译其代码页但可能必须从大端转换为小端)比预先进行转换更难。
转换很可能通过大型机上的 SORT 实用程序完成。大型机 SORT 实用程序往往具有广泛的数据操作功能。您还可以使用其他机制(其他实用程序、以您选择的语言编写的自定义代码、购买的软件包),但在这些情况下我们倾向于这样做。
将平面文件转换为所有数据都是文本后,您可以通过 FTP 或 SFTP 或 FTPS 将它们传输到 Hadoop 盒子。
这不是对该主题的详尽介绍,但它可以帮助您入门。
【讨论】:
谢谢!那应该对我有帮助。 如果我的 VSAM 文件中包含 COM3 内容,IDCAMS 是否可以正常工作?此外,该工具的实时或近实时复制能力如何? @yathirigan 您希望使用 SORT 实用程序将压缩十进制 (COMP-3) 数据转换为可读格式。实时复制可以通过安排作业以适当的间隔运行来完成,但如果间隔非常短和/或 VSAM 文件很大,您可能需要寻找其他解决方案。正如比尔伍德格在your question 中指出的那样,与您的技术人员交谈。【参考方案2】:Syncsort 处理大型机数据已有 40 年(大约 50% 的大型机已经运行该软件),他们有一个名为 DMX-H 的特定产品,它可以获取大型机数据、处理数据类型转换、导入 cobol 副本和将其直接加载到 HDFS 中。 Syncsort 最近还为 Apache Hadoop 核心贡献了一个新的功能增强 我建议您通过 www.syncsort.com 与他们联系 他们在最近的 Cloudera 路演中展示了这一点。
【讨论】:
您有任何关于“50% 的大型机已经运行 [SyncSort]”的数据吗?【参考方案3】:2018 年更新:
有许多商业产品有助于将数据从大型机转移到分布式平台。这是我遇到的那些感兴趣的人的列表。所有这些都按照问题中的描述获取 Z 上的数据,并将进行一些转换并使数据能够移动到其他平台。不是完全匹配,但是,行业已经发生了变化,将数据移动到其他平台进行分析的目标正在增长。 Data Virtualization Manager 提供了最强大的工具来转换我所见过的数据。
SyncSort IronStream
IBM Common Data Provider
Correlog
IBM Data Virtualization Manager
【讨论】:
【参考方案4】:为什么不:hadoop fs -put <what> <where>
?
【讨论】:
不是真的,我正在尝试自动化事情,我有源代码,即大型机中的 VSAM 文件。我如何将它们直接导出到 Hadoop【参考方案5】:cobol 布局文件的传输可以通过上面讨论的选项来完成。然而,将它们实际映射到 Hive 表是一项复杂的任务,因为 cobol 布局具有复杂的格式,如依赖子句、可变长度等,
我已经尝试过创建自定义的serde来实现,虽然它还处于初始阶段。但这里是链接,它可能会让您了解如何根据您的要求进行反序列化。
https://github.com/rbheemana/Cobol-to-Hive
【讨论】:
这个罐子太棒了【参考方案6】:不是拉,而是推:使用 Dovetailed Technologies 的 Co:Z Launcher。
例如(JCL 节选):
//FORWARD EXEC PGM=COZLNCH
//STDIN DD *
hadoop fs -put <(fromfile /u/me/data.csv) /data/data.csv
# Create a catalog table
hive -f <(fromfile /u/me/data.hcatalog)
/*
其中 /u/me/data.csv(您想要在 Hadoop 中使用的基于大型机的数据)和 /u/me/data.hcatalog(对应的 HCatalog 文件)是 z/OS UNIX 文件路径。
有关数据恰好是日志记录的更详细示例,请参阅Extracting logs to Hadoop。
【讨论】:
【参考方案7】:Cobrix 或许可以为您解决。它是 Spark 的开源 COBOL 数据源,可以解析你提到的文件。
【讨论】:
以上是关于如何将数据从大型机拉到 Hadoop的主要内容,如果未能解决你的问题,请参考以下文章
如何将重复的 where 子句表达式从 linq 拉到函数中?
检测到 Sqoop 套接字超时:从大型机读取数据并插入 Hive 时读取超时