如何使用 Go 从 MapR 集群读取文件?
How can I read files from a MapR cluster using Go?
我在 Kubernetes 集群中有一个 Go 应用程序 运行ning,它需要从大型 MapR 集群读取文件。这两个集群是分开的,Kubernetes 集群不允许我们使用 CSI 驱动程序。我所能做的就是 运行 Kubernetes Docker 容器中的用户空间应用程序 pods 并且我得到 maprticket
s 连接到 MapR 集群。
我能够使用 com.mapr.hadoop
maprfs
jar 编写一个 Java 应用程序,该应用程序能够使用 [=10= 连接和读取文件],但我们需要将其集成到 Go 应用程序中,理想情况下,它不需要 Java sidecar 进程。
这是一个很好的问题,因为它强调了一些环境施加限制的方式,这些限制违反了外部软件可能持有的假设。
仅供参考,MapR 已被 HPE 收购,因此 MapR 集群现在是 HPE Ezmeral Data Fabric 集群。我还在训练自己这么说。
无论如何,X 语言的通用程序与 Ezmeral Data Fabric(文件系统以前称为 MapR FS)通信的公认方法是挂载文件系统并使用文件 API 就像 open/read/write 之类的。这适用于 Go、Python、C、Julia 或其他语言。在 Kubernetes 内部,执行此挂载的正常方法是使用 CSI 驱动程序,该驱动程序具有某种在后台工作的操作员。那个运算符并不是特别神奇……它只是做了需要做的事情。在 Data Fabric 的情况下,操作员使用 NFS 或 FUSE 安装 Data Fabric,然后将其中的 mounts[1] 部分绑定到 pod 的感知中。
但是这个问题很酷,因为它排除了所有这些。如果你不能安装一个运营商,那么其他的东西就是一纸空文。
三种替代方法可能有效。
在 CSI 插件方法标准化之前,NFS 装载作为本机功能包含在 Kubernetes 中。它可能仍然可以在非常普通的 Kubernetes 集群上使用它,并且可以访问数据集群。
可以将容器集成到您的 pod 中,以非特权方式执行必要的 FUSE 安装。这会有点痛苦,因为您必须从 Data Fabric 安装中分离出 FUSE 驱动程序并使其正常工作。这会让您看到 pod 内的数据结构。即使那样,也不能保证 Kubernetes 或 OS 会允许它工作。
有一个未发布的 Go 文件系统客户端直接使用低级数据结构 API。我们还没有单独发布。有关这方面的更多信息,人们应该直接 ping 我(我的联系信息无处不在......发送电子邮件至 ted.dunning hpe.com 或 gmail.com 有效)
Data Fabric 允许您通过 S3 访问数据。随着 Ezmeral Data Fabric 7.0 版本的发布,此功能经过重大改进以提供巨大的性能,特别是因为您可以基本上无限制地扩展网关的数量(我听说每个无状态连接到网关的速度为 3-5GB/s,但是YMMV)。这将需要最少的 futzing,并且应该提供足够的性能。您甚至可以像访问 S3 对象一样访问文件。
我在 Kubernetes 集群中有一个 Go 应用程序 运行ning,它需要从大型 MapR 集群读取文件。这两个集群是分开的,Kubernetes 集群不允许我们使用 CSI 驱动程序。我所能做的就是 运行 Kubernetes Docker 容器中的用户空间应用程序 pods 并且我得到 maprticket
s 连接到 MapR 集群。
我能够使用 com.mapr.hadoop
maprfs
jar 编写一个 Java 应用程序,该应用程序能够使用 [=10= 连接和读取文件],但我们需要将其集成到 Go 应用程序中,理想情况下,它不需要 Java sidecar 进程。
这是一个很好的问题,因为它强调了一些环境施加限制的方式,这些限制违反了外部软件可能持有的假设。
仅供参考,MapR 已被 HPE 收购,因此 MapR 集群现在是 HPE Ezmeral Data Fabric 集群。我还在训练自己这么说。
无论如何,X 语言的通用程序与 Ezmeral Data Fabric(文件系统以前称为 MapR FS)通信的公认方法是挂载文件系统并使用文件 API 就像 open/read/write 之类的。这适用于 Go、Python、C、Julia 或其他语言。在 Kubernetes 内部,执行此挂载的正常方法是使用 CSI 驱动程序,该驱动程序具有某种在后台工作的操作员。那个运算符并不是特别神奇……它只是做了需要做的事情。在 Data Fabric 的情况下,操作员使用 NFS 或 FUSE 安装 Data Fabric,然后将其中的 mounts[1] 部分绑定到 pod 的感知中。
但是这个问题很酷,因为它排除了所有这些。如果你不能安装一个运营商,那么其他的东西就是一纸空文。
三种替代方法可能有效。
在 CSI 插件方法标准化之前,NFS 装载作为本机功能包含在 Kubernetes 中。它可能仍然可以在非常普通的 Kubernetes 集群上使用它,并且可以访问数据集群。
可以将容器集成到您的 pod 中,以非特权方式执行必要的 FUSE 安装。这会有点痛苦,因为您必须从 Data Fabric 安装中分离出 FUSE 驱动程序并使其正常工作。这会让您看到 pod 内的数据结构。即使那样,也不能保证 Kubernetes 或 OS 会允许它工作。
有一个未发布的 Go 文件系统客户端直接使用低级数据结构 API。我们还没有单独发布。有关这方面的更多信息,人们应该直接 ping 我(我的联系信息无处不在......发送电子邮件至 ted.dunning hpe.com 或 gmail.com 有效)
Data Fabric 允许您通过 S3 访问数据。随着 Ezmeral Data Fabric 7.0 版本的发布,此功能经过重大改进以提供巨大的性能,特别是因为您可以基本上无限制地扩展网关的数量(我听说每个无状态连接到网关的速度为 3-5GB/s,但是YMMV)。这将需要最少的 futzing,并且应该提供足够的性能。您甚至可以像访问 S3 对象一样访问文件。