11

有没有办法将结果从 Pig 直接导出到 mysql 之类的数据库?

4

5 回答 5

7

在记住 orangeoctopus 所说的(提防 DDOS ......)的同时,您是否看过DBStorage

data = LOAD '...' AS (...);
...
STORE data INTO DBStorage('com.mysql.jdbc.Driver', 'dbc:mysql://host/db', 'INSERT ...');
于 2011-01-11T18:56:12.807 回答
4

我看到的主要问题是每个reducer 都会在同一时间有效地插入数据库。

如果您认为这不会成为问题,我建议您编写一个自定义存储方法,该方法使用 JDBC(或类似的东西)直接插入数据库,而不向 HDFS 写入任何内容。

如果您害怕对自己的数据库执行 DDOS 攻击,也许在 HDFS 上收集数据并单独批量加载到 mysql 中会更好。

于 2011-01-10T22:48:40.030 回答
2

我目前正在试验一个嵌入式 pig 应用程序,它通过PigServer.OpenIterator和 JDBC 连接将结果加载到 mysql 中。它在测试中效果很好,但我还没有大规模尝试过。这类似于已经建议的自定义存储方法,但从单点运行,因此不会发生意外的 DDOS 攻击。如果您不从数据库服务器上运行负载(我个人更喜欢从数据库中运行除数据库本身之外的任何东西),那么您实际上最终会支付两次网络传输成本(集群 -> 登台机器,登台机器 -> 数据库服务器)服务器),但这与“写出文件并批量加载”选项没有什么不同。

于 2011-01-11T01:04:02.730 回答
2

Sqoop 可能是不错的选择,但很难设置(恕我直言),因为所有这些 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 (?, ?)');
于 2012-10-19T15:22:27.543 回答
1

尝试使用Sqoop

于 2011-09-11T10:24:08.527 回答