Статьи

Доступ к журналам Hadoop в HDInsight

Один из вопросов, который команда HDInsight часто видит, — это вариант вопроса «Как мне выяснить, что пошло не так, когда что-то пошло не так?» Если вы знакомы с Hadoop, вы, вероятно, также знаете, как закатывать рукава и копаться в журналах Hadoop, чтобы ответить на этот вопрос. Тем не менее, мы обнаружили, что многие люди, использующие HDInsight, не знают, что большая часть информации журналирования, к которой они привыкли, легко доступна для кластеров HDInsight. Это краткое сообщение с описанием типов журналов, которые записываются в вашу учетную запись хранения Azure при раскрутке кластера HDInsight:

  1. Журналы установки Azure, журналы установки Hadoop и журналы службы Hadoop записываются в хранилище таблиц Azure, и
  2. Журналы задач записываются в хранилище BLOB-объектов Azure для заданий, отправляемых через Templeton.

Читай дальше, чтобы узнать больше.

Журналы, записанные в хранилище таблиц Windows Azure

При создании кластера HDInsight в хранилище таблиц Azure автоматически создаются три таблицы:

  • setuplog : журнал событий / исключений, возникающих при подготовке / настройке виртуальных машин HDInsight.
  • hadoopinstalllog : журнал событий / исключений, возникших при установке Hadoop в кластере. Эта таблица может быть полезна при отладке проблем, связанных с кластерами, созданными с пользовательскими параметрами.
  • hadoopservicelog : журнал событий / исключений, записанных всеми службами Hadoop. Эта таблица может быть полезна при устранении проблем, связанных со сбоями заданий в кластерах HDInsight.

Примечание : Для того, чтобы эти имена таблиц уникальны, имена в следующем формате: у clusternameDDmonYYYY на ЧЧММССССС hadoopservicelog.

Существует множество инструментов для доступа к данным в этих таблицах (например, Visual Studio, Azure Storage Explorer, Power Query for Excel). Здесь я  сначала буду использовать  Power Query , а затем  Visual Studio , чтобы изучить  таблицу hadoopservicelog . В обоих случаях я предполагаю, что вы  создали кластер HDInsight .

Использование Power Query

Я предполагаю, что у вас установлен  Power Query :

1.  Подключитесь к хранилищу таблиц Azure из Excel .

2. Щелкните правой кнопкой  мыши  таблицу hadoopservicelog на панели «Навигатор» и выберите «  Редактировать запрос» .

образ

3. Необязательно: Удалите столбцы «Ключ разделения», «Ключ строки» и «Отметка времени», выбрав их, затем нажмите « Удалить столбцы»  в параметрах на ленте.

4. Щелкните по   столбцу « Содержимое», чтобы выбрать столбцы, которые вы хотите включить. Для моего примера я выбрал TraceLevelRole и  ComponentName :

образ

5. Выберите столбцы TraceLevel, Role и ComponentName, а затем щелкните   элемент « Группировать по» на ленте.

образ

6. Нажмите кнопку ОК в диалоговом окне «Группировать по»:

образ

7. Наконец, нажмите  Применить и закрыть :

образ

Теперь вы можете использовать Excel для фильтрации и сортировки по мере необходимости. Очевидно, что вы можете захотеть включить другие столбцы (например, «Сообщение»), чтобы детализировать проблемы, когда они возникают, но выбор и группировка столбцов, описанных выше, дает приличную картину того, что происходит со службами Hadoop. Эта же идея может быть применена к  таблицам setuplog  и  hadoopinstalllog  .

Использование Visual Studio

1. В Visual Studio выберите  Обозреватель серверов  в   меню Вид :

образ

2. Разверните  Windows Azure , щелкните правой кнопкой мыши  Хранилище и выберите  Подключить внешнее хранилище

образ

3. Укажите имя и ключ своей учетной записи хранения.

образ

4. Разверните свою учетную запись хранения, разверните  Таблицы и дважды щелкните   таблицу hadoopservicelog .

образ

5. Добавьте фильтр, чтобы исключить строки, в которых TraceLevel = ‘INFO’ (дополнительную информацию о построении фильтров можно найти здесь: Построение строк фильтра для конструктора таблиц ):

образ

Если вы разработчик, Visual Studio предоставляет вам дополнительный уровень детализации, который я пропустил при использовании Excel, и вам не нужен «дополнительный» инструмент.

Журналы, записанные в хранилище BLOB-объектов Windows Azure

