Хранение исходного файла в Google DataProc HDFS против облачного хранилища Google (Google Bucket) - PullRequest
1 голос
/ 04 июня 2019

Я хочу обработать ~ 500 ГБ данных , распределенных по 64 файлам JSON каждый, содержащий 5M записей . В основном, функция Map (Pyspark) на каждой из 300M записей.

Чтобы протестировать функцию карты PySpark, я настроил кластер Google Dataproc (1 мастер 5 рабочих для тестирования только одного файла JSON).

Какая лучшая практика здесь?

Должен ли я скопировать все файлы в главном узле (чтобы использовать распределенную файловую систему Hadoop в Dataproc) или будет одинаково эффективно, если я сохраню файлы в моем хранилище GCS и укажу местоположение файла в моем Pyspark?

Также мой код импортирует довольно много внешних модулей, которые я скопировал на мой мастер, и импорт отлично работает в мастере. Лучше всего скопировать его на все другие рабочие узлы, чтобы при запуске Pyspark на этих рабочих я не получал ошибку импорта.

Я прочитал несколько статей на облачном веб-сайте Google, но не получил четкого ответа, где хранить файлы.

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

1 Ответ

2 голосов
/ 05 июня 2019

Вы задаете несколько вопросов, поэтому давайте ответим на них по одному.

  1. мой код импортирует довольно много внешних модулей, которые я скопировал в мой мастер, и импорт отлично работает в мастере.Рекомендуется скопировать его на все другие рабочие узлы, чтобы при запуске Pyspark на этих рабочих местах не возникала ошибка импорта.

Если модули являются внешними (например, вы устанавливаете их)через pip install) тогда я бы использовал действие инициализации

Если у вас есть много .py файлов, которые вы написали, я бы положил их в архиви перейдите на работу с аргументом --py-files.Я бы также предложил изучить колеса или яйца.

Вы можете найти эту ссылку полезной: https://developerzen.com/best-practices-writing-production-grade-pyspark-jobs-cb688ac4d20f

я должен скопировать все файлы в главном узле (чтобы использовать распределенную файловую систему Hadoop в Dataproc), или это будет одинаково эффективно, если я сохраню файлы в моем хранилище GCS

ЕслиДанные уже находятся в GCS, и вы намереваетесь хранить их там, нет никакой дополнительной выгоды копировать их на главный узел.Разъем GCS может считывать его на месте (и параллельно!) Из GCS, и это может быть дешевле (с точки зрения вычислительных затрат) по сравнению с копированием в / из GCS отдельно.

Похоже, ваши данные уже приличноsharded;это хорошая причина, чтобы просто прочитать его из GCS напрямую в Spark.

Страница соединителя GCS явно вызывает это:

  • Прямые данныедоступ - храните свои данные в облачном хранилище и обращайтесь к ним напрямую, без необходимости сначала передавать их в HDFSСовместимость с HDFS. Вы можете легко получить доступ к своим данным в облачном хранилище, используя префикс gs: // вместо hdfs: //.

  • Взаимодействие. Хранение данных в облачном хранилище обеспечивает бесшовную совместимость между Spark., Hadoop и службы Google.

  • Нет затрат на управление хранилищем данных - В отличие от HDFS, облачное хранилище не требует регулярного обслуживания, такого как проверка файловой системы, обновление или откат к предыдущей версиифайловая система и т. д.

  • Быстрый запуск - В HDFS задание MapReduce не может быть запущено, пока NameNode не выйдет из безопасного режима - процесс, который может занять от нескольких секунд до многихминут в зависимости от размера и состояния ваших данных.Облачное хранилище позволяет начать работу сразу после запуска узлов задач, что со временем приведет к значительной экономии средств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...