问题 将结果从Pig导出到数据库的方法


有没有办法将Pig的结果直接导出到像mysql这样的数据库?


12122
2018-01-10 16:11


起源



答案:


同时记住orangeoctopus所说的(谨防DDOS ......)你有没有看过 DBStorage

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

7
2018-01-11 18:56





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

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

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


4
2018-01-10 22:48



好像没有办法编写使用JDBC的UDF。谢谢! - Christoph


答案:


同时记住orangeoctopus所说的(谨防DDOS ......)你有没有看过 DBStorage

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

7
2018-01-11 18:56





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

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

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


4
2018-01-10 22:48



好像没有办法编写使用JDBC的UDF。谢谢! - Christoph


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


2
2018-01-11 01:04





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

2
2017-10-19 15:22





尝试使用 Sqoop


1
2017-09-11 10:24



虽然理论上这可以回答这个问题, 这会更好 在这里包括答案的基本部分,并提供参考链接。 - Kev