Я только начал работать с 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.
Должно быть что-то, что мне не хватает!