如何使用 Go 从 MapR 集群读取文件?

How can I read files from a MapR cluster using Go?

我在 Kubernetes 集群中有一个 Go 应用程序 运行ning,它需要从大型 MapR 集群读取文件。这两个集群是分开的,Kubernetes 集群不允许我们使用 CSI 驱动程序。我所能做的就是 运行 Kubernetes Docker 容器中的用户空间应用程序 pods 并且我得到 maprtickets 连接到 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 的感知中。

但是这个问题很酷,因为它排除了所有这些。如果你不能安装一个运营商,那么其他的东西就是一纸空文。

三种替代方法可能有效。

  1. 在 CSI 插件方法标准化之前,NFS 装载作为本机功能包含在 Kubernetes 中。它可能仍然可以在非常普通的 Kubernetes 集群上使用它,并且可以访问数据集群。

  2. 可以将容器集成到您的 pod 中,以非特权方式执行必要的 FUSE 安装。这会有点痛苦,因为您必须从 Data Fabric 安装中分离出 FUSE 驱动程序并使其正常工作。这会让您看到 pod 内的数据结构。即使那样,也不能保证 Kubernetes 或 OS 会允许它工作。

  3. 有一个未发布的 Go 文件系统客户端直接使用低级数据结构 API。我们还没有单独发布。有关这方面的更多信息,人们应该直接 ping 我(我的联系信息无处不在......发送电子邮件至 ted.dunning hpe.com 或 gmail.com 有效)

  4. Data Fabric 允许您通过 S3 访问数据。随着 Ezmeral Data Fabric 7.0 版本的发布,此功能经过重大改进以提供巨大的性能,特别是因为您可以基本上无限制地扩展网关的数量(我听说每个无状态连接到网关的速度为 3-5GB/s,但是YMMV)。这将需要最少的 futzing,并且应该提供足够的性能。您甚至可以像访问 S3 对象一样访问文件。

[1] https://unix.stackexchange.com/questions/198590/what-is-a-bind-mount#:~:text=A%20bind%20mount%20is%20an,the%20same%20as%20the%20original.