Apache Beam使用哪种协议从云存储读写文件,是HTTPS还是Binary?

问题描述

我想知道apache beam使用哪种协议来读写云存储。是 HTTPS 还是 Binary(Blob)。我试着用谷歌搜索,但没有找到。我知道 gsutil 命令使用 HTTPS 协议。

解决方法

您正在混合两件事:传输层和数据编码。

  • Google 是否使用 HTTP 传输?是的,对于所有 API。通常使用 HTTPS 或 gRPC (HTTP/2)。
  • Google 是否使用二进制编码来加快传输速度?如前所述,传输可以是 HTTPS 或 gRPC。 HTTPS 通常用于 REST API 和传输 JSON 文本格式。当然,您可以交换二进制格式的文件(例如 GZIP 以压缩和加速传输)。 gRPC 是一个二进制协议。您不交换 JSON,而是要交换的数据的二进制表示。因此,文件传输也是二进制模式。

现在,Beam 有什么用?通常,Google 库在幕后使用 gRPC,因此编码是二进制的。如果您自己执行 REST API 调用,使用 JSON,并且将使用 HTTP;但是文件内容在可以(取决于您的请求接受内容标头)时以二进制形式传输。


编辑 1

对于 BEAM,我查看了源代码。例如,您有 hereGoogleCloudStorageImpl 对象的创建。

如果您查看这个完整的类名:import com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl;。好了,来看看hadoop包吧!!

Javadoc is clear: JSON API is used。为了确认这一点,我去了source code,是的,API 通信使用 JSON 格式。

但是,请记住这是 API 通信,即围绕文件内容的元数据。文件内容应该以二进制格式发送(b64编码的纯文本应该很奇怪)。