Это программа Java для создания инвертированного индекса слов, встречающихся в большом наборе документов, извлеченных с веб -страниц с использованием Hadoop MapReduce и Google DataProc.
В качестве нашего набора данных мы используем подмножество из 74 файлов из 408 файлов (текст, извлеченный из HTML -тегов), полученных из проекта Webbase Stanford, который доступен здесь. Он был получен из веб -полки, сделанного в феврале 2007 года. Это одна из крупнейших коллекций, составляющих более 100 миллионов веб -страниц с более чем 50 000 веб -сайтов. Эта версия уже была очищена.
В этом проекте мы сначала настроили образец кластер Hadoop с использованием локального (автономного) режима, а затем реализуем фактический проект в полностью распределенном режиме в Google DataProc на фактическом наборе данных.
Нам нужно настроить проект на GNU/Linux, поскольку он является поддерживаемой разработкой и производственной платформой для Hadoop. Чтобы получить распространение Hadoop, загрузите недавний стабильный релиз из одного из Apache Download Mirrors. Обратите внимание, что этот проект был развернут и протестирован с использованием hadoop-3.1.1 . Распаковать загруженную дистрибуцию Hadoop. В папке распределения отредактируйте файл etc/hadoop/hadoop-env.sh чтобы определить параметры переменной среды следующим образом:
# add these line to the hadoop-env.sh or set them in terminal
export JAVA_HOME=/usr/java/latest
export PATH= ${JAVA_HOME} /bin: ${PATH}
export HADOOP_CLASSPATH= ${JAVA_HOME} /lib/tools.jarЗатем попробуйте следующую команду:
$ bin/hadoopЭто должно отображать документацию по использованию для сценария Hadoop. Теперь вы готовы запустить свой кластер Hadoop в автономном режиме.
Это простое задание Hadoop получает два текстовых файла из папки «Вход» в качестве аргументов карт.
# file01
5722018411 Hello World Bye World # file02
6722018415 Hello Hadoop Goodbye HadoopИ, отправив работу Hadoop и применяя шаг по снижению, он генерирует инвертированный индекс, как показано ниже:
bye 5722018411:1
goodbye 6722018415:1
hadoop 6722018415:2
hello 5722018411:1 6722018415:1
world 5722018411:2 Чтобы отправить работу Hadoop, реализация Madreduce должна быть упакована в качестве файла jar . Для этого скопируют файл InvertedIndex.java этого проекта в корневую папку Hadoop, и пока вы все еще выполните следующие команды для компиляции InvertedIndex.java и создания файла jar .
$ bin/hadoop com.sun.tools.javac.Main InvertedIndex.java
$ jar cf invertedindex.jar InvertedIndex * .class Скопируйте input/file01 и input/file02 этого проекта и поместите их в папку input папки раздачи Hadoop. Пока вы все еще там, запустите следующую команду, чтобы отправить задание, получите входные файлы из input папки, генерируйте инвертированный индекс и сохраните его вывод в output папке:
$ bin/hadoop jar invertedindex.jar InvertedIndex input outputИ, наконец, чтобы увидеть вывод, запустите ниже команду:
$ bin/hadoop dfs -cat output/part-r-00000 В этом разделе мы создаем кластер с 3 рабочими узлами в Google DataProc и запускаем задание invertedindex.jar на фактическом наборе данных.
Сначала нам нужна учетная запись на платформе Google Cloud. Вы можете подписаться на пробную версию с бесплатными кредитами в размере 300 долларов, если у вас его еще нет.
В консоли Cloud Google либо создайте новый проект, либо выберите существующий. Для этого упражнения мы будем использовать DataProc. Используя DataProc, мы можем быстро создать кластер вычисленных экземпляров, работающих на Hadoop. Альтернативой DataProc будет индивидуальная настройка каждого вычислительного узла, установить Hadoop на него, настраивать HDF, настройку основного узла и т. Д. DataProc автоматизирует этот изнурительный процесс для нас.
В Google Cloud Consol выберите DataProc из списка навигации слева. Если это первый раз, когда вы используете DataProc, вам может сначала включить API DataProc. Нажатие «Создать кластер» перенесет вас в раздел конфигурации кластера. Дайте любое уникальное имя своему кластеру и выберите желаемую зону. Вам нужно создать мастер и 3 рабочих узла. Выберите процессоры конфигурации по умолчанию (N1-Standard-4 4VCPU 15 ГБ памяти) для мастера и каждого члена и уменьшите хранилище до 32 ГБ Измените количество рабочих узлов на 3. Оставьте все остальное по умолчанию и нажмите «Создать».
Теперь, когда кластер настроен, нам придется настраивать его немного, прежде чем мы сможем запустить задание на нем. Выберите только кластер, который вы только что создали из списка кластеров в разделе Cloud DataProc на вашей консоли. Перейдите на вкладку экземпляров VM и нажмите кнопку SSH рядом с экземпляром с главной ролью.
Нажатие на кнопку SSH доставит вас к интерфейсу командной строки (CLI), например, XTerm или Terminal. Все команды в следующих шагах должны быть введены в CLI. На HDFS нет домашнего каталога для текущего пользователя, который нам придется настроить это, прежде чем продолжить. (Чтобы узнать имя вашего пользователя, запустите whoami )
$ hadoop fs -mkdir -p /user/ < your username here > JAVA_HOME уже настроена, и нам не нужно снова его устанавливать.
Обратите внимание, что этот шаг должен быть выполнен каждый раз, когда вы открываете новый терминал SSH. Для устранения этого шага вы также можете настроить этот JAVA_HOME , PATH и HADOOP_CLASSPATH в etc/hadoop/hadoop-env.sh .
$ export PATH= ${JAVA_HOME} /bin: ${PATH}
$ export HADOOP_CLASSPATH= ${JAVA_HOME} /lib/tools.jarТеперь беги:
$ hadoop fs -lsЕсли нет ошибки, это подразумевает, что ваш кластер был успешно настроен. Если вы столкнетесь с ошибкой, это, скорее всего, из -за отсутствующей переменной среды или пользовательского домашнего каталога неправильно настроена.
Чтобы убедиться, что переменные среды установлены, запустите команду env .
Примечание . Пожалуйста, отключите счет за кластер, когда вы не используете его. Оставить его запуска будет стоить дополнительных кредитов.
Загрузите набор данных по этой ссылке и раскрипируйте содержимое. Вы найдете две папки внутри «Разработка» и «Полные данные». Данные «Разработка» могут использоваться в целях разработки и тестирования.
Нажмите «DataProc» в меню левой навигации. Затем найдите адрес по умолчанию ведра Google Cloud Storage для вашего кластера.
Перейдите в раздел хранения в левой навигационной панели и выберите ведро по умолчанию вашего кластера из списка ведер. Нажмите на кнопку Upload Folder и загрузите папки devdata и fulldata по отдельности.
Теперь мы готовы отправить задание Hadoop, чтобы запустить нашу реализацию MapReduce на фактических данных. Используйте команду SSH или nano / vi для копирования или создания InvertedIndex.java на главном кластере.
Запустите следующую команду, чтобы создать файл jar :
$ hadoop com.sun.tools.javac.Main InvertedIndex.java
$ jar cf invertedindex.jar InvertedIndex * .classТеперь у вас есть файл JAR для вашей работы. Вам нужно поместить этот файл JAR в облачное ведро по умолчанию вашего кластера. Просто создайте папку под названием JAR на ваше ведро и загрузите ее в эту папку. Если вы создали свой файл JAR на самом мастер -узле кластера, используйте следующие команды, чтобы скопировать его в папку JAR.
$ hadoop fs -copyFromLocal ./invertedindex.jar
$ hadoop fs -cp ./invertedindex.jar gs://dataproc-69070.../JAR gs://dataproc-69070... Часть-это ведро по умолчанию вашего кластера. Это должно быть приготовлено GS: //, чтобы сказать среде Hadoop, что это ведро, а не обычное место в файловой системе.
Перейдите в раздел «задания» в левой навигационной панели страницы DataProc и нажмите «Отправить задание». Заполните параметры задания следующим образом:
gs:///dataproc-69070.../JAR/invertedindex.jar .gs:///dataproc-69070.../fulldata .gs:///dataproc-69070.../fulloutput . Папка создается во время выполнения. Вы получите ошибку, если дадите имя существующей папки.Теперь отправьте работу. Вы можете увидеть журнал во время работы.
ПРИМЕЧАНИЕ . Если вы столкнетесь Java.lang.Interrupted Exception Вы можете безопасно игнорировать его. Ваша работа все равно будет выполняться.
Выходные файлы будут сохранены в выводной папке на ведре. Если вы откроете эту папку, вы заметите, что инвентарный индекс находится в нескольких сегментах. (Удалить файл _success в папке перед Mergin все выходные файлы). Чтобы объединить файлы и создать окончательный текстовый вывод. Запустите следующие команды:
$ hadoop fs -getmerge gs://dataproc-69070.../fulloutput ./output.txt
$ hadoop fs -copyFromLocal ./output.txt
$ hadoop fs -cp ./output.txt gs://dataproc-69070.../output.txt Теперь вы успешно создали инвертированный индекс всего набора данных. Вы можете использовать grep , чтобы увидеть индексные записи для любого апецифического слова:
$ grep -w ' ^peace ' output.txt Если вы хотите снова переполнить и снова отправить новую работу, вы можете удалить файлы .jar , .class , .java и Hadoop, используя приведенную ниже команду.
$ hadoop fs -rm ./wordcount.jar ./output.txt WordCount * .class
$ hadoop fs -rm gs://dataproc-69070.../JAR/wordcount.jar ; gs://dataproc-69070.../output.txt
$ hadoop fs -rm gs://dataproc-69070.../fulloutput/ *
$ hadoop fs -rmdir gs://dataproc-69070.../fulloutput
Эта работа лицензирована по международной лицензии Creative Commons Attribution 4.0.