Apache Hadoop: Может ли он выполнять «изменяющийся во времени» ввод? - PullRequest
1 голос
/ 03 декабря 2010

Я не нашел ответа на это даже после небольшого поиска в Google. Мои входные файлы генерируются процессом, который разбивает их на части, например, когда файл касается 1 ГБ. Теперь, если бы мне нужно было выполнить задание mapreduce, которое обрабатывает входной каталог в dfs, как мне убедиться, что это задание получает файлы, добавленные в тот же входной каталог, в то время как задание hadoop выполняется?

У меня такое ощущение, что это почти невозможно, потому что, когда запускается задание hadoop, оно вычисляет оставшееся время и все такое, поэтому, когда мой ввод продолжает накапливаться или, другими словами, является "переменным", Hadoop не будет знать, как с этим справиться - это мое предположение. Я хотел бы узнать ваше мнение об этом, а также о наилучших возможных путях к этому! Ценю вашу помощь.

Ответы [ 2 ]

3 голосов
/ 03 декабря 2010

Вы описываете сценарий использования, который Hadoop не был предназначен для обработки. Hadoop сканирует входной каталог и определяет разбиения еще до того, как будут запущены функции преобразования / уменьшения. Поэтому, если после определения разбиений было добавлено больше данных, вам не повезло.

Похоже, вам нужна система обработки в реальном времени. Hadoop предназначен для пакетных процессов. Я не совсем уверен, каковы ваши требования к обработке данных, поэтому трудно рекомендовать решение. Может быть, вам поможет микропакетирование и более частое выполнение вашего задания Hadoop на меньшем количестве данных?

1 голос
/ 04 декабря 2010

С точки зрения архитектуры, Hadoop может справиться с этим, но вам нужно создать какой-нибудь внешний интерфейс (или работать с несколькими из них с открытым исходным кодом) и позволить Hadoop выполнять свою работу.

Как и любая хорошая система, Hadoop не может и не должен делать все, но у вас есть несколько вариантов для изучения.

Если вы потратили немного времени и разработали некоторые сценарии с базой данных (или очередью)за ними вы можете решить эту проблему самостоятельно довольно быстро (при условии, что вы можете написать что-то на Ruby или Python и иногда вызывать сценарий bash, тогда это очень просто, и даже если вы используете Java, сложность не намного больше, чем смешивание сценария bash свыходной слой Ruby или Python).

Шаг 1: Файлы катятся (в зависимости от вашего параметра [1GB или чего-либо другого] в каталог / хранилище, и вставка «свернутого» файла вставляется в таблицу (или очередь) ... если вы не можете вставить, когда катитесь, вы можете отсканировать каталог (через cron) и переместить файл в новый каталог и вставить в db там имя и местоположение.

Шаг 2: cron(в любой желаемый промежуток времени, скажем, раз в час) другой сценарий, чтобы перейти в базу данных (или очередь) и получить ВСЕ файлВы хотите MapReduce.

Шаг 3: В сценарии шага 2 создайте цикл для файлов, которые вы найдете, и для нескольких потоков (или, если вы используете Ruby лучше для форка), и вставьте эти файлы в Hadoop.Я говорю push, потому что метод может быть простым «hadoop df -put» (где вы можете использовать скрипт bash, вызываемый из скрипта ruby ​​или python) ... или какой-нибудь пользовательский загрузчик jar-файлов в зависимости от того, что вам нужно ... Вывозможно, что другая таблица будет сохранять файлы как относящиеся к какой-либо работе, но я оставляю это вам.

Шаг 4: запустите работу (либо из третьего скрипта, заставляющего ваши таблицы иметь некоторое представление о событиях, либо просто какпоследняя строка после того, как вы отправили файлы в Hadoop) и получите вывод, чтобы сделать то, что вы хотите.

Параметры открытого источника

Вы можете использовать Oozie http://yahoo.github.com/oozie/releases/2.2.1/ - это решение Workflow для Hadoop Open Sourced от Yahoo, в котором вы тоже можете найти какое-то применение, но все зависит от того, сколько вы будете извлекать из приложенных усилий. Для того, что вы делаете, это звучит как некоторое усилие вПользовательский набор сценариев - это способ автоматизации вашего рабочего процесса .... но взгляните на Oozie.

Другой рабочий процесс для Hadoop - Azkaban http://sna -projects.com / azkaban /

Наконец, вы можете рассмотреть возможность использования потоковой архитектуры для перемещения файлов в HDFS ... Теперь в течение дня существует 3 метода (Kafka является новым и только что выпущен несколько дней назад с большим количеством очередей позади)его основная архитектура, чем у двух других)

1) Flume https://github.com/cloudera/flume/wiki

2) Scribe HDFS http://hadoopblog.blogspot.com/2009/06/hdfs-scribe-integration.html

3) Kafka http://sna -проекты.com / Kafka /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...