О.В.Сухорослов "mapreduce"

Post on 05-Dec-2014

5.091 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

О.В.Сухорослов "MapReduce", 06.04.2012, место показа МФТИ, Школа анализа данных (ШАД)

TRANSCRIPT

07 MapReduce

О.В. Сухорослов

oleg.sukhoroslov@gmail.com

06.04.2012

О.В. Сухорослов () 07 MapReduce 06.04.2012 1 / 77

План лекции

Модель программирования MapReduceРеализация GoogleЗнакомство с Apache Hadoop

О.В. Сухорослов () 07 MapReduce 06.04.2012 2 / 77

MapReduce

Модель программирования для описания алгоритмов обработкибольших массивов данныхСреда выполнения для параллельной обработки больших объемовданныхПрограммная реализация (Google, Hadoop, ...)

О.В. Сухорослов () 07 MapReduce 06.04.2012 3 / 77

Феномен Big Data

Коммерческие приложенияWeb

десятки миллиардов страниц, сотни терабайт текстаGoogle MapReduce: 100 TB данных в день (2004), 20 PB (2008)

Социальные сетиFacebook - петабайты пользовательских данных (15 TB/день)

Поведенческие данные пользователей (business intelligence)

Научные приложенияФизика высоких энергий

Большой Адронный Коллайдер - 15 PB/годАстрономия и астрофизика

Large Synoptic Survey Telescope (2015) - 1.28 PB/годБиоинформатика

Секвенирование ДНК, European Bioinformatics Institute - 5 PB(2009)

О.В. Сухорослов () 07 MapReduce 06.04.2012 4 / 77

Наблюдения

Мы можем хранить все больше данныхНо латентность и пропускная способность жестких дисков неуспевают за ростом объема

Современные задачи намного превышают возможности одноймашины

Требуются кластеры из сотен и тысяч машинСтратегия scale out выгоднее стратегии scale up

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

Последовательные чтение и запись данных при обработке гораздоэффективнее случайного доступа

О.В. Сухорослов () 07 MapReduce 06.04.2012 5 / 77

Наблюдения (2)

Отказы становятся нормой10K серверов с MTBF=1000d -> 10 отказов в деньНеобходимы автоматическая обработка и восстановление послеотказов

Традиционные HPC-системы имеют отдельные системы храненияданных

Большие объемы данных эффективнее обрабатывать там же, гдеони хранятся

Разрабатывать приложения для подобных систем на низкомуровне очень сложно

Требуются высокоуровневые модели программирования,скрывающие детали системного уровняТребуются универсальные среды выполнения, масштабируемые ипроверенные на корректность

О.В. Сухорослов () 07 MapReduce 06.04.2012 6 / 77

Web Search

Сбор содержимого Web (crawling)offline, загрузка большого объема данных, выборочное обновление,обнаружение дубликатов

Построение инвертрованного индекса (indexing)offline, периодическое обновление, обработка большого объемаданных, предсказуемая нагрузка

Ранжирование документов для ответа на запрос (retrieval)online, сотни миллисекунд, большое кол-во клиентов, пикинагрузки

О.В. Сухорослов () 07 MapReduce 06.04.2012 7 / 77

Инвертированный индекс

Исходные данные: [(docid , content)...]

Требуемый результат: [(term, [< docid , tf > ...])...]

Этап 1 - Параллельная обработка документов(docid , content)→ [(term1, < docid , tf 1 >), (term2, < docid , tf 2 >)...]

Этап 2 - Параллельная агрегация промежуточных результатов длякаждого терма

(term, [< docid1, tf 1 >,< docid2, tf 2 > ...])→ (term, [< docid , tf > ...])

О.В. Сухорослов () 07 MapReduce 06.04.2012 8 / 77

Подсчет частоты встречаемости слов

Исходные данные: [(docid , content)...]

Требуемый результат: [(term, total_tf )...]

Этап 1 - Параллельная обработка документов(docid , content)→ [(term1, tf 1), (term2, tf 2)...]

Этап 2 - Параллельная агрегация промежуточных результатов длякаждого терма

(term, [tf 1, tf 2, ...])→ (term, total_tf )

О.В. Сухорослов () 07 MapReduce 06.04.2012 9 / 77

Функциональное программирование

