我正在考虑编写一个级联应用程序,向mysql数据库发出select语句,其中每个查询可以返回数百万行。
每个数据库存在于n个从机和一个主机上,如下所示:http://dev.mysql.com/doc/refman/5.0/en/replication-solutions-scaleout.html#figure_replication-扩大
在jdbctap中,我看到我们只能传递一个主机名:这意味着我的所有Map程序都将尝试连接到一个从机(而其他(n-1)个从机是空闲的)。
假设在从属服务器前面没有负载均衡器,是否有一个java包/模块/代理(或者更好,一个定制的jdbctap实现),我可以使用它将Map器的连接分布在n个从属服务器上?
下面详细介绍了一个使用硬件代理的示例脚本:http://blog.netoearth.com/html/201006/building-a-mysql-load-balancing-proxy-with-trafficscript.htm
如果这样的东西不存在,我就必须使用以下算法创建自己的jdbctap(它将来自Map器的连接扩展到n个从机):
在外部数据库上保留n个从属服务器的列表(任何支持并发写入/更新的服务器)
有一个Map器计数器,这些Map器已连接到每个从机
每次Map程序需要连接到从属服务器时,它都会查询此数据库以找出加载最少的从属服务器(连接到它的Map程序的最小计数)。碰撞时的随机领带断裂。
这听起来是个好主意吗?我上面提到的“很好地支持并发写/更新”的外部数据库是什么(Cassandra、沃尔特等)
1条答案
按热度按时间wlsrxk511#
jdbc一般不支持并行性,因此对于大规模负载来说是一个瓶颈。
在这种主/备体系结构中,如何通过mysql备份将备用数据库中的数据拉到tsv中,然后并行地将这些数据加载到hdfs中?