Подключение к эмулятору HDInsight

Я пытаюсь подключиться к С#.

Вот класс, который успешно отправляет запросы куста в мой удаленный кластер HDInsight. что мне нужно изменить здесь, чтобы подключиться к локальному эмулятору

public class HadoopImporter : IImporter
{
    public static readonly Logger log = LogManager.GetCurrentClassLogger();

    public void Import(string _query)
    {
        try
        {
            log.Warn("Inside Hive submission method");
            var store = new X509Store();
            store.Open(OpenFlags.ReadOnly);
            var cert =
                store.Certificates.Cast<X509Certificate2>()
                     .First(item => item.Thumbprint == "MYCERTTUMBPRINT");
            if (cert == null)
                log.Error("no cert found");
            log.Warn(cert.FriendlyName);
            log.Warn("got the cert with thumbprint ", cert.Thumbprint.ToString())
            ;

            log.Warn("trying to create credentials from cert");
            var creds = new JobSubmissionCertificateCredential(new Guid("MYSUBSCRIPTIONID"),
                                                               cert, "MYSTORAGECONTAINER");
            log.Warn("trying to connect with cert");
            var jobClient = JobSubmissionClientFactory.Connect(creds);


            log.Warn("Setting Hive job parameters");
            var hiveJob = new HiveJobCreateParameters()
                {
                    Query = _query,
                    StatusFolder = "/samplequeryoutput"
                };

            var jobResults = jobClient.CreateHiveJob(hiveJob);

            log.Warn("Executing wait for jhive results");
            WaitForJobCompletion(jobResults, jobClient);

            using (var stream = jobClient.GetJobOutput(jobResults.JobId))
            {
                var reader = new StreamReader(stream);
                var res = reader.ReadToEnd();
                log.Warn("trying to get the job results " + res.ToString());
            }
        }
        catch (Exception exp)
        {   
            log.Error(exp);

        }
    }


    private static void WaitForJobCompletion(JobCreationResults jobDetails, IJobSubmissionClient client)
    {
        var jobInProgress = client.GetJob(jobDetails.JobId);
        while (jobInProgress.StatusCode != JobStatusCode.Completed && jobInProgress.StatusCode != JobStatusCode.Failed)
        {
            log.Warn("Inside the while loop waiting for hive job to complete");
            jobInProgress = client.GetJob(jobInProgress.JobId);
            Thread.Sleep(TimeSpan.FromSeconds(10));
        }
        log.Trace("HIVE Job has  Imported " + jobDetails.JobId);
    }
}

person Jules    schedule 02.01.2014    source источник
comment
Вы действительно имеете в виду MYSTORAGECONTAINER? Это должно быть имя кластера.   -  person Simon Elliston Ball    schedule 02.01.2014


Ответы (1)


У вас должна быть возможность подключиться к локальному моноблоку, используя реализацию клиента REST.

Вы ищете интерфейс WebHCatHttpClient. В приведенном ниже коде выполняется базовый запрос к моему локальному блоку.

var httpClient = new WebHCatHttpClient(new Uri("http://localhost:50111/"), "username", "password");
string outputDir = "basichivejob";
var task = httpClient.CreateHiveJob(@"select * from iris;", null, null, outputDir, null);
task.Wait();
var response = task.Result;
var output = response.Content.ReadAsAsync<JObject>();
output.Wait();
response.EnsureSuccessStatusCode();

string id = output.Result.GetValue("id").ToString();
httpClient.WaitForJobToCompleteAsync(id).Wait();

Дополнительные сведения см. в документах SDK.

person Simon Elliston Ball    schedule 02.01.2014
comment
У вас есть пример кода, использующий этот класс? Мне не ясно, какие параметры говорят классу подключаться локально. - person Jules; 02.01.2014
comment
Привет, Джулс, мой первый ответ, возможно, немного ввел в заблуждение, извините за это. Код здесь должен сделать всю работу за вас... обратите внимание на порт 50111, который является конечной точкой WebHCat. - person Simon Elliston Ball; 05.01.2014