Вы можете использовать простой пример, чтобы проиллюстрировать, что такое MapReduce:
Мы хотим подсчитать количество раз каждое слово появляется в большом файле. Потому что файл слишком большой. Мы делим этот файл на небольшие файлы, а затем располагаем несколькими людьми для подсчета. Этот процесс «карта». Затем объединяйте числа, подсчитанные каждым человеком, и это «уменьшить».
Если вы выполняете приведенный выше пример в MapReduce, вам необходимо создать задание задания, которое делит файл на несколько независимых блоков данных и распределяет его в разных узлах машины. Затем обработайте его полностью параллельно через задачи карты, разбросанные в разные узлы. MapReduce собирает выходные линии карты, а затем отправит выход результата, чтобы уменьшить для следующего этапа обработки.
Для конкретного процесса выполнения задачи будет проведен процесс, который называется «JobTracker», ответственный за координацию всех задач в процессе выполнения MapReduce. Несколько процессов TaskTracker используются для выполнения отдельных задач карты и сообщать о выполнении задачи в JobTracker в любое время. Если TaskTracker сообщает о задаче или не сообщает о своей собственной задаче в течение длительного времени, JobTracker начнет другого TaskTracker, чтобы повторно выполнить отдельную задачу карты.
(1) Создать связанный проект Maven в рамках Eclipse, полагаясь на пакет JAR следующим образом (вы также можете обратиться к конфигурации POM проекта Hadoop-Mapreduce-Examples в пакете исходного кода Hadoop)
Примечание. Чтобы настроить плагин Maven Maven-Jar-Plugin и указать Mainclass
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId> <version>2.5.2</version> </dependency> <dependency> <groupId> org.apache.hadoop </GroupId> <ArtifactId> hadoop-common </artifactId> <serse> 2.5.2 </version> </dependency> </depertive> <buld> <blicins> <plugin> <groupid> org.apache.maven.plugins </artifactid> <artifactid> maven-prugin. <manifest> <biepclass> com.xxx.demo.hadoop.wordcount.wordcount </mainclass> </manifest> </archive> </configuration> </placin> </plugins> </build>
(2) Согласно механизму операции MapReduce, задание должна написать как минимум три класса, чтобы завершить три вещи: логика карты, уменьшить логику и планирование заданий.
Код карты может наследовать org.apache.hadoop.mapreduce.mapper Class
Public Static Class Tokenizermapper Extends Mapper <объект, текст, текст, Intwrable> {private final Static intwraite One = new Intwrable (1); Приватный текстовый слово = new Text (); // Поскольку в этом примере не используется параметр ключа, тип ключа просто указан как объект public void map (ключ объекта, значение текста, контекст контекста), выбросы IOException, прерывание {stringTokenizer itr = new StringTokenizer (value.toString ()); while (itr.hasmoretokens ()) {word.set (itr.nexttoken ()); context.write (слово, один); }}}Код уменьшения может наследовать org.apache.hadoop.mapreduce.reducer Class
Public Class Intsumredurecer расширяет Reducer <текст, Intwrable, Text, Intwrable> {Private Intwrable Result = new Intwraite (); public void уменьшить (текстовый ключ, итерабильный <Intwrable> Значения, контекст контекста) бросает ioException, прерывание Extexception {int sum = 0; for (intwrable al: values) {sum += val.get (); } result.set (sum); context.write (ключ, результат); }}Напишите основной метод планирования заданий
public static void main (string [] args) выбрасывает исключение {configuration conf = new Configuration (); Job job = job.getinstance (conf, "count"); job.setjarbyclass (wordcount.class); job.setmapperclass (tokenizermapper.class); job.setCombinerclass (intsumreducer.class); job.setreducerclass (intsumreducer.class); job.setOutputKeyClass (text.class); job.setOutputValueClass (Intwriteble.class); FileInputFormat.AddInputPath (job, новый путь (args [0])); FileOutputFormat.setOutPutPath (abob, новый путь (args [1])); job.waitforcompletion (true); //System.exit(job.waitforcomplotion(true)? 0: 1); }Выполните установку MVN, чтобы ввести проект в файл JAR и загрузить его в среду кластера Linux. Используйте команду HDFS DFS -MKDIR, чтобы создать соответствующую команду в файловой системе HDFS. Используйте HDFS DFS -Put, чтобы загрузить файлы данных, которые необходимо обработать в систему HDFS. Пример: hdfs dfs -put $ {linux_path/data file} $ {hdfs_path}
Выполните команду в среде кластера: hadoop jar $ {linux_path}/swordcount.jar $ {hdfs_input_path} $ {hdfs_output_path}
HDFS DFS -CAT $ {HDFS_OUTPUT_PATH}/Имя выходного файла
Приведенный выше метод запускается в локальном режиме, когда среда кластера Hadoop не запускается. В настоящее время ни HDF, ни пряжу. Ниже приведена работа, которую вам нужно сделать при выполнении задания MapReduce в псевдо-распределенном режиме. Во -первых, выдержать шаги, перечисленные на официальном сайте:
Настройте имя хоста
# vi /etc/sysconfig/network
Например:
Networking = yeshostname = Mastervi /и т. Д. /Хост
Заполните следующий контент
127.0.0.1 localhost
Настройка SSH без взаимосвязанности пароля
ssh-keygen -t rsa
# cat?~/.ssh/id_rsa.pub?>>?~/.ssh/authorized_keys
Настройте файл Core-site.xml (расположенный по адресу $ {Hadoop_home}/etc/hadoop/
<figontureture> <property> <mame> fs.defaultfs </name> <dather> hdfs: // localhost: 9000 </value> </properation> </configuration>
Настройка файла hdfs-site.xml
<Конфигурация> <Property> <may> dfs.Replication </name> <dall> 1 </value> </property> </configuration>
Следующая команда может запустить задание MapReduce в отдельном режиме псевдо-распределения
1. Форматив файловая система:
$ bin/hdfs namenode -format
2. Начните с демоном Namenode и Datanode Daemon:
$ sbin/start-dfs.sh
3. Вывод журнала Daemon Daemon записывается в каталог $ hadoop_log_dir (по умолчанию $ hadoop_home/logs).4. Броуйте веб -интерфейс для Namenode; По умолчанию он доступен по адресу:
Namenode - http: // localhost: 50070/
Сделайте каталоги HDFS, необходимые для выполнения заданий MapReduce:
$ bin /hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir/user/<username>
5.copy входные файлы в распределенную файловую систему:
$ bin/hdfs dfs -put и т. Д./Hadoop вход
6. Разберите некоторые из приведенных примеров:
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar грип-вывод 'DFS [Az.]+'
7. Экспонируйте выходные файлы:
Скопируйте выходные файлы из распределенной файловой системы в локальную файловую систему и проверьте их:$ bin/hdfs DFS -Get Вывод вывода
$ cat output/*
илиПросмотреть выходные файлы в распределенной файловой системе:
$ bin/hdfs dfs -cat output/*
8. Когда вы закончите, остановите демоны с:
$ sbin/stop-dfs.sh
Выше приведено все содержание кода экземпляра WordCount в этой статье, я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!