mysql - 负载均衡级联 JDBCTap for MySQL

标签 mysql hadoop connection-pooling elastic-map-reduce cascading

我正在考虑编写一个级联应用程序,向 MYSQL 数据库发出 SELECT 语句,其中每个查询可以返回数百万行。

每个数据库存在于 N 个从属和一个主控上,如下所示:http://dev.mysql.com/doc/refman/5.0/en/replication-solutions-scaleout.html#figure_replication-scaleout

在 JDBCTap 中,我看到我们只能传递一个主机名:这意味着我所有的映射器都会尝试连接到一个从属设备(而其他 (N-1) 个从属设备处于空闲状态)。

假设从属服务器前面没有负载均衡器,我可以使用一个 JAVA 包/模块/代理(或者更好的是自定义的 JDBCTap 实现)来将映射器的连接分散到 N 个从属服务器上吗?

此处详细介绍了使用硬件代理的示例脚本:http://blog.netoearth.com/html/201006/building-a-mysql-load-balancing-proxy-with-trafficscript.htm

如果这样的事情不存在,我将不得不使用以下算法创建我自己的 JDBCTap(将映射器的连接分散到 N 个从属设备上):

  • 在外部数据库上保留 N 个从属的列表(任何支持并发写入/更新的数据库)
  • 有一个已连接到每个从属设备的映射器计数器
  • 每次映射器需要连接到从站时,它都会查询该数据库以找出负载最少的从站(连接到它的映射器的最小计数)。碰撞时随机平局。

  • 这听起来是个好主意吗?我上面提到的“很好地支持并发写入/更新”的外部数据库可能是什么? (Cassandra、VoltDB 等)

    最佳答案

    JDBC 通常不支持并行性,因此对于大规模负载来说是一个瓶颈。

    在那种主备架构中,如何通过 MySQL 备份从备库中提取数据到 TSV,然后将它们并行加载到 HDFS 中?

    关于mysql - 负载均衡级联 JDBCTap for MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12981500/

    相关文章:

    azure - Spark 流访问 azure Blob

    database - 不使用数据库连接池的原因?

    java - Neo4j 驱动程序正在运行

    mysql - 带有 if 语句的 SELECT 查询?

    mysql - 如何在 MYSQL 和 Mule 中处理 size=0 响应

    hadoop - pig :连接转储引发错误1066:无法打开别名C的迭代器

    java - BasicDataSource 有时会抛出 "Protocol not supported, abandoning connection."

    mysql - Mysql事务提交是不是按顺序?

    mysql - 构建 SQL 查询以识别缺失的行并使用特定数据更新它们

    hadoop - core-site.xml在mapreduce程序中的使用