О.В. Сухорослов () 07 MapReduce 06.04.2012 10 / 77

Модель программирования MapReduce

Базовой структурой данных являются пары (ключ, значение)

Программа описывается путем определения функций

map : (k1, v1)→ [(k2, v2)]

reduce : (k2, [v2])→ [(k3, v3)]

Между map и reduce происходит группировка и сортировкапромежуточных данных по ключу k2

О.В. Сухорослов () 07 MapReduce 06.04.2012 11 / 77

Пример

О.В. Сухорослов () 07 MapReduce 06.04.2012 12 / 77

Другие примеры

Поиск в текстеmap: (docid , content)→ [(docid , line)]reduce: нет

Группировка и сортировка по ключуmap: (key , record)→ (key , record)reduce: (key , [record ])→ (key , [record ])

Обращение Web-графаmap: (docid , content)→ [(url , docid)]reduce: (url , [docid ])→ (url , [docid ])

Анализ посещаемости сайтаmap: (logid , log)→ [(url , visit_count)]reduce: (url , [visit_count])→ (url , total_count)

Вычисление векторов ключевых слов по сайтамmap: (docid , < url , content >)→ (hostname, doc_term_vector)reduce:(hostname, [doc_term_vector ])→ (hostname, host_term_vector)

О.В. Сухорослов () 07 MapReduce 06.04.2012 13 / 77

Схема вычислений

О.В. Сухорослов () 07 MapReduce 06.04.2012 14 / 77

Инвертированный индекс

О.В. Сухорослов () 07 MapReduce 06.04.2012 15 / 77

Параллелизм по данным

О.В. Сухорослов () 07 MapReduce 06.04.2012 16 / 77

Дополнительные функции

partition : (k2, num_reducers)→ reducer_id

Определяет распределение промежуточных данных междуreduce-процессамиПростейший случай: hash(k2) mod num_reducers

combine : (k2, [v2])→ [(k2′, v2′)]

Осуществляет локальную агрегацию промежуточных данных послеmap() в рамках одного map-процессаДля ассоциативных и коммутативных операций можетиспользоваться reduce()

compare(k2, k2′)→ {−1, 0, 1}Определяет отношение порядка между промежуточными ключами

О.В. Сухорослов () 07 MapReduce 06.04.2012 17 / 77

Детальная схема вычислений

О.В. Сухорослов () 07 MapReduce 06.04.2012 18 / 77

Запуск MapReduce-программы

Конфигурация заданияВходные данные, способ получения (k1,v1)Функции map, reduce, partition, combine, compareМестоположение и формат выходных данныхПараметры запуска (число map- и reduce-заданий...)

Запуск задания: MapReduce.runJob(config)

Остальное берет на себя реализация среды выполнения

О.В. Сухорослов () 07 MapReduce 06.04.2012 19 / 77

Обязанности реализации

Декомпозиция на параллельные подзадачи (map- и reduce-задачи)

Запуск рабочих процессов

Распределение задач по рабочим процессам и балансировканагрузки

Передача данных рабочим процессам (требуется минимизировать)

Синхронизация и передача данных между рабочими процессами

Обработка отказов рабочих процессов

О.В. Сухорослов () 07 MapReduce 06.04.2012 20 / 77

Реализации MapReduce

Распределенная память (кластер)Google MapReduce (C++ / С++, Python, Java)Apache Hadoop (Java / any)Disco (Erlang / Python)Skynet (Ruby)Holumbus-MapReduce (Haskell)FileMap: File-Based Map-ReduceYandex MapReduce (С++ / any)...

Общая память (многоядерные процессоры)QtConcurrent (C++)Phoenix (C, C++)

GPUMars: A MapReduce Framework on Graphics Processors

О.В. Сухорослов () 07 MapReduce 06.04.2012 21 / 77

Инфраструктура Google

Кластеры из дешевых серверовPC-class motherboards, low-end storage/networkingLinux + свое ПОСотни тысяч машинОтказы являются нормой

Распределенная файловая система GFSПоблочное хранение файлов большого размераПоследовательные чтение и запись в потоковом режимеwrite-once-read-manyРепликация, отказоустойчивость

Узлы кластера одновременно отвечают за хранение и обработкуданных

Перемещение вычислений дешевле, чем перемещение данных

