Реализация драйвера
В этом шаге мы создадим класс драйвера для настройки и запуска MapReduce задачи.
Сначала создайте Java-файл для класса драйвера:
touch /home/hadoop/WordLengthDriver.java
Затем добавьте следующий код в файл WordLengthDriver.java
:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordLengthDriver {
public static void main(String[] args) throws Exception {
if (args.length!= 2) {
System.err.println("Usage: WordLengthDriver <input> <output>");
System.exit(1);
}
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "Word Length");
job.setJarByClass(WordLengthDriver.class);
job.setMapperClass(WordLengthMapper.class);
job.setReducerClass(WordLengthReducer.class);
job.setOutputKeyClass(CompositeKey.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true)? 0 : 1);
}
}
В вышеприведенном коде мы создаем класс WordLengthDriver
, который является точкой входа для нашей MapReduce задачи. Метод main
принимает два аргумента командной строки: путь к входным данным и путь к выходным данным для задачи.
Внутри метода main
мы создаем новый объект Configuration
и новый объект Job
. Мы настраиваем задачу, устанавливая классы маппера и редьюсера, классы выходных ключей и значений, а также пути к входным и выходным данным.
Наконец, мы отправляем задачу и ждем ее завершения. Если задача завершилась успешно, мы выходим с кодом статуса 0; в противном случае - с кодом статуса 1.
Для запуска задачи вы можете использовать следующую команду:
javac -source 8 -target 8 -classpath "/home/hadoop/:/home/hadoop/hadoop/share/hadoop/common/hadoop-common-3.3.6.jar:/home/hadoop/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-3.3.6.jar:/home/hadoop/hadoop/share/hadoop/common/lib/*" -d /home/hadoop /home/hadoop/WordLengthMapper.java /home/hadoop/CompositeKey.java /home/hadoop/WordLengthReducer.java /home/hadoop/WordLengthDriver.java
jar cvf word-length.jar *.class
hadoop jar word-length.jar WordLengthDriver /input /output
Наконец, мы можем проверить результаты, выполнив следующую команду:
hadoop fs -cat /output/*
Пример вывода:
A:3 Amr
A:6 AADzCv
A:10 AlGyQumgIl
...
h:7 hgQUIhA
h:8 hyrjMGbY, hSElGKux
h:10 hmfHJjCkwB
...
z:6 zkpRCN
z:8 zfMHRbtk
z:9 zXyUuLHma