Что означает «избегать нескольких клиентов Kudu на кластер»? - PullRequest
2 голосов
/ 29 июня 2019

Смотрю документацию куду.

Ниже приведено частичное описание куду-искры.

https://kudu.apache.org/docs/developing.html#_avoid_multiple_kudu_clients_per_cluster

Избегайте нескольких клиентов Kudu на кластер.

Одной из распространенных ошибок кодирования Kudu-Spark является создание экземпляров дополнительных KuduClient объектов. В куду-искре KuduClient принадлежит KuduContext. Код приложения Spark не должен создавать еще один KuduClient, подключающийся к тому же кластеру. Вместо этого код приложения должен использовать KuduContext для доступа к KuduClient с использованием KuduContext#syncClient.

Чтобы диагностировать несколько экземпляров KuduClient в задании Spark, поищите признаки в журналах мастера, перегруженных многими запросами GetTableLocations или GetTabletLocations, приходящими от разных клиентов, обычно в одно и то же время. Этот признак особенно вероятен в коде Spark Streaming, где создание KuduClient для задачи приведет к периодическим волнам мастер-запросов от новых клиентов.

Означает ли это, что я могу одновременно запускать только одну задачу kudu-spark?

Если у меня есть программа потокового воспроизведения, которая всегда записывает данные в куду, Как я могу подключиться к куду с другими программами спарк?

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Более четкое утверждение «избегать нескольких клиентов Kudu на кластер» - «избегать нескольких клиентов Kudu на одно приложение spark».

Вместо этого код приложения должен использовать KuduContext для доступа к KuduClient с использованием KuduContext # syncClient.

0 голосов
/ 29 июня 2019

В программе без Spark вы используете KUDU Client для доступа к KUDU. В приложении Spark для этого кластера KUDU вы используете контекст KUDU, у которого уже есть такой клиент.

Простая JAVA-программа требует клиента KUDU, использующего JAVA API и maven подход.

KuduClient kuduClient = new KuduClientBuilder("kudu-master-hostname").build();

См. http://harshj.com/writing-a-simple-kudu-java-api-program/

Программа Spark / Scala, многие из которых могут быть запущены одновременно против того же кластера с использованием интеграции Spark KUDU. отрывок заимствовано из официального руководства, так как довольно давно я смотрел на это.

import org.apache.kudu.client._
import collection.JavaConverters._

// Read a table from Kudu
val df = spark.read
              .options(Map("kudu.master" -> "kudu.master:7051", "kudu.table" -> "kudu_table"))
              .format("kudu").load

// Query using the Spark API...
df.select("id").filter("id >= 5").show()

// ...or register a temporary table and use SQL
df.registerTempTable("kudu_table")
val filteredDF = spark.sql("select id from kudu_table where id >= 5").show()

// Use KuduContext to create, delete, or write to Kudu tables
val kuduContext = new KuduContext("kudu.master:7051", spark.sparkContext)

// Create a new Kudu table from a dataframe schema
// NB: No rows from the dataframe are inserted into the table
kuduContext.createTable("test_table", df.schema, Seq("key"),
                        new CreateTableOptions()
                      .setNumReplicas(1)
                      .addHashPartitions(List("key").asJava, 3))

// Insert data
kuduContext.insertRows(df, "test_table")

См. https://kudu.apache.org/docs/developing.html

...