Главная страница
Навигация по странице:

  • Загрузка файлов в HDFS (распределенная файловая система Hadoop)

  • Проверка и разбор кода

  • Выполнение примера MapReduce

  • Запуск примеров MapReduce. Лабораторная работа 2. Лабораторная работа 2 Запуск примеров MapReduce. Python&Hadoop


    Скачать 71.67 Kb.
    НазваниеЛабораторная работа 2 Запуск примеров MapReduce. Python&Hadoop
    АнкорЗапуск примеров MapReduce
    Дата18.05.2023
    Размер71.67 Kb.
    Формат файлаdocx
    Имя файлаЛабораторная работа 2.docx
    ТипЛабораторная работа
    #1140361


    Лабораторная работа №2

    Запуск примеров MapReduce. Python&Hadoop

    Попробуем выполнить пример MapReduce с использованием Python. Это типичный пример подсчета слов в файле.

    Прежде всего, нам нужна среда Hadoop. Поскольку он у нас есть, нам просто нужно перезапустить его.

    $ docker start -i

    Загрузка файлов в HDFS (распределенная файловая система Hadoop)

    Прежде всего, внутри нашей среды Hadoop мы должны перейти к каталогу examples.

    hduser@localhost:

    $ cd examples

    Теперь скопируем файлы txt из локальной файловой системы в HDFS, используя следующие команды.

    hduser@localhost:/examples$ hdfs dfs -put *.txt input

    Для создания входного каталога в распределенной файловой системе Hadoop, следует выполнить следующие команды:

    hduser@localhost:/examples$ hdfs dfs -mkdir /user

    hduser@localhost:/examples$ hdfs dfs -mkdir /user/

    hduser

    hduser@localhost:/examples$ hdfs dfs -mkdir input

    Мы можем проверить файлы, загруженные в распределенную файловую систему, используя.

    hduser@localhost:/examples$ hdfs dfs -ls input Found 4 items

    -rw-r--r-- 1 hduser supergroup 1586488 2020-08-09 00:29 input/4300-0.txt

    -rw-r--r-- 1 hduser supergroup 1428841 2020-08-09 00:29 input/5000-8.txt

    -rw-r--r-- 1 hduser supergroup 15929 2020-08-09 00:29 input/data-text.txt

    -rw-r--r-- 1 hduser supergroup 674570 2020-08-09 00:29 input/pg20417.txt

    Проверка и разбор кода

    Mapper будет считывать строки из stdin (стандартный ввод). Hadoop отправит поток данных, считанных из HDFS, в mapper, используя стандартный вывод (stdout). Картограф прочитает каждую строку, отправленную через стандартный интерфейс, очистив все символы, отличные от буквенно-цифровых, и создав список Python со словами (split). Наконец, он создаст строку “word \ t1”, это пара (work,1), результат снова отправляется в поток данных с использованием стандартного вывода (print).

    #!/usr/bin/env python
    import sysimport re
    for line in sys.stdin: line = re.sub(r'\W+',' ',line.strip()) words = line.split()
    for word in words: print('{}\t{}'.format(word,1))

    Редуктор будет считывать каждый ввод (строку) из stdin и будет считать каждое повторяющееся слово (увеличивая счетчик для этого слова) и отправит результат в стандартный вывод. Процесс будет выполняться итеративным способом до тех пор, пока в stdin не останется больше входных данных.

    #!/usr/bin/env python
    import sys
    current_word = None

    current_count = 0

    word = None
    for line in sys.stdin:

    line = line.strip()

    word, count = line.split('\t',1)
    try:

    count = int(count)

    except ValueError:

    continue
    if current_word == word:

    current_count += count

    else:

    if current_word: print('{}\t{}'.format(current_word,current_count))
    current_word = word

    current_count = count

    if current_word == word:

    print('{}\t{}'.format(current_word,current_count))

    Выполнение примера MapReduce

    На диаграмме (рис. 1) показано, как MapReduce будет работать при подсчете слов, прочитанных из текстовых файлов. Все текстовые файлы считываются из HDFS / input и помещаются в поток стандартного вывода для обработки mapper и reducer, чтобы, наконец, результаты были записаны в каталог HDFS с именем /output.

    Следующая команда выполнит процесс MapReduce с использованием текстовых файлов, расположенных в /user /hduser/input (HDFS), mapper.py, и reducer.py . Результат будет записан в распределенную файловую систему /user/hduser/output.

    hduser@localhost:/examples$ hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-

    3.3.0.jar -картограф mapper.py -редуктор reducer.py

    -ввод /user/hduser/input/*.txt –вывод

    /user/hduser/output



    Рисунок 1

    Чтобы проверить результаты, следует выполнить.

    hduser@localhost:/examples$ hdfs dfs -ls output

    Found 2 items

    -rw-r--r-- 1 hduser supergroup 0 2020-08-09 00:31 output/_SUCCESS

    -rw-r--r-- 1 hduser supergroup 530859 2020-08-09 00:31 output/part-00000

    Чтобы показать результаты, мы будем использовать команду cat.

    hduser@localhost:/examples$ hdfs dfs -cat output/*

    0 64

    00 2

    000 116

    001 1

    01 1

    02 4
    Abulafia 1

    Abulfeda 1

    Academie 3

    Academy 4

    Accademia 7

    Accademia_ 1

    Accep 1

    .......

    ......

    ....

    zoophyte 2

    zoophytes 2

    zouave 1

    zrads 3

    zum 1

    zur 1

    zvith 1

    zwanzig 1

    zweite 1

    Это простой способ (на простом примере) понять, как работает MapReduce.



    написать администратору сайта