ПланировщикРаспределяет ресурсы кластера между приложениями

О.В. Сухорослов () 07 MapReduce 06.04.2012 22 / 77

Google Rack

О.В. Сухорослов () 07 MapReduce 06.04.2012 23 / 77

Google MapReduce

О.В. Сухорослов () 07 MapReduce 06.04.2012 24 / 77

Мастер

Управляет выполнением одного MapReduce-задания

Распределяет задачи между рабочими узлами кластера

Хранит состояния всех задачstatus, workerId

Осуществляет координацию между map- и reduce-задачамиПолучает информацию о файлах с промежуточными данными отmap-процессовПередает эту информацию reducе-процессам

Предоставляет информацию о статусе вычислений черезвстроенный HTTP-сервер

О.В. Сухорослов () 07 MapReduce 06.04.2012 25 / 77

Оптимизации

Локальность данныхНаправлять map-задачи на узлы, хранящие требуемые данные илинаходящиеся рядом

Локальная редукцияВыполнять после map функцию сombine

Совмещение операцийЗагрузка и сортировка промежуточных данных

Спекулятивное выполнениеВ конце map или reduce запустить незавершенные задания нанескольких машинах

О.В. Сухорослов () 07 MapReduce 06.04.2012 26 / 77

Загрузка результатов map-заданий

О.В. Сухорослов () 07 MapReduce 06.04.2012 27 / 77

Отказоустойчивость

Сбой при выполнении задачи

Отказ рабочего узлаСбой аппаратуры, ПО или отзыв узла планировщиком (preemption)Определяется через heartbeatПерезапуск задач

Map - всех выполненных или незаконченных + уведомлениеreduce-процессовReduce только незаконченных

Отказ мастера

О.В. Сухорослов () 07 MapReduce 06.04.2012 28 / 77

Семантика распределенного выполнения программы

Для детерминированных функций map и reduce гарантируетсясовпадение результата вычислений с результатомпоследовательного выполнения программы

Для недетерминированных функций map и reduce гарантируетсясовпадение результата каждой reduce-задачи с результатомпоследовательного выполнения программы

Результаты разных reduce-задач могут соответствовать разнымпоследовательным выполнениям

Атомарные операцииПередача списка промежуточных файлов от map-процесса кмастеруПереименование файла в GFS с результатом reduce-задания

Поддержка выполнения на локальной машине

О.В. Сухорослов () 07 MapReduce 06.04.2012 29 / 77

Количество задач

Много больше числа машинДинамическая балансировка нагрузкиВосстановление после отказов

Число map-задач MInput / M ∼ 16-64 Mb

Число reduce-задач RВ несколько (∼2) раз больше числа машин

Для N=2000: M=200000, R=5000

О.В. Сухорослов () 07 MapReduce 06.04.2012 30 / 77

MapReduce в Google

large-scale machine learning problemsclustering problems for the Google News and Froogle productsextracting data to produce reports of popular queriesextracting properties of Web pages for new experiments and productsprocessing of satellite imagery datalanguage model processing for statistical machine translationlarge-scale graph computations

О.В. Сухорослов () 07 MapReduce 06.04.2012 31 / 77

Пример кода (Map)

1 #include "mapreduce/mapreduce.h"2

3 // User’s map function4 class WordCounter : public Mapper {5 public:6 virtual void Map (const MapInput& input) {7 const string& text = input.value ();8 const int n = text.size ();9 for (int i = 0; i < n; ) {

10 // Skip past leading whitespace11 while ((i < n) && isspace (text[i]))12 i++;13

14 // Find word end15 int start = i;16 while ((i < n) && !isspace(text[i]))17 i++;18 if (start < i)19 Emit(text.substr(start ,i-start),"1");20 }21 }22 };23 REGISTER_MAPPER(WordCounter );

О.В. Сухорослов () 07 MapReduce 06.04.2012 32 / 77

Пример кода (Reduce)

1 // User’s reduce function2 class Adder : public Reducer {3 virtual void Reduce(ReduceInput* input ) {4 // Iterate over all entries with the5 // same key and add the values6 int64 value = 0;7 while (!input ->done ()) {8 value += StringToInt(input ->value ());9 input ->NextValue ();

10 }11

