2012-03-05 2 views
0

Я хотел бы спросить вас о неудобствах вызова внешнего API во время работы по сокращению карты. которые являются недостатками?API-вызовы внутри задания mapreduce

Некоторые примеры: Если внутри картографа мы должны геокодирования адрес и мы называем Google Maps API, или вызов внешней БД для того, чтобы получить связанные элементы элемента и т.д.

ответ

2

Это совершенно нормально для вызывать внешний API, если во внешнем API нет вызовов БД. Во многих отношениях это предпочтительнее повторять вашу логику. Часто вы хотите, чтобы ваши задания MapReduce были не чем иным, как оболочкой вокруг логики, написанной в контексте non MapReduce. Этот make для лучшего тестируемого кода.

Однако внешние вызовы БД НАСТОЯТЕЛЬНО обескуражены. Это значительно сократит скорость ваших заданий MapReduce, так как каждый вызов будет произвольным вызовом. Кроме того, при наличии нескольких тысяч карт/сокращений taks, ударяющих вашу БД, вы можете довести БД до колен. Если вам нужны связанные элементы, желательно иметь все элементы на HDFS и делать соединение в MapReduce. Если вы говорите о БД, это магазин NoSQL, такой как Cassandra или HBase, у них будет функция пакетного экспорта для экспорта всей таблицы на HDFS.

+0

Но что, если вам нужно искать связанные элементы, скажем, 2 миллиона элементов, а число возможных вариантов - 30 миллионов, есть ли какой-либо шаблон для уменьшения карты для этого? – Fgblanch

+0

Возможно ли, что 30 миллионов для каждого из 2 миллионов предметов или всего 30 миллионов? Если это всего 30 миллионов, тогда ваш лучший вариант - поставить 30 миллионов предметов на HDFS и сделать соединение в MapReduce –

+0

. 30 миллионов возможных для каждого из 2 миллионов предметов, задача, которую нужно выполнить, - это сопоставить элементы. – Fgblanch