首页 文章

如何让worker只查询本地cassandra节点?

提问于
浏览
1

假设我有几台机器,每台机器都安装了spark worker和cassandra节点 . 是否有可能要求每个spark工作者只查询其本地cassandra节点(在同一台机器上),这样当我使用spark-cassandra-connector重新分区,然后使用spark-cassandra-connector进行repartitionByCassandraReplica时,不会涉及网络操作,因此每个spark工作者都从本地获取数据存储?

1 回答

  • 2

    在Spark-Cassandra连接器内部, LocalNodeFirstLoadBalancingPolicy 处理这项工作 . 它首先优先选择本地节点,然后检查同一DC中的节点 . 特别是使用 java.net.NetworkInterface 确定本地节点,以在主机列表中找到与本地地址列表中的地址匹配的地址,如下所示:

    private val localAddresses =
      NetworkInterface.getNetworkInterfaces.flatMap(_.getInetAddresses).toSet
    
    /** Returns true if given host is local host */
    def isLocalHost(host: Host): Boolean = {
      val hostAddress = host.getAddress
      hostAddress.isLoopbackAddress || localAddresses.contains(hostAddress)
    }
    

    此逻辑用于创建查询计划,该计划返回查询的候选主机列表 . 无论计划类型(令牌识别或不知道),列表中的第一个主机始终是本地主机(如果存在) .

相关问题