12 // Emit sum for input ->key()13 Emit(IntToString(value ));14 }15 };16 REGISTER_REDUCER(Adder);

О.В. Сухорослов () 07 MapReduce 06.04.2012 33 / 77

Пример кода (main)

1 int main (int argc , char** argv) {2 ParseCommandLineFlags(argc , argv);3

4 MapReduceSpecification spec;5

6 // Store list of input files into "spec"7 for (int i = 1; i < argc; i++) {8 MapReduceInput* input = spec.add_input ();9 input ->set_format("text");

10 input ->set_filepattern(argv[i]);11 input ->set_mapper_class("WordCounter");12 }13

14 // Specify the output files :15 MapReduceOutput* out = spec.output ();16 out ->set_filebase("/gfs/test/freq");17 out ->set_num_tasks (100);18 out ->set_format("text");19 out ->set_reducer_class("Adder");

О.В. Сухорослов () 07 MapReduce 06.04.2012 34 / 77

Пример кода (main)

1 // Optional: do partial sums within map2 // tasks to save network bandwidth3 out ->set_combiner_class("Adder");4

5 // Tuning parameters: use at most 20006 // machines and 100 MB of memory per task7 spec.set_machines (2000);8 spec.set_map_megabytes (100);9 spec.set_reduce_megabytes (100);

10

11 // Now run it12 MapReduceResult result ;13 if (! MapReduce(spec , &result )) abort ();14

15 // Done: ’result ’ structure contains info16 // about counters , time taken , number of17 // machines used , etc.18 return 0;19 }

О.В. Сухорослов () 07 MapReduce 06.04.2012 35 / 77

Преимущества MapReduce

Модель программированияВысокий уровень абстракции за счет скрытия деталей организациивычислений внутри библиотекиПозволяет разработчику сконцентрироваться на решаемой задачеЛегкость добавления новых стадий обработки

РеализацияАвтоматическое распараллеливание, распределение заданий ибалансирование нагрузкиУстойчивость к отказамМасштабируемость

О.В. Сухорослов () 07 MapReduce 06.04.2012 36 / 77

Недостатки MapReduce?

О.В. Сухорослов () 07 MapReduce 06.04.2012 37 / 77

Почему не MPI?

О.В. Сухорослов () 07 MapReduce 06.04.2012 38 / 77

Apache Hadoop

О.В. Сухорослов () 07 MapReduce 06.04.2012 39 / 77

Цели

Открытые реализации технологий Google (GFS, MapReduce...)

Программная платформа для хранения и обработки большихобъемов данных

НадежностьМасштабируемостьЭффективностьЭкономичностьOpen Source

О.В. Сухорослов () 07 MapReduce 06.04.2012 40 / 77

Подпроекты

Hadoop CommonОбщие компоненты

HDFSРаспределенная файловая система по образу GFS

MapReduceРеализация MapReduce для распределенной обработки большихобъемов данных на кластере

О.В. Сухорослов () 07 MapReduce 06.04.2012 41 / 77

Архитектура Hadoop-кластера

О.В. Сухорослов () 07 MapReduce 06.04.2012 42 / 77

Hadoop Distributed File System (HDFS)

Хранение больших наборов данных

Отказоустойчивость

Модель "write-once-read-many"

Streaming data access

Перемещение вычислений дешевле, чем перемещение данных

О.В. Сухорослов () 07 MapReduce 06.04.2012 43 / 77

HDFS

Иерархическая структураУправляется выделенным узлом namenode

Файлы разбиваются на блоки (chunks)По умолчанию 64 Mb

Файлы хранятся на узлах datanodesРепликация, по умолчанию 3 копии

КлиентыПоиск ближайшей реплики с помощью namenodeПолучение данных напрямую с datanode

О.В. Сухорослов () 07 MapReduce 06.04.2012 44 / 77

HDFS

О.В. Сухорослов () 07 MapReduce 06.04.2012 45 / 77

Работа с HDFS

Командная строкаWeb-интерфейс

См. инструкцию к учебному кластеру

О.В. Сухорослов () 07 MapReduce 06.04.2012 46 / 77

Hadoop MapReduce

О.В. Сухорослов () 07 MapReduce 06.04.2012 47 / 77

Hadoop MapReduce

