如何在sprak数据帧中配置多个节点连接?

时间:2017-05-18 12:46:13

标签: apache-spark apache-spark-sql vertica

我在群集上设置了vertica,有5个节点。我使用下面的代码将数据帧写入vertica表:

    Map<String, String> opts = new HashMap<>();
    opts.put("table", tableName);
    opts.put("db", verticaDB);
    opts.put("dbschema", dashboardSchema);

    opts.put("user", verticaUserName);
    opts.put("password", options.verticaPassword);

    opts.put("host", verticaHost);
    opts.put("hdfs_url",hdfs url);
    opts.put("web_hdfs_url",web_hdfs_url);
    String SPARK_VERTICA_SOURCE = "com.vertica.spark.datasource.DefaultSource";
    dataFrame.write().format(SPARK_VERTICA_SOURCE).options(opts).
                                                mode(saveMode).save();

上面的代码工作正常,但它是与vertica的单个主节点的连接。

我尝试将主机作为多群集节点的连接URL传递

 master_node_ip:5433/schema?Connectionloadbalance=1&backupservernode=node2_ip,node3_ip 

我是新来的火花,我如何使用负载平衡来连接来自Spark的Vertica?

先谢谢。

1 个答案:

答案 0 :(得分:0)

如果以这种方式连接到Vertica,ConnectionLoadBalance完全具有将连接请求发送到master_node_ip的效果(奇怪的名称,因为Vertica没有主节点)。以简化的方式表示:接收连接请求的集群中的节点“询问”集群中的所有节点,这些节点是当前连接数目前最低的节点。然后该节点将响应连接请求,您将与该连接请求连接。

如果您想要更多,那么您的客户端(在这种情况下为Spark)将必须实例化与Vertica节点一样多的线程;每个节点都使用ConnectionLoadBalance=False连接到不同的Vertica节点,以便它们保持连接到他们“想要”的位置。

希望这有帮助 - 马可