2017-05-18 2 views
2

J'ai installé vertica sur le cluster, il y a 5 nœuds. J'utilise ci-dessous le code pour écrire la trame de données à table Vertica:Comment configurer une connexion à plusieurs nœuds dans une base de données sprak?

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(); 

code ci-dessus fonctionne très bien, mais il est connexion au nœud maître unique de Vertica.

J'ai essayé de passer hôte URL de connexion pour le nœud de cluster à plusieurs

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

Je suis nouveau à étincelle, comment je peux utiliser l'équilibrage de charge pour se connecter Vertica de Spark?

Merci d'avance.

Répondre

0

Si vous vous connectez à Vertica de cette manière, ConnectionLoadBalance a exactement l'effet que vous envoyez la demande de connexion à master_node_ip (nom étrange, car Vertica n'a pas de nœud principal). Pour simplifier: Le nœud du cluster recevant la requête de connexion "demande" à tous les nœuds du cluster, celui qui a la charge actuellement la plus faible en nombre de connexions. Ce noeud répondra alors à la demande de connexion, et vous serez connecté avec celui-ci.

Si vous voulez plus que cela, votre client (Spark dans ce cas) devra instancier par exemple autant de threads que vous avez de nœuds Vertica; chacun se connecte à un nœud Vertica différent, avec ConnectionLoadBalance=False, afin qu'ils restent connectés exactement où ils "voulaient".

Espérons que cela aide - Marco