Какой протокол apache beam использует для записи и чтения файлов из облачного хранилища, HTTPS или двоичный?

# #google-cloud-storage #google-cloud-dataflow #apache-beam #apache-beam-io

Вопрос:

Я хотел знать, какой протокол apache beam использует для чтения и записи в облачное хранилище. Это HTTPS или двоичный файл(большой двоичный объект).Я попытался погуглить его, но не нашел. Я знаю, что команда gsutil использует протокол HTTPS.

Комментарии:

1. Использование HTTP/HTTPS не означает, что передаваемые данные не являются двоичными.

2. Спасибо, но до сих пор не ясно, какой протокол apache beam использует для передачи файлов.

3. Я на 99% уверен, что это будет HTTP/HTTPS. Google не собирается поддерживать совершенно новый протокол, когда уже реализован совершенно хороший протокол, только для Apache Beam. Вы могли бы протестировать это локально и провести некоторый анализ вашего сетевого трафика. Возможно, чего-то такого простого, как проксирование через инструмент скрипача Телерика, будет достаточно.

4. В java , если вы не используете apache beam, мы можем использовать Blob-объект blob = storage.get(ИМЯ_БУКЕТА, ИМЯ_ОБЪЕКТА); Канал чтения r = blob.reader(); Apache beam использует некоторый API для чтения большого количества файлов, поэтому, если beam использует HTTPS, он не будет медленнее двоичного для чтения большого количества файлов из корзины. Я запускаю задания потока данных с помощью команды непосредственно в Google cloud shell. Есть некоторые ограничения безопасности, я не могу работать в локальной сети.

5. Разве Blob класс из GCS SDK не использует только HTTP внутренне? В C# я могу использовать хранилище Google как a Stream , но внутри оно просто сопоставляется с HTTP-соединениями.

Ответ №1:

Вы смешиваете 2 вещи: транспортный уровень и кодирование данных.

  • Использует ли Google HTTP-транспорт? ДА, для всех API. Обычно используются HTTPS или gRPC (HTTP/2).
  • Использует ли Google двоичную кодировку для ускорения передачи? Как было сказано ранее, транспорт может быть HTTPS или gRPC. HTTPS обычно используется для REST API и для передачи текстового формата JSON. Конечно, вы можете обмениваться файлами в двоичном формате (например, GZIP для сжатия и ускорения передачи). gRPC-это двоичный протокол. Вы обмениваетесь не JSON, а двоичным представлением данных, которыми хотите обмениваться. И, таким образом, передача файлов также осуществляется в двоичном режиме.

Теперь, что толку в Луче? Как часто, библиотеки Google используют gRPC за кулисами, и, таким образом, кодировка является двоичной. Если вы выполните вызов REST API самостоятельно, с помощью JSON, для этого будет использоваться HTTP; но содержимое файла, когда оно может (зависит от заголовка вашего запроса «Принять содержимое»), передается в двоичном формате.


ПРАВКА 1

Для BEAM я заглянул в исходный код. У вас здесь, например, создание GoogleCloudStorageImpl объекта.

Если вы посмотрите на это полное название класса: import com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl; . Хорошо, давайте посмотрим пакет hadoop!!

Javadoc понятен: используется API JSON. чтобы подтвердить это, я перешел к исходному коду, и ДА, формат JSON используется для связи с API.

НО имейте в виду, что это связь API, метаданные вокруг содержимого файла. Содержимое файла должно быть отправлено в двоичном формате (обычный текст в кодировке b64 должен быть странным).

Комментарии:

1. Спасибо, но все равно это всего лишь предположение, что apache beam использует gRPC, но не подтверждает. Я смотрел исходный код, но все равно для подтверждения потребуется время.

2. Согласитесь, это не так просто, я обновляю свой ответ указателями