Как найти имя мастера KUDU или порт, в котором находится база данных KUDU в моем кластере cloudera?

Я пытаюсь записать кадр данных Spark в базу данных Kudu, но я не знаю мастера Kudu. Кластер, который я использую, является кластером Cloudera.

Как найти мастера Куду в кластере?

2 ответа

Решение

Вот пример Python с использованием клиента Python v3 ( https://cloudera.github.io/cm_api/docs/python-client-swagger/):

#!/usr/local/bin/python
import cm_client

# Configure HTTP basic authorization: basic
#configuration = cm_client.Configuration()
cm_client.configuration.username = 'admin'
cm_client.configuration.password = 'admin'

# Create an instance of the API class
api_client = cm_client.ApiClient("http://your-cdh-cluster-cm-host:7180/api/v30")

# create an instance of the ServicesResourceApi class
service_api_instance = cm_client.ServicesResourceApi(api_client)

# create an instance of the HostsResourceApi class
host_api_instance = cm_client.HostsResourceApi(api_client)

# find KUDU_MASTER roles in the CDH cluster
cluster_roles = service_api_instance.read_roles("Cluster 1", "KUDU-1")
for role in cluster_roles.items:
  if role.type == "KUDU_MASTER":
    role_host = host_api_instance.read_host(role.host_ref.host_id, view="full")
    print("Kudu master is located on %s\n" % role_host.hostname)

Я знаю, что это не лучший способ, но это один из быстрых способов. Предположим, у нас уже есть таблица kudu(в случае, если вы не создаете тестовую / временную таблицу с помощью impala), просто сделайте описание, отформатированное для этой таблицы. Вы получите кучу подробностей, в том числе подробные сведения о мастере kudu(имя хоста), где порт будет 8051. Я считаю, что как только вы узнаете подробности хоста и порта, вы сможете изучить многие из них для своего фрейма данных Spark.

Синтаксис временной таблицы:

СОЗДАТЬ ТАБЛИЦУ kudu_no_partition_by_clause ( id bigint PRIMARY KEY, s STRING, b BOOLEAN), СОХРАНЕННОЕ КАК KUDU;

Синтаксис для описания: описать форматированное имя_таблицы;

БЮР:

Подробности веб-администрирования Kudu: https://kudu.apache.org/releases/0.6.0/docs/administration.html

Куду с примерами искры:https://kudu.apache.org/docs/developing.html

Ура!!

Вот очень простой пример использования Ja va-клиента Cloudera Manager ( https://cloudera.github.io/cm_api/docs/ja va-client-swagger/)

package cloudera.kudu_example;

import java.io.IOException;

import com.cloudera.api.swagger.HostsResourceApi;
import com.cloudera.api.swagger.ServicesResourceApi;
import com.cloudera.api.swagger.client.ApiClient;
import com.cloudera.api.swagger.client.ApiException;
import com.cloudera.api.swagger.client.Configuration;
import com.cloudera.api.swagger.model.ApiHost;
import com.cloudera.api.swagger.model.ApiRole;
import com.cloudera.api.swagger.model.ApiRoleList;

public class App {
    public static void main( String[] args ) throws IOException {
        ApiClient cmClient = Configuration.getDefaultApiClient();

        cmClient.setBasePath(args[0]);
        cmClient.setUsername(args[1]);
        cmClient.setPassword(args[2]);

        cmClient.setVerifyingSsl(false);
        HostsResourceApi hostsApiInstance = new HostsResourceApi();
        ServicesResourceApi servicesApiInstance = new ServicesResourceApi();
        try {
            ApiRoleList apiRoles = servicesApiInstance.readRoles("Cluster 1", "KUDU-1");
            for(ApiRole role : apiRoles.getItems()) {
                if(role.getType().equalsIgnoreCase("KUDU_MASTER")) {
                    ApiHost host = hostsApiInstance.readHost(role.getHostRef().getHostId(), "full");
                    System.out.printf("Kudu master runs at %s. IP: %s, status %s", host.getHostname(), host.getIpAddress(), host.getEntityStatus());
                }
            }

        } catch (ApiException e) {
          System.err.println("Exception when calling ClustersResourceApi#readClusters");
          e.printStackTrace();
        }
    }
}
Другие вопросы по тегам