Добавьте `hadoop-cloud` в путь к классам Spark

После недавнего объявления о строгой согласованности S3 при чтении и записи я хотел бы попробовать новые коммиттеры S3A, такие как волшебный.

Согласно документации Spark , нам нужно добавить два пути к классам: BindingParquetOutputCommitter и PathOutputCommitProtocol добавить в этот коммит.

Официальная документация предлагает использовать Spark, построенный с профилем hadoop3.2. Есть ли способ добавить два класса без перекомпиляции Spark? (Я не могу использовать уже собранный Spark по техническим причинам)

Я использую Спарк 3.0.1

Я уже проверил этот ответ, но, к сожалению, OP переключился на коммиттеров S3A с открытым исходным кодом, предоставленных EMR.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
677
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужна версия spark, созданная с помощью модуля -Phadoop-cloud. который добавляет новые классы в spark-hadoop-cloud.jar и добавляет соответствующие зависимости, которые для S3A

hadoop-aws-${the-exact-version-of-hadoop-jars-you-have}.jar
aws-sdk-something-${the-exact-version-that-hadoop-jar-was-built-with}.jar

чтобы вы могли проверить ветку искры, которую вы используете, и выполнить сборку maven только для этого модуля.

mvn -pl hadoop-cloud -Phadoop-cloud -Dhadoop.version=$hadoop-version install -DskipTests

и вы получаете новый JAR-файл spark-hadoop-cloud, который можно использовать с новыми материалами.

  • коммиттеры s3a пришли только с hadoop-3.1
  • мы (я) были заняты выставлением некоторых условий гонки с помощью идентификаторов заданий и «постановочного коммиттера»
  • и, учитывая, что S3 непротиворечив, я бы порекомендовал волшебного коммиттера.

Вы можете протестировать этот материал в автономном режиме Spark, просто выполните минимальную работу по записи данных и убедитесь, что файл _SUCCESS содержит некоторую сводку JSON о задании.

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

ХТН

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

BlueSheepToken 13.12.2020 12:00

см.: github.com/steveloughran/zero-rename-committer/releases.

stevel 15.12.2020 11:47

Если вы выполняете сборку с помощью команды stevel's mvn, вы также должны включить флаг -Phadoop-3.2, чтобы флаг extra-source-dir подхватывался в pom.xml и компилировал классы коммиттера в JAR. Таким образом, полная команда будет mvn -pl hadoop-cloud -Phadoop-cloud -Phadoop-3.2 -Dhadoop.version=$hadoop-version install -DskipTests. См. https://github.com/apache/spark/blob/de351e30a90dd988b133b3d00fa6218bfcaba8b8/hadoop-cloud/pom.xml#L207

Другие вопросы по теме