You are on page 1of 12

Комп’ютерний практикум №3

ПРОГРАМНА ПЛАТФОРМА APACHEHADOOP. ВИКОРИСТАННЯ


ШАБЛОНІВ ПРОЕКТУВАННЯ MAPREDUCE. АЛГОРИТМ
КЛАСТЕРИЗАЦІЇ

Мета роботи –створення моделі кластеризації даних за допомогою


технології MapReduce на основі програмної платформи ApacheHadoop.

ТЕОРЕТИЧНІ ВІДОМОСТІ

MapReduce – найбільш відома технологія паралельної обробки даних


великих розмірностей. Особливістю є розділення логіки програми на підзадачі
розбиття даних та об’єднання проміжних результатів з можливістю
необмеженого горизонтального масштабування шляхом додавання
обчислювальних вузлів до кластеру [4].
Дана технологія дозволяє ефективно вирішувати різноманітні задачі аналізу
даних, але не виправдана для задач пошуку відповідно до запиту. Схема
функціонування MapReduce задачі показана на рисунку 3.1
Рисунок 3.1 – Схема функціонування MapReduce

Робота MapReduce складається з двох кроків: розділення та згортання. На


кроці map виконується попередня обробка вхідних даних. Для цього один з
комп’ютерів отримує вхідні дані задачі, розділяє їх на частини і передає іншим
комп’ютерам для обробки. На кроці reduce виконується згортання попередньо
оброблених даних. Головний вузол отримує відповіді від робочих вузлів і на їх
основі формує результат – розв’язок задачі.

Найбільш успішними реалізаціями підходу MapReduce є:

ApacheHadoop — вільна програмна платформа для організації


розподіленої обробки великих обсягів даних (що вимірюється у петабайтах) з
використанням технології MapReduce, при якій завдання ділиться на багато
дрібніших фрагментів, кожен з яких може бути запущений на окремому вузлі
кластера. До складу Hadoop входить реалізація розподіленої файлової системи
HadoopDistributedFilesystem (HDFS), яка автоматично забезпечує резервування
даних і оптимізована для роботи MapReduce-задач у розподіленому середовищі.
Для спрощення доступу до даних в сховищі Hadoop розроблена база даних
HBase та SQL-подібна мова Hive, яка є свого роду SQL для MapReduce і запити
якої можуть бути розпаралелені і оброблені кількома Hadoop-платформами.

Приклад функціонування Apache Hadoop представлений на рисунку3.2.


Рисунок 3.2 – Схема функціонування Apache Hadoop

Алгоритм кластерізації. Для вирішення задачі кластеризації


застосовуються найбільш розповсюдженні три алгоритми кластеризації, а саме:
кластеризація методом к-середніх, ієрархічна кластеризація та визначення
співтовариств у графах (GraphCommunityDetection) [6].На рисунку 3.3 наведено
три «чітких» кластери при k = 3.

Рисунок 3.3 - Три «чіткі» кластери при k = 3


В Додатку В надано приклад вирішення задачі кластеризації за
допомогою кластеризації методом k-середніх, оскільки даний алгоритм можна
розпаралелити та виконати з використанням шаблону MapReduce.
Кластеризація методом k-середніх(k-means clustering) — достатьно
відомийметод кластеризації — впорядкування множини об'єктів в
порівнянооднорідній групі. Винайдений в 1950-х роках математиком
ГуґоШтайнгаузом і майже одночасно Стюартом Ллойдом.
Мета методу — розділити n спостережень на k кластерів, так щоб кожне
спостереження належало до кластеру з найближчим до нього середнім
значенням. Метод базується на мінімізації суми квадратів відстаней між
кожним спостереженням та центром його кластеру.
Алгоритм методу «кластеризація за схемою к-середніх»:
1. Початок.
2. Вибрати k інформаційних точок як центри кластерів поки
незавершиться процес зміни центрів кластерів.
3. Зіставити кожну інформаційну точку з кластером, відстань до
центраякої мінімальна.
4. Переконатися, що в кожному кластері міститься хоча б одна точка.Для
цього кожний порожній кластер потрібно доповнити довільноюточкою, що
розташована «далеко» від центру кластера.
5. Центр кожного кластеру замінити середнім від елементів кластера.
6. Закінчення.

