AWS DynamoDB и MapReduce в Java

У меня есть огромная таблица DynamoDB, которую я хочу проанализировать для агрегирования данных, хранящихся в ее атрибутах. Затем агрегированные данные должны быть обработаны приложением Java. Хотя я понимаю действительно основные концепции MapReduce, я никогда не использовал его раньше.

В моем случае предположим, что у меня есть атрибуты customerId и orderNumbers в каждом элементе DynamoDB и что у меня может быть более одного элемента для одного и того же клиента. Нравиться:

customerId: 1, orderNumbers: 2
customerId: 1, orderNumbers: 6
customerId: 2, orderNumbers: -1

По сути, я хочу суммировать порядковые номера для каждого идентификатора клиента, а затем выполнить некоторые операции в Java с агрегатом.

AWS Elastic MapReduce, вероятно, мог бы мне помочь, но я не понимаю, как связать пользовательский JAR с DynamoDB. Мой пользовательский JAR, вероятно, должен предоставлять функции map и reduce, где я могу найти правильный интерфейс для реализации?

Кроме того, меня немного смущают документы, кажется, я должен сначала экспортировать свои данные в S3, прежде чем запускать свой собственный JAR. Это правильно?

Спасибо


person Mark    schedule 08.04.2012    source источник
comment
См. также: aws.amazon.com/code/Elastic-MapReduce/28549. - который также использует Hive для доступа к DynamoDB.   -  person mparaz    schedule 08.01.2014


Ответы (2)


Примечание. Я не создавал рабочий EMR, просто прочитал об этом.

Прежде всего, необходимые условия для интеграции Amazon EMR с Amazon DynamoDB

Вы можете работать непосредственно с DynamoDB: Примеры команд Hive для экспорта, импорта и запроса данных в Amazon DynamoDB. Как видите, таким образом можно выполнять «SQL-подобные» запросы.

Если у вас нет знаний о Hadoop, вам, вероятно, следует прочитать некоторые вводные материалы, такие как: Что такое Hadoop

Это руководство является еще одним полезным чтением Использование Amazon Elastic MapReduce с DynamoDB

Что касается вашего пользовательского приложения JAR, вам необходимо загрузить его на S3. Используйте это руководство: Как создать поток заданий с помощью пользовательского JAR

Я надеюсь, что это поможет вам начать работу.

person Chen Harel    schedule 18.04.2012

См. также: http://aws.amazon.com/code/Elastic-MapReduce/28549, который также использует Hive для доступа к DynamoDB. Кажется, это официальный способ доступа AWS к DynamoDB из Hadoop.

Если вам нужно написать собственный код в пользовательском JAR-файле, я нашел: DynamoDB InputFormat для Hadoop

Однако я не смог найти документацию по параметрам Java, которые нужно установить для этого InputFormat, которые соответствуют параметрам Hive. Согласно этой статье, он не был выпущен Amazon: http://www.newvem.com/amazon-dynamodb-part-iii-mapreducin-logs/

Также см.: jar, содержащий org.apache.hadoop.hive.dynamodb

Таким образом, официальный задокументированный способ использования данных DynamoDB из пользовательского задания MapReduce — это экспортировать данные DynamoDB в S3, а затем позволить Elastic MapReduce взять их из S3. Я предполагаю, что это связано с тем, что DynamoDB был разработан для случайного доступа в качестве хранилища ключей/значений «NoSQL», в то время как форматы ввода и вывода Hadoop предназначены для последовательного доступа с большими размерами блоков. Недокументированный код Amazon может помочь восполнить этот пробел.

Поскольку экспорт/реимпорт использует ресурсы, было бы лучше, если бы эту задачу можно было выполнить из Hive.

person mparaz    schedule 08.01.2014