Журналы, записанные в таблицы Windows Azure (как описано выше), обеспечивают один уровень понимания того, что происходит с кластером HDInsight. Однако эти таблицы не предоставляют журналы на уровне задач, которые могут быть полезны для дальнейшего изучения проблем, когда они возникают. Чтобы обеспечить следующий уровень детализации, кластеры HDInsight настроены на запись журналов задач в вашу учетную запись хранилища BLOB-объектов для любой работы, отправляемой через Templeton. (Практически это означает, что задания, отправленные с помощью  командлетов Windows Azure PowerShell  или API-интерфейсов передачи заданий .NET , а не задания, отправленные через RDP / доступ из командной строки к кластеру.) Я проиллюстрирую, как получить доступ к этим журналам, отправив задание и затем с помощью  CloudXPlorer  для просмотра журналов.

Отправить работу

Я запускаю пример WordCount, который устанавливается вместе с кластером HDInsight. Вы можете отправить это задание с помощью  командлетов PowerShell  или  API . Обратите внимание, что в каждом примере я устанавливал StatusFolder  на «wordcountstatus». Это будет папка с журналами задач. Также обратите внимание, что если вы используете командлеты PowerShell, журналы задач собираются по умолчанию. С помощью API представления заданий .NET вы должны установить EnableTaskLogs = true, чтобы собирать журналы задач.

Командлеты Powershell

$clusterName = "bswandemo"
 
$wordCountJobDef = New-AzureHDInsightMapReduceJobDefinition `
    -JarFile "wasb:///example/jars/hadoop-examples.jar" `
    -ClassName "wordcount" `
    -Arguments "wasb:///example/data/gutenberg/davinci.txt", `
               "wasb:///wordcountoutput" 
 
$wordCountJob = Start-AzureHDInsightJob `
    -Cluster $clusterName `
    -JobDefinition $wordCountJobDef
 
Wait-AzureHDInsightJob `
    -Job $wordCountJob `
    -WaitTimeoutInSeconds 3600
 
Get-AzureHDInsightJobOutput `
    -Cluster $clusterName `
    -JobId $wordCountJob.JobId `
    -StandardError

API .NET Job Submission

string clusterName = "bswandemo2";
var store = new X509Store();
store.Open(OpenFlags.ReadOnly);
var cert = store.Certificates.Cast<X509Certificate2>().First(item => item.Thumbprint == "{Thumbprint of certificate}");
var jobSubmissionCreds = new JobSubmissionCertificateCredential(new Guid("{Your Subscription ID}"), cert, clusterName);
var jobClient = JobSubmissionClientFactory.Connect(jobSubmissionCreds);
 
var MRJob = new MapReduceJobCreateParameters()
{
    ClassName = "wordcount",
    JobName = "WordCount",
    JarFile = "wasb:///example/jars/hadoop-examples.jar",
    StatusFolder = "wordcountstatus",
    EnableTaskLogs = true
};
MRJob.Arguments.Add("wasb:///example/data/gutenberg/davinci.txt");
MRJob.Arguments.Add("wasb:///wordcountoutput");
var jobResults = jobClient.CreateMapReduceJob(MRJob);

Примечание . Если вы не укажете  StatusFolder , он будет создан для вас с использованием GUID для имени папки.

Просмотр журналов

После завершения работы вы можете просматривать журналы, используя любой из множества доступных инструментов для просмотра хранилища BLOB-объектов Azure. Здесь я использую CloudXplorer. Обратите внимание, что была создана новая папка ( templeton-hadoop ) для хранения выходной информации о задании. Файлы в каждой из папок job_ содержат высокоуровневую информацию о завершении задания (процентComplete, exitValue, userArgs и т. Д.). Однако в   папке администратора (под этой папкой, поскольку это был пользователь, отправивший задание), вы найдете слово wordcountstatus (указанное в момент, когда я отправил задание), которое содержит информацию о попытках выполнения задачи для каждой попытки выполнения задания.

образ

Каждая из папок попытки_ содержит   файлы stderrstdout и  syslog . Вы можете углубиться в это, чтобы лучше понять, если / когда что-то не так:

образ

образ

Также обратите внимание, что   файл job.xml.html содержит все параметры Hadoop, которые использовались при запуске отправленного вами задания:

образ

образ

Отключение ведения журнала

Надеемся, что информация, зарегистрированная в вашей учетной записи хранения Azure, окажется полезной при отладке заданий Hadoop. Однако я хочу отметить, что, поскольку эти журналы записываются в вашу учетную запись хранения, вам выставляется счет за их хранение. Вам следует создать политику хранения / очистки, соответствующую вашим потребностям в разработке, чтобы избежать ненужных расходов.

В настоящее время сбор журналов задач (журналов, записанных в хранилище BLOB-объектов) по умолчанию отключен при использовании API представления заданий .NET (декабрьское обновление, версия 1.0.4.0). Чтобы включить его, установите EnableTaskLogs = true при определении вашей работы (см. Пример выше). В предыдущих версиях коллекция задач входила по умолчанию.

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

Как всегда, нам интересны ваши отзывы о полезности этих журналов.

Спасибо.

-Брайан