# #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 как aStream
, но внутри оно просто сопоставляется с 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. Согласитесь, это не так просто, я обновляю свой ответ указателями