我在大型机中有文件。我希望将这些数据推送到 Hadoop(HDFS)/HIVE。
我可以将 Sqoop 用于 Mainframe DB2 数据库并将其导入 HIVE,但是文件(如COBOL
等VASM
)呢?
是否有任何我可以编写的自定义水槽源或一些替代工具可以在这里使用?
COBOL 是一种编程语言,而不是一种文件格式。如果您需要导出由 COBOL 程序生成的文件,您可以使用与这些文件由 C、C++、Java、Perl、PL/I、Rexx 等生成的文件相同的技术。
通常,您将拥有三种不同的数据源:平面文件、VSAM 文件和 DBMS,例如 DB2 或 IMS。
DMBS 具有将数据复制到平面文件中的导出实用程序。请记住,DB2 中的数据可能会被规范化,因此您可能需要相关表的内容才能理解数据。
VSAM 文件可以通过IDCAMS实用程序导出为平面文件。
我强烈建议您将文件转换为文本格式,然后再将它们传输到具有不同代码页的另一个框中。尝试处理混合文本(必须翻译其代码页)和二进制(不得翻译其代码页但可能必须从大端转换为小端)比预先进行转换更难。
转换很可能通过大型机上的 SORT 实用程序完成。大型机 SORT 实用程序往往具有广泛的数据操作功能。您可以使用其他机制(其他实用程序、以您选择的语言编写的自定义代码、购买的软件包),但这是我们在这些情况下倾向于做的事情。
一旦您将平面文件转换为所有数据都是文本,您可以通过 FTP 或 SFTP 或 FTPS 将它们传输到您的 Hadoop 盒子。
这不是对该主题的详尽介绍,但它将帮助您入门。
Syncsort 已经处理大型机数据 40 年(大约 50% 的大型机已经运行该软件)他们有一个名为 DMX-H 的特定产品,它可以获取大型机数据、处理数据类型转换、导入 cobol 副本并直接加载它进入 HDFS。Syncsort 最近还为 Apache Hadoop 核心贡献了一项新功能增强功能,我建议您通过 www.syncsort.com 与他们联系,他们在最近的 Cloudera 路演中的演示中展示了这一点。
2018 年更新:
有许多商业产品有助于将数据从大型机转移到分布式平台。这是我遇到的那些感兴趣的人的列表。所有这些都按照问题中的描述获取 Z 上的数据,并将进行一些转换并使数据能够移动到其他平台。不是完全匹配,但是,行业已经发生了变化,将数据移动到其他平台进行分析的目标正在增长。Data Virtualization Manager 提供了最强大的工具来转换我所看到的数据。
为什么不:hadoop fs -put <what> <where>
?
cobol 布局文件的传输可以通过上面讨论的选项来完成。然而,将它们实际映射到 Hive 表是一项复杂的任务,因为 cobol 布局具有复杂的格式,如依赖子句、可变长度等,
我曾尝试创建自定义 serde 来实现,尽管它仍处于初始阶段。但这里是链接,它可能会让您了解如何根据您的要求进行反序列化。
不是拉,而是推:使用 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 文件路径。
有关数据恰好是日志记录的更详细示例,请参阅将日志提取到 Hadoop。
Cobrix或许可以为您解决。它是 Spark 的开源 COBOL 数据源,可以解析你提到的文件。