我在群集上设置了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?
先谢谢。
答案 0 :(得分:0)
如果以这种方式连接到Vertica,ConnectionLoadBalance
完全具有将连接请求发送到master_node_ip
的效果(奇怪的名称,因为Vertica没有主节点)。以简化的方式表示:接收连接请求的集群中的节点“询问”集群中的所有节点,这些节点是当前连接数目前最低的节点。然后该节点将响应连接请求,您将与该连接请求连接。
如果您想要更多,那么您的客户端(在这种情况下为Spark)将必须实例化与Vertica节点一样多的线程;每个节点都使用ConnectionLoadBalance=False
连接到不同的Vertica节点,以便它们保持连接到他们“想要”的位置。
希望这有帮助 - 马可