Магия данных Xara

HadoopHadoopBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В волшебном пустыневом королевстве Xara мудрый и доброжелательный король Амир решил использовать силу огромных данных, рассеянных по всей его владению. Он призвал своих самых опытных магических мастеров данных разработать систему, которая могла бы собирать, обрабатывать и анализировать данные королевства, раскрывая инсайты, которые помогут принимать решения и обеспечивать процветание для всех.

Целью было создание надежного и масштабируемого платформы для данных, которая могла бы интегрироваться с Hadoop Distributed File System (HDFS) и использовать силу MapReduce для эффективной обработки данных. Эта платформа позволяла бы королевству анализировать данные из различных источников, таких как торговые записи, урожайность сельскохозяйственных культур и переписи населения,赋能 королю Амиру принимать обоснованные решения для благосостояния его подданных.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHDFSGroup(["Hadoop HDFS"]) hadoop(("Hadoop")) -.-> hadoop/HadoopMapReduceGroup(["Hadoop MapReduce"]) hadoop(("Hadoop")) -.-> hadoop/HadoopYARNGroup(["Hadoop YARN"]) hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop/HadoopHDFSGroup -.-> hadoop/hdfs_setup("HDFS Setup") hadoop/HadoopHDFSGroup -.-> hadoop/fs_ls("FS Shell ls") hadoop/HadoopHDFSGroup -.-> hadoop/fs_mkdir("FS Shell mkdir") hadoop/HadoopHDFSGroup -.-> hadoop/fs_put("FS Shell copyToLocal/put") hadoop/HadoopMapReduceGroup -.-> hadoop/mappers_reducers("Coding Mappers and Reducers") hadoop/HadoopYARNGroup -.-> hadoop/yarn_jar("Yarn Commands jar") hadoop/HadoopHiveGroup -.-> hadoop/process("Process Control Function") subgraph Lab Skills hadoop/hdfs_setup -.-> lab-288981{{"Магия данных Xara"}} hadoop/fs_ls -.-> lab-288981{{"Магия данных Xara"}} hadoop/fs_mkdir -.-> lab-288981{{"Магия данных Xara"}} hadoop/fs_put -.-> lab-288981{{"Магия данных Xara"}} hadoop/mappers_reducers -.-> lab-288981{{"Магия данных Xara"}} hadoop/yarn_jar -.-> lab-288981{{"Магия данных Xara"}} hadoop/process -.-> lab-288981{{"Магия данных Xara"}} end

Исследование экосистемы Hadoop

На этом этапе вы познакомитесь с экосистемой Hadoop и ее основными компонентами: HDFS и MapReduce.

Hadoop - это open-source фреймворк для распределенного хранения и обработки больших наборов данных на кластерах из обычного оборудования. Он состоит из двух основных компонентов:

  1. Hadoop Distributed File System (HDFS): Распределенная файловая система, предназначенная для хранения больших файлов на нескольких машинах, обеспечивающая отказоустойчивость и высокопроизводительное доступ к данным.

  2. 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 - это модель программирования для параллельной обработки больших наборов данных на кластере машин. Она состоит из двух основных этапов:

  1. Map: Входные данные разбиваются на более мелкие части, и каждая часть обрабатывается отдельной задачей, называемой "маппером". Маппер обрабатывает данные и выдает пары ключ-значение.

  2. 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, оснастившись знаниями для решения реальных задач обработки больших данных. Этот опыт несомненно способствует вашему развитию в качестве магического мастера данных,赋能 вас раскрывать инсайты и принимать решения в различных областях.