JobTrackerПринимает задания (job) от приложенийРазбивает задание на много задач (tasks)Распределяет задачи по узламОтслеживает выполнение задачОсуществляет перезапуск задач

TaskTrackerЗапрашивает новые задачиЗагружает код и запускает задачу в новой JVMУведомляет JobTracker о статусе задачиПредоставляет доступ к промежуточным файлам

О.В. Сухорослов () 07 MapReduce 06.04.2012 48 / 77

Реализация MapReduce-программ для Hadoop

JavaСтандартный Java API

Другие языки и скриптыHadoop Streaming

C++ (и другие языки через SWIG)Hadoop Pipes

О.В. Сухорослов () 07 MapReduce 06.04.2012 49 / 77

Hadoop Java API

http://hadoop.apache.org/mapreduce/docs/current/api/

О.В. Сухорослов () 07 MapReduce 06.04.2012 50 / 77

Общая структура программы

Реализации Mapper и Reducer (Partitioner, Combiner...)

Код формирования и запуска задания

Ожидание результата или выход

О.В. Сухорослов () 07 MapReduce 06.04.2012 51 / 77

Класс Mapper<K1, V1, K2, V2>

org.apache.hadoop.mapreduce.Mapper

Методыvoid setup(Mapper.Context context)void run(Mapper.Context context)void map(K1 key, V1 value, Mapper.Context context)void cleanup(Mapper.Context context)

О.В. Сухорослов () 07 MapReduce 06.04.2012 52 / 77

Реализация по умолчанию

1 protected void map(KEYIN key , VALUEIN value , Context context)2 throws IOException , InterruptedException {3 context.write(( KEYOUT) key , (VALUEOUT) value );4 }5

6 public void run(Context context)7 throws IOException , InterruptedException {8 setup(context );9 while(context.nextKeyValue ()) {

10 map(context.getCurrentKey (), context.getCurrentValue (),11 context );12 }13 cleanup (context );14 }

О.В. Сухорослов () 07 MapReduce 06.04.2012 53 / 77

WordCount: Mapper

1 public static class TokenizerMapper2 extends Mapper <LongWritable , Text , Text , IntWritable > {3

4 private final static IntWritable one = new IntWritable (1);5 private Text word = new Text ();6

7 public void map(LongWritable key , Text value , Context context)8 throws IOException , InterruptedException {9 StringTokenizer tok = new StringTokenizer(value.toString ());

10 while (tok.hasMoreTokens ()) {11 word.set(tok.nextToken ());12 context.write(word , one);13 }14 }15 }

О.В. Сухорослов () 07 MapReduce 06.04.2012 54 / 77

Класс Reducer<K2, V2, K3, V3>

org.apache.hadoop.mapreduce.Reducer

Методыvoid setup(Reducer.Context context)run(Reducer.Context context)reduce(K2 key, Iterable<V2> values, Reducer.Context context)cleanup(Reducer.Context context)

О.В. Сухорослов () 07 MapReduce 06.04.2012 55 / 77

Реализация по умолчанию

1 protected void reduce(KEYIN key , Iterable <VALUEIN > values ,2 Context context) throws IOException , InterruptedException {3 for (VALUEIN value : values) {4 context.write(( KEYOUT) key , (VALUEOUT) value );5 }6 }7

8 public void run(Context context)9 throws IOException , InterruptedException {

10 setup(context );11 while (context.nextKey ()) {12 reduce(context.getCurrentKey (), context.getValues (),13 context );14 }15 cleanup(context );16 }

О.В. Сухорослов () 07 MapReduce 06.04.2012 56 / 77

WordCount: Reducer

1 public static class IntSumReducer2 extends Reducer <Text , IntWritable , Text , IntWritable > {3 public void reduce(Text key , Iterable <IntWritable > values ,4 Context context)5 throws IOException , InterruptedException {6 int sum = 0;7 for (IntWritable val : values) {8 sum += val.get();9 }

10 context.write(key , new IntWritable(sum ));11 }12 }

О.В. Сухорослов () 07 MapReduce 06.04.2012 57 / 77

Конфигурация и запуск задания

