2011-01-10 3 views

ответ

7

Принимая во внимание, что сказал orangeoctopus (остерегайтесь DDOS ...), вы имели дело с DBStorage?

data = LOAD '...' AS (...); 
... 
STORE data INTO DBStorage('com.mysql.jdbc.Driver', 'dbc:mysql://host/db', 'INSERT ...'); 
4

Основная проблема, которую я вижу, заключается в том, что каждый редуктор эффективно вставляется в базу данных примерно в одно и то же время.

Если вы не думаете, что это будет проблемой, я предлагаю вам написать custom Storage method, который использует JDBC (или что-то подобное) для непосредственного вставки в базу данных и ничего не записывающего в HDFS.

Если вы боитесь совершить DDOS-атаку в своей собственной базе данных, возможно, сбор данных на HDFS и выполнение отдельной массовой загрузки в mysql будет лучше.

+0

Кажется, что нет никакого пути вокруг написания UDF, который использует JDBC. .благодаря! – Christoph

2

В настоящее время я экспериментирую со встроенным приложением свиней, которое загружает результаты в mysql через PigServer.OpenIterator и соединение JDBC. В тестах он очень хорошо работал, но я еще не пробовал его в масштабе. Это похоже на уже предложенный пользовательский метод хранения, но выполняется из одной точки, поэтому не происходит случайной атаки DDOS. Вы фактически в конечном итоге оплачиваете стоимость сетевой передачи дважды (кластер -> промежуточная машина, промежуточная машина -> сервер БД), если вы не запускаете загрузку с сервера БД (я лично предпочитаю запускать ничего, кроме самого БД из БД сервер), но это ничем не отличается от опции «написать файл и загрузить его».

1

Попробуйте использовать Sqoop

+1

Хотя это теоретически может ответить на вопрос, [было бы предпочтительно] (http://meta.stackexchange.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки. – Kev

2

Sqoop может быть хорошим способом пойти, но это трудно установить-вверх (ИМХО), как и все эти связанные Hadoop проекты ...

DBStorage Свиньи является (как минимум для хранения).

Не забудьте зарегистрировать PiggyBank и драйвер MySQL:

-- Register Piggy bank 
REGISTER /opt/cmr/pig/pig-0.10.0/lib/piggybank.jar; 

-- Register MySQL driver 
REGISTER /opt/cmr/mysql/drivers/mysql-connector-java-5.1.15-bin.jar 

Вот пример вызова:

-- Store a relation into a SQL table 
STORE relation INTO 'unused' USING org.apache.pig.piggybank.storage.DBStorage('com.mysql.jdbc.Driver', 'jdbc:mysql://<mysqlserver>/<database>', '<login>', '<password>', 'REPLACE INTO <table> (<column1>, <column2>) VALUES (?, ?)');