Способ экспорта результатов из Pig в базу данных - PullRequest
11 голосов
/ 10 января 2011

Есть ли способ экспортировать результаты из Pig напрямую в базу данных, такую ​​как mysql?

Ответы [ 5 ]

7 голосов
/ 11 января 2011

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

data = LOAD '...' AS (...);
...
STORE data INTO DBStorage('com.mysql.jdbc.Driver', 'dbc:mysql://host/db', 'INSERT ...');
4 голосов
/ 11 января 2011

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

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

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

2 голосов
/ 19 октября 2012

Sqoop может быть хорошим способом, но его сложно настроить (IMHO), так как все эти проекты, связанные с Hadoop ...

DBStorage Pig работает нормально (по крайней мере для хранения).

Не забудьте зарегистрировать 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 (?, ?)');
2 голосов
/ 11 января 2011

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

1 голос
/ 11 сентября 2011

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

...