Введение
В волшебном пустыневом королевстве Xara мудрый и доброжелательный король Амир решил использовать силу огромных данных, рассеянных по всей его владению. Он призвал своих самых опытных магических мастеров данных разработать систему, которая могла бы собирать, обрабатывать и анализировать данные королевства, раскрывая инсайты, которые помогут принимать решения и обеспечивать процветание для всех.
Целью было создание надежного и масштабируемого платформы для данных, которая могла бы интегрироваться с Hadoop Distributed File System (HDFS) и использовать силу MapReduce для эффективной обработки данных. Эта платформа позволяла бы королевству анализировать данные из различных источников, таких как торговые записи, урожайность сельскохозяйственных культур и переписи населения,赋能 королю Амиру принимать обоснованные решения для благосостояния его подданных.
Исследование экосистемы Hadoop
На этом этапе вы познакомитесь с экосистемой Hadoop и ее основными компонентами: HDFS и MapReduce.
Hadoop - это open-source фреймворк для распределенного хранения и обработки больших наборов данных на кластерах из обычного оборудования. Он состоит из двух основных компонентов:
Hadoop Distributed File System (HDFS): Распределенная файловая система, предназначенная для хранения больших файлов на нескольких машинах, обеспечивающая отказоустойчивость и высокопроизводительное доступ к данным.
MapReduce: Программная модель и программный фреймворк для написания приложений, которые обрабатывают большие объемы данных параллельно на кластере машин.
Для исследования экосистемы Hadoop вы можете использовать следующие команды в терминале:
Во - первых, убедитесь, что вы вошли под пользователем hadoop, выполнив следующую команду в терминале:
su - hadoop
Просмотрите директории и файлы в HDFS:
hdfs dfs -ls /
Создайте новую директорию в HDFS:
hdfs dfs -mkdir -p /home/hadoop/input
Скопируйте локальный файл в HDFS:
hdfs dfs -put /home/hadoop/local/file.txt /home/hadoop/input
Эти команды демонстрируют, как взаимодействовать с HDFS, перечисляя его содержимое, создавая директории и копируя файлы из локальной файловой системы.
Команда hdfs dfs используется для взаимодействия с Hadoop Distributed File System (HDFS). Параметр -ls выводит содержимое директории в HDFS, а -mkdir создает новую директорию. Параметр -put копирует локальный файл в HDFS.
Запуск задачи MapReduce
На этом этапе вы узнаете, как запускать задачу MapReduce на данных, хранящихся в HDFS, используя мощь параллельной обработки для эффективного анализа больших наборов данных.
MapReduce - это модель программирования для параллельной обработки больших наборов данных на кластере машин. Она состоит из двух основных этапов:
Map: Входные данные разбиваются на более мелкие части, и каждая часть обрабатывается отдельной задачей, называемой "маппером". Маппер обрабатывает данные и выдает пары ключ-значение.
Reduce: Выход от мапперов сортируется и группируется по ключу, и каждая группа обрабатывается отдельной задачей, называемой "редьюсером". Редьюсер объединяет значения, связанные с каждым ключом, и получает окончательный результат.
Пустим простую задачу MapReduce, которая подсчитывает количество вхождений слов в текстовом файле. Сначала создайте Java-файл с именем WordCount.java с таким содержанием:
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount {
public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true)? 0 : 1);
}
}
Далее скомпилируйте Java-файл:
mkdir ~/wordcount
javac -source 8 -target 8 -classpath $(hadoop classpath) -d ~/wordcount WordCount.java
jar -cvf ~/wordcount.jar -C ~/wordcount.
Наконец, запустите задачу MapReduce:
hadoop jar ~/wordcount.jar WordCount /home/hadoop/input/file.txt /home/hadoop/output
Класс WordCount определяет задачу MapReduce, которая подсчитывает количество вхождений слов в текстовом файле. Класс TokenizerMapper разбивает каждую строку входного текста на токены и выдает пары ключ-значение (слово, 1). Класс IntSumReducer суммирует значения (количества) для каждого слова и выдает окончательные пары (слово, количество).
Java-файл компилируется и упаковывается в JAR-файл, который затем выполняется с помощью команды hadoop jar. Путь к входному файлу (/home/hadoop/input/file.txt) и путь к выходной директории (/home/hadoop/output) передаются в качестве аргументов.
Резюме
В этом лабе вы отправились в путешествие в волшебное пустыневое королевство Xara, где вы помогла королю Амиру использовать силу экосистемы Hadoop для обработки и анализа данных королевства. Вы исследовали основные компоненты Hadoop, включая HDFS для распределенного хранения и MapReduce для параллельной обработки данных.
С помощью практических шагов вы узнали, как взаимодействовать с HDFS, создавать директории и загружать файлы. Также вы приобрели опыт в запуске задачи MapReduce, конкретно приложения для подсчета слов, которое продемонстрировало возможности параллельной обработки Hadoop.
Завершив этот лаб, вы приобрели ценные навыки по интеграции Hadoop с HDFS и MapReduce, оснастившись знаниями для решения реальных задач обработки больших данных. Этот опыт несомненно способствует вашему развитию в качестве магического мастера данных,赋能 вас раскрывать инсайты и принимать решения в различных областях.



