0

У меня есть данные в Big Query Я хочу запустить аналитику в искровом кластере. По документации, если я создаю искровой кластер, он должен иметь соединитель Big Query. Я искал любой пример кода для этого, нашел его в pyspark. Не удалось найти примеры C#. Также найдены некоторые documentation о функциях пакета nuget API DataProc.Исходный кластер Google DataProc API с C#

Ищет образец, чтобы запустить искровой кластер в облаке Google с помощью C#.

+0

Благодарим за спрашивая об этом. Когда я готовил пример, я понял, что автогенерированный API V1, доступный на nuget, устарел и не содержит методов, необходимых для этого. Я собираюсь работать над тем, чтобы это подтолкнуло как можно скорее. Я обновлю, когда пакеты будут обновлены. –

+0

@AngusDavis Спасибо за ответ. Все идеи, как долго это будет до того, как образец и новый пакет будут готовы? – PUG

+0

Обновлены пакеты NuGet. Я буду работать над получением небольшого образца вместе. –

ответ

1

После установки Google.Apis.Dataproc.v1 версии 1.10.0.40 (или выше):

Ниже приведен краткий пример приложения консоли для создания кластера Dataproc в C#:

using Google.Apis.Auth.OAuth2; 
using Google.Apis.Services; 
using Google.Apis.Dataproc.v1; 
using Google.Apis.Dataproc.v1.Data; 

using System; 
using System.Threading; 

namespace DataprocSample { 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string project = "YOUR PROJECT HERE"; 
      string dataprocGlobalRegion = "global"; 
      string zone = "us-east1-b"; 
      string machineType = "n1-standard-4"; 
      string clusterName = "sample-cluster"; 
      int numWorkers = 2; 
      // See the docs for Application Default Credentials: 
      // https://developers.google.com/identity/protocols/application-default-credentials 
      // In general, a previous 'gcloud auth login' will suffice if running as yourself. 
      // If running from a VM, ensure the VM was started such that the service account has 
      // the CLOUD_PLATFORM scope. 
      GoogleCredential credential = GoogleCredential.GetApplicationDefaultAsync().Result; 
      if (credential.IsCreateScopedRequired) 
      { 
       credential = credential.CreateScoped(new[] { DataprocService.Scope.CloudPlatform }); 
      } 

      DataprocService service = new DataprocService(
       new BaseClientService.Initializer() 
       { 
        HttpClientInitializer = credential, 
        ApplicationName = "Dataproc Sample", 
       }); 

      // Create a new cluster: 
      Cluster newCluster = new Cluster 
      { 
       ClusterName = clusterName, 
       Config = new ClusterConfig 
       { 
        GceClusterConfig = new GceClusterConfig 
        { 
         ZoneUri = String.Format(
          "https://www.googleapis.com/compute/v1/projects/{0}/zones/{1}", 
          project, zone), 
        }, 
        MasterConfig = new InstanceGroupConfig 
        { 
         NumInstances = 1, 
         MachineTypeUri = String.Format(
          "https://www.googleapis.com/compute/v1/projects/{0}/zones/{1}/machineTypes/{2}", 
          project, zone, machineType), 
        }, 
        WorkerConfig = new InstanceGroupConfig 
        { 
         NumInstances = numWorkers, 
         MachineTypeUri = String.Format(
          "https://www.googleapis.com/compute/v1/projects/{0}/zones/{1}/machineTypes/{2}", 
          project, zone, machineType), 
        }, 
       }, 
      }; 
      Operation createOperation = 
       service.Projects.Regions.Clusters.Create(newCluster, project, dataprocGlobalRegion).Execute(); 
      // Poll the operation: 
      while (!IsDone(createOperation)) 
      { 
       Console.WriteLine("Polling operation {0}", createOperation.Name); 
       createOperation = 
        service.Projects.Regions.Operations.Get(createOperation.Name).Execute(); 
       Thread.Sleep(1000); 
      } 

      Console.WriteLine("Done creating cluster {0}", newCluster.ClusterName); 
     } 
     static bool IsDone(Operation op) 
     { 
      return op.Done ?? false; 
     } 
    } 
} 
+0

Спасибо за ответ, я пытаюсь выполнить аутентификацию с помощью 'GoogleCredential.GetApplicationDefaultAsync'. Я загрузил наш ключевой файл службы и указал на него переменную окружения GOOGLE_APPLICATION_CREDENTIALS', но все равно получаю исключение. 'System.InvalidOperationException: Учетные данные по умолчанию для приложения недоступны. Они доступны, если они запущены в Google Compute Engine. В противном случае должна быть указана переменная среды GOOGLE_APPLICATION_CREDENTIALS, указывающая на файл, определяющий учетные данные. – PUG

+0

Нужны ли нам разрешения для Google Compute Engine и Google Cloud Dataproc, прежде чем мы сможем попробовать запустить кластер? – PUG

+0

@TeslaCodes - вы хотите, чтобы API Dataproc и Compute Engine были включены (самый простой способ сделать это - перейти к вычислительному движку и экранам Dataproc в Cloud Console). Сообщение об ошибке, которое вы видите, указывает на то, что у клиентской библиотеки возникают проблемы с получением учетных данных. Если вы запускаете приложение в GCE, убедитесь, что виртуальная машина имеет учетную запись службы, а учетная запись службы имеет доступ ко всем облачным API, указав область CLOUD_PLATFORM OAuth (это самый простой способ). При запуске локально попробуйте распечатать значение GOOGLE_APPLICATION_CREDENTIALS и значение FileInfo.Exists. –

Смежные вопросы