ПІДГОТОВКА ДО ВИКОНАННЯ КОМП’ЮТЕРНОГО


ПРАКТИКУМУ №3

Перед виконанням комп’ютерного практикуму №3 рекомендується


ознайомитись з основними технологіями паралельної обробки даних великих
розмірностей, що розглядається в курсі лекцій.
ВИМОГИ ДО ОФОРМЛЕННЯ ЗВІТУ

Звіт з комп’ютерного практикуму №3 обов’язково повинен містити


наступну інформацію:
- назва комп’ютерного практикуму;
- мета роботи;
- постановка завдання;
- хід роботи;
- лістинг програми;
- висновки.

ЗАВДАННЯ ДЛЯ ЗАХИСТУ КОМП’ЮТЕНОГО ПРАКТИКУМУ №3

Завдання.
1. Постановка задачі кластеризації для всіх алгоритмів полягає в
наступному:

Дано: X – простір об'єктів;


Xl={xi}l i=1 – вибірка елементів;
d: X × X -> [0; ∞) – функція відстані між об‘єктами.
Знайти: Y – множину кластерів і відображення а: Х → Y – алгоритм
кластеризації такий, що кожен кластер складається з близьких між собою
об‘єктів, а об‘єкти різних кластерів суттєво відрізняються.

2. Створити модель кластеризації даних за допомогою технології


MapReduce.
Приклад виконання комп’ютерного практикуму
№3, а саме наведено хід роботи та лістинг програми
на мові програмування Python.
ПРОГРАМНА ПЛАТФОРМА APACHEHADOOP. ВИКОРИСТАННЯ
ШАБЛОНІВ ПРОЕКТУВАННЯ MAPREDUCE. АЛГОРИТМ
КЛАСТЕРИЗАЦІЇ МЕТОДОМ K-СЕРЕДНІХ

Хід роботи:
Задача підрахунку слів. Задачапідрахунку слів вирішується з
використанням технології MapReduce на локальному кластері Hadoop,
розгорнутому за допомогою Docker`a, як приклад моделі кластеризації. Мова
програмування Python.
ВстановленнякластеруHadoop, використовуючи Docker.
Архітектура базується на основі master-slave, де master-NameNode, slave-
DataNodes_N. В даному випадку необхідно створити конфігурацію 1 master 3
slave.
Копіювання локальнихmapper.py, reducer.pyв custom_hadoop_hdfs-
namenode_1

Контейнер custom_hadoop_hdfs-namenode_1

Вхідні дані:

Створення папки с віхдними даними.


Програма MapReduce отримує доступ до файлів із розподіленої файлової
системи Hadoop (HDFS).
Перенесення вхідного каталогу і файлыв в HDFS:

Запуск програми MapReduce.

Вихідний файл (результат) part-r-00000:


Лістинг програми

mapper.py
#!/usr/bin/envpython
"""mapper.py"""

import sys

# input comes from STDIN (standard input)


for line in sys.stdin:
# remove leading and trailing whitespace
line = line.strip()
# split the line into
words words = line.split()
# increase counters
for word in words:
# write the results to STDOUT (standard output);
# what we output here will be the input for the
# Reduce step, i.e. the input for reducer.py
#
# tab-delimited; the trivial word count is 1
print ('%s\t%s' % (word, 1))

reducer.py

#!/usr/bin/env python
"""reducer.py"""

from operator import


itemgetter import sys

current_word = None
current_count = 0
word = None

# input comes from


STDIN for line in
sys.stdin:
# remove leading and trailing whitespace
line = line.strip()

# parse the input we got from mapper.py


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

# convert count (currently a string) to int


try:
count = int(count)
except ValueError:
# count was not a number, so
silently # ignore/discard this line
continue

# this IF-switch only works because Hadoop sorts map output


# by key (here: word) before it is passed to the reducer
if current_word == word:
current_count += count
else:
if current_word:
# write result to STDOUT
print ('%s\t%s' % (current_word,
current_count)) current_count =
count
current_word = word

# do not forget to output the last word if


needed! if current_word == word:
print ('%s\t%s' % (current_word, current_count))

You might also like