Задокументированы ли где-нибудь артефакты сборки Apache Hadoop?

Я только начал работать с Apache Hadoop, поэтому моя первая цель — запустить приложение «hello world». Первой задачей всегда является настройка среды разработки и возможность компилировать код. В частности, я пытаюсь скомпилировать найденные классы здесь. Эти файлы представляют собой простое задание MapReduce как часть книги по Hadoop.

Автор книги использовал hadoop-client в качестве зависимости (источник), но так как существует так много артефактов, к которым я еще вернусь, мне интересно, нельзя ли использовать другую зависимость. Я всегда пытаюсь «импортировать» или зависеть только от самого минимального набора артефактов и типов.

Автор книги (пока) не затронул тему, какие артефакты раздает Hadoop, почему я буду использовать тот или иной. Веб-сайт Hadoop и остальная часть Интернета, похоже, тоже не обращают внимания на эту маленькую «деталь». Некоторые потоки SO касались этого раньше (см. this и это), на которые есть ответы с мнениями о том, какой артефакт "следует" поставить в качестве зависимости, чтобы получить конкретный рассматриваемый код для компиляции.

Это не мой вопрос. Компилировать мой код довольно "легко" и уже достигнуто. Я пытаюсь выяснить, какие артефакты существуют, какие из них я должен использовать, когда. Откуда мне знать, что нужно перейти от типа Java A к зависимости двоичного артефакта B? Самое главное, где все это задокументировано?

Для начала, какие артефакты сборки существуют?

Что ж, согласно этой страницы вот такие:

hadoop-client
hadoop-client-api
hadoop-client-minicluster
hadoop-client-runtime
hadoop-hdfs-client
hasoop-hdfs-native-client
hadoop- mapreduce-client-app
hadoop-mapreduce-client-common
hadoop-mapreduce-client-core
hasoop-mapreduce-client-jobclient
hadoop-mapreduce-client-nativetask
hadoop- пряжа-клиент

Но согласно JCenter, существует еще около пяти миллионов вещей. В частности, около четырех миллионов девятисот девяноста девяти тысяч девятисот девяноста девяти из них содержит слово «клиент». Сильно запутанно!

Отработав список из Hadoop, я мог просто протестировать, что работает, а что нет. Чтобы получить все импорты, используемые в классах, предоставленных моей книгой, все работало следующим образом:

hadoop-client
hadoop-client-api
hadoop-client-minicluster
hadoop-client-runtime
hadoop-mapreduce-client-app
hadoop-mapreduce-client-nativetask

Те, что я пропустил, не работали в разной степени. Некоторые не могли разрешить весь импорт, некоторые могли разрешить только его часть.

Моя личная ставка здесь - если я хочу зависеть от как можно меньшего количества дерьма, это использовать hadoop-mapreduce-client-app. Но меня чертовски раздражает необходимость прибегать к этой войне с гориллами только для того, чтобы заставить работать самую обыденную часть приложения «привет, мир». Я не хочу знать, сколько слез я пролью в будущем, когда действительно запутаюсь в Hadoop.

Должно быть что-то, что мне не хватает!


person Martin Andersson    schedule 23.11.2018    source источник


Ответы (1)


Я предлагаю вам просто использовать Maven/Gradle для транзитивного извлечения всего, что вам нужно.

Если все, что вам нужно, это зависимости MapReduce, это сработало хорошо для меня в Gradle

implementation group: 'org.apache.hadoop', name: 'hadoop-client', version: "2.8.5"

Это агрегатор POM, который имеет Compile Зависимости (прокрутите вниз) от нескольких других библиотек.

person OneCricketeer    schedule 23.11.2018