有没有办法将Pig的结果直接导出到像mysql这样的数据库?
有没有办法将Pig的结果直接导出到像mysql这样的数据库?
同时记住orangeoctopus所说的(谨防DDOS ......)你有没有看过 DBStorage?
data = LOAD '...' AS (...);
...
STORE data INTO DBStorage('com.mysql.jdbc.Driver', 'dbc:mysql://host/db', 'INSERT ...');
我看到的主要问题是每个reducer有效地将在同一时间插入数据库。
如果你认为这不是问题,我建议你写一个 自定义存储方法 使用JDBC(或类似的东西)直接插入数据库并向HDFS写入任何内容。
如果您害怕在自己的数据库上执行DDOS攻击,那么收集HDFS上的数据并对mysql执行单独的批量加载会更好。
同时记住orangeoctopus所说的(谨防DDOS ......)你有没有看过 DBStorage?
data = LOAD '...' AS (...);
...
STORE data INTO DBStorage('com.mysql.jdbc.Driver', 'dbc:mysql://host/db', 'INSERT ...');
我看到的主要问题是每个reducer有效地将在同一时间插入数据库。
如果你认为这不是问题,我建议你写一个 自定义存储方法 使用JDBC(或类似的东西)直接插入数据库并向HDFS写入任何内容。
如果您害怕在自己的数据库上执行DDOS攻击,那么收集HDFS上的数据并对mysql执行单独的批量加载会更好。
我正在试验一个嵌入式猪应用程序,它将结果加载到mysql中 PigServer.OpenIterator 和JDBC连接。它在测试中运行良好,但我还没有大规模尝试过。这与已经建议的自定义存储方法类似,但是从单点运行,因此不会发生意外的DDOS攻击。如果你没有从数据库服务器上运行负载,你有效地最终支付两次网络传输费用(集群 - >临时机,登台机器 - >数据库服务器)(我个人更喜欢在DB之外运行任何东西除了数据库服务器),但这与“将文件写出并批量加载”选项没有什么不同。
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 (?, ?)');
尝试使用 Sqoop