Подтвердить что ты не робот

Способ экспорта результатов из Pig в базу данных

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

Pig 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 (?, ?)');

Ответ 5

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