1 public class WordCount extends Configured implements Tool {2

3 public static void main(String [] args) throws Exception {4 int ret = ToolRunner.run(new WordCount(), args);5 System.exit(ret);6 }7

8 public int run(String [] args) throws Exception {9 if (args.length != 2) {

10 System.err.println(11 "Usage: lecture7.WordCount <input > <output >");12 return -1;13 }14

15 Job job = new Job(getConf ());16 job.setJarByClass(WordCount.class );17 job.setJobName("wordcount");18

19 job.setMapperClass(TokenizerMapper.class);20 job.setCombinerClass(IntSumReducer.class);21 job.setReducerClass(IntSumReducer.class);

О.В. Сухорослов () 07 MapReduce 06.04.2012 58 / 77

Конфигурация и запуск задания

1 job.setMapOutputKeyClass(Text.class );2 job.setMapOutputValueClass(IntWritable.class);3 job.setOutputKeyClass(Text.class );4 job.setOutputValueClass(IntWritable.class);5

6 job.setInputFormatClass(TextInputFormat.class);7 job.setOutputFormatClass(TextOutputFormat.class);8

9 FileInputFormat.addInputPath(job , new Path(args [0]));10 FileOutputFormat.setOutputPath(job , new Path(args [1]));11

12 boolean success = job.waitForCompletion(true);13 return success ? 0 : 1;14 }15 }

О.В. Сухорослов () 07 MapReduce 06.04.2012 59 / 77

Входные и выходные данные

(input)→ (k1, v1)→ map → (k2, v2)→ combine → (k2, v2)→reduce → (k3, v3)→ (output)

Базовые интерфейсыВходные данные: InputFormatВыходные данные: OutputFormatКлючи: WritableComparableЗначения: Writable

О.В. Сухорослов () 07 MapReduce 06.04.2012 60 / 77

Типы данных

TextBooleanWritableIntWritableLongWritableFloatWritableDoubleWritableBytesWritableArrayWritableMapWritable...

См. пакет org.apache.hadoop.io

О.В. Сухорослов () 07 MapReduce 06.04.2012 61 / 77

InputFormat

TextInputFormat (по умолчанию)< LongWritable,Text > = < byte_offset, line >

KeyValueTextInputFormat< Text,Text >Текстовый файл со строками вида: key [tab] value

SequenceFileInputFormat<K,V>Двоичный формат с поддержкой сжатия

...

О.В. Сухорослов () 07 MapReduce 06.04.2012 62 / 77

OutputFormat

TextOutputFormat<K,V>Текстовый файл со стороками вида: key [tab] value

SequenceFileOutputFormat

...

О.В. Сухорослов () 07 MapReduce 06.04.2012 63 / 77

Установка Hadoop на локальной машине

Установить JavaЗагрузить дистрибутив Hadoop и распаковать в любуюдиректорию (далее HADOOP_HOME)

LinuxОткрыть файл HADOOP_HOME/conf/hadoop-env.sh и прописать впеременной JAVA_HOME путь к Java (путь с пробелами надовзять в кавычки)

WindowsПрописать переменную окружения JAVA_HOME с путем к Java(Мой компьютер > Свойства > закладка Дополнительно >Переменные среды)Дополнительно установить Cygwin, эмулятор Unix shellКоманды hadoop под Windows следует запускать внутри Cygwinshell

О.В. Сухорослов () 07 MapReduce 06.04.2012 64 / 77

Альтернативный вариант

Виртуальная машина с HadoopCloudera’s Hadoop Demo VM

О.В. Сухорослов () 07 MapReduce 06.04.2012 65 / 77

Компилируем и создаем jar

EclipseДобавить в проект HADOOP_HOME/hadoop-*-core.jarBuild projectFile -> Export -> Java / JAR file

Вручную

1 $ mkdir classes2 $ javac3 -classpath ${HADOOP_HOME }/hadoop -${HADOOP_VERSION}-core.jar4 -d classes WordCount.java5 $ jar -cvf wordcount.jar -C classes/ .

О.В. Сухорослов () 07 MapReduce 06.04.2012 66 / 77

Запускаем программу локально

Находясь в HADOOP_HOME1 $ bin/hadoop jar wordcount.jar lecture7.WordCount IN OUT

IN - директория с входными файламиOUT - директория с результатами

не должна существовать перед запуском

О.В. Сухорослов () 07 MapReduce 06.04.2012 67 / 77

Запуск из IDE (Eclipse)

Подключаем к проекту HADOOP_HOME/hadoop-*-core.jar и всебиблиотеки из HADOOP_HOME/lib

Project->Properties->Java Build Path->Libraries->Add ExternalJARs...

Создаем Run Configuration, где указываем свой Java-класс(вкладка Main) и аргументы main (Arguments/Program Arguments)

в VM arguments следует добавить -Xmx512M во избежаниеOutOfMemoryErrorпути к локальным input- и output-директориям можно указыватьотносительно директории проекта

Под Windows может потребоваться Cygwin

О.В. Сухорослов () 07 MapReduce 06.04.2012 68 / 77

Число задач

MapsОпределяется числом блоков во входных файлах, размером блока,параметром mapred.min.split.size, реализацией InputFormat

ReducesПо умолчанию 1 (всегда в локальном режиме)Опция -D mapred.reduce.tasks=N или методjob.setNumReduceTasks(int)Обычно подбирается опытным путемВремя выполнения reduce должно быть не менее минуты0, если Reduce не нужен

О.В. Сухорослов () 07 MapReduce 06.04.2012 69 / 77

Стандартные опции

1 -conf <configuration file > // specify a configuration file2

3 -D <property=value > // use value for given property4 -D mapred.reduce.tasks =105

6 -files <comma separated list of files >7 // files to be copied to the map reduce cluster8

9 -libjars <comma seperated list of jars >10 // jar files to include in the classpath11

12 -archives <comma separated list of archives >13 // archives to be unarchived on the compute machines

О.В. Сухорослов () 07 MapReduce 06.04.2012 70 / 77

Запуск на учебном кластере

Копируем jar и исходные данные в домашнюю директорию накластере (/home/USER) по SCP

Заходим на кластер по SSH

Загружаем исходные данные в HDFS

Запускаем MapReduce-задание

Загружаем результаты из HDFS

О.В. Сухорослов () 07 MapReduce 06.04.2012 71 / 77

Загружаем исходные данные в HDFS

Копирование из локальной директории в HDFS

1 $ hadoop dfs -put local_dir hdfs_dir

dfs_dir лучше задавать в относительном виде, тогда полный путьбудет /user/USER/dfs_dir

1 $ hadoop dfs -mkdir wordcount2 $ hadoop dfs -put /home/USER/input wordcount/input

О.В. Сухорослов () 07 MapReduce 06.04.2012 72 / 77

Запускаем MapReduce-задание

В одну строку1 $ hadoop jar wordcount.jar lecture7.WordCount2 -D mapred.reduce.tasks =13 wordcount/input wordcount/output

О.В. Сухорослов () 07 MapReduce 06.04.2012 73 / 77

Загружаем результаты из HDFS

Копирование из HDFS в локальную директорию

1 $ hadoop dfs -get wordcount/output output

Просто просмотр

1 $ hadoop dfs -cat wordcount/output/part -00000

О.В. Сухорослов () 07 MapReduce 06.04.2012 74 / 77

Повторный запуск

Перед каждым запуском надо удалять из HDFSoutput-директорию (wordcount/output)

Или каждый раз указывать новую output-директориюwordcount/output2(3...)

О.В. Сухорослов () 07 MapReduce 06.04.2012 75 / 77

Web-интерфейсы

HDFShttp://hadoop2.yandex.ru:50070

MapReducehttp://hadoop2.yandex.ru:50030

Для доступа необходимо настроить прокси через SSHСм. инструкцию к учебному кластеру на вики

О.В. Сухорослов () 07 MapReduce 06.04.2012 76 / 77

Домашнее задание №3 - Подготовка

ЗадачиОпределить 20 наиболее часто встречающихся слов в русской(только русские слова) и английской ВикипедияхПостроить инвертированный индекс для русской и английскойВикипедий

Подробности будут на следующем занятии

До следующего занятияустановить Hadoop на своей машинескомпилировать сегодняшний пример WordCount(запустить WordCount на своей машине)запустить WordCount на учебном кластере

в качестве входных данных можно использовать любые текстовыефайлы

убедиться, что все работает и понятноесли нет - задать вопрос на shad-pdc-2012@yandex.ru

О.В. Сухорослов () 07 MapReduce 06.04.2012 77 / 77

top related