Бөлісу құралы:


Использование определяемых пользователем функций C# с Apache Hive и Apache Pig на Apache Hadoop в HDInsight

Узнайте, как использовать определяемые пользователем функции (UDF) C# с Apache Hive и Apache Pig в HDInsight.

Внимание

Для выполнения действий, описанных в этом документе, необходимы кластеры HDInsight под управлением Linux. Linux — это единственная операционная система, используемая для работы с HDInsight 3.4 или более поздних версий. Дополнительные сведения см. в разделе Что представляют собой различные компоненты и версии Hadoop, доступные в HDInsight?

Hive и Pig могут передавать данные во внешние приложения для обработки. Этот процесс называется потоковой передачей. При использовании приложения .NET данные передаются в него через поток STDIN, после чего приложение возвращает результаты через поток STDOUT. Для чтения и записи с помощью потоков STDIN и STDOUT можно использовать Console.ReadLine() и Console.WriteLine() из консольного приложения.

Необходимые компоненты

  • Опыт написания и выполнения сборки кода C#, предназначенного для платформы .NET Framework 4.5.

    Используйте любую интегрированную среду разработки. Мы рекомендуем использовать Visual Studio или Visual Studio Code. В этом руководстве используется Visual Studio 2019.

  • Способ передачи EXE-файлов в кластер и выполнения заданий Pig и Hive. Мы рекомендуем использовать средства Data Lake для Visual Studio, Azure PowerShell и Azure CLI. В этом документе для передачи файлов и выполнения примера запроса Hive используются средства Data Lake для Visual Studio.

    Дополнительные сведения о других способах выполнения запросов Hive см. в статье Что такое Apache Hive и HiveQL в Azure HDInsight?.

  • Hadoop в кластере HDInsight. Дополнительные сведения о создании кластера см. в статье Создание кластеров HDInsight.

.NET в HDInsight

В кластерах HDInsight под управлением Linux для запуска приложений .NET используется Mono (https://mono-project.com). Mono версии 4.2.1 входит в состав HDInsight версии 3.6.

Дополнительные сведения о совместимости Mono с различными версиями платформы .NET Framework см. в разделе Compatibility (Совместимость).

Дополнительные сведения о версиях платформы .NET Framework и Mono, которые входят в состав различных версий HDInsight, см. в разделе Версии компонентов HDInsight.

Создание проектов C#

В следующих разделах описано, как создать проект C# в Visual Studio для определяемых пользователем функций (UDF) Apache Hive и Apache Pig.

Определяемая пользователем функция Apache Hive

Чтобы создать проект C# для UDF Apache Hive:

  1. Запустите Visual Studio.

  2. Выберите Создать новый проект.

  3. В окне Создать проект выберите шаблон Консольное приложение .NET Framework (версия C#). Затем выберите Далее.

  4. В окне Настройка нового проекта введите Имя проектаHiveCSharpи перейдите к Расположению для сохранения нового проекта или создайте расположение. Затем выберите Создать.

  5. В интегрированной среде разработки Visual Studio замените содержимое файла Program.cs следующим кодом:

    using System;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace HiveCSharp
    {
        class Program
        {
            static void Main(string[] args)
            {
                string line;
                // Read stdin in a loop
                while ((line = Console.ReadLine()) != null)
                {
                    // Parse the string, trimming line feeds
                    // and splitting fields at tabs
                    line = line.TrimEnd('\n');
                    string[] field = line.Split('\t');
                    string phoneLabel = field[1] + ' ' + field[2];
                    // Emit new data to stdout, delimited by tabs
                    Console.WriteLine("{0}\t{1}\t{2}", field[0], phoneLabel, GetMD5Hash(phoneLabel));
                }
            }
            /// <summary>
            /// Returns an MD5 hash for the given string
            /// </summary>
            /// <param name="input">string value</param>
            /// <returns>an MD5 hash</returns>
            static string GetMD5Hash(string input)
            {
                // Step 1, calculate MD5 hash from input
                MD5 md5 = System.Security.Cryptography.MD5.Create();
                byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
                byte[] hash = md5.ComputeHash(inputBytes);
    
                // Step 2, convert byte array to hex string
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < hash.Length; i++)
                {
                    sb.Append(hash[i].ToString("x2"));
                }
                return sb.ToString();
            }
        }
    }
    
  6. В строке меню выберите Сборка>Построить решение, чтобы скомпилировать проект.

  7. Закройте решение.

Определяемая пользователем функция Apache Pig

Чтобы создать проект C# для UDF Apache Hive:

  1. Откройте Visual Studio.

  2. В окне Начало работы выберите Создать проект.

  3. В окне Создать проект выберите шаблон Консольное приложение .NET Framework (версия C#). Затем выберите Далее.

  4. В окне Настройка нового проекта введите Имя проектаPigUDFи перейдите к Расположению для сохранения нового проекта или создайте расположение. Затем выберите Создать.

  5. В интегрированной среде разработки Visual Studio замените содержимое файла Program.cs следующим кодом:

    using System;
    
    namespace PigUDF
    {
        class Program
        {
            static void Main(string[] args)
            {
                string line;
                // Read stdin in a loop
                while ((line = Console.ReadLine()) != null)
                {
                    // Fix formatting on lines that begin with an exception
                    if(line.StartsWith("java.lang.Exception"))
                    {
                        // Trim the error info off the beginning and add a note to the end of the line
                        line = line.Remove(0, 21) + " - java.lang.Exception";
                    }
                    // Split the fields apart at tab characters
                    string[] field = line.Split('\t');
                    // Put fields back together for writing
                    Console.WriteLine(String.Join("\t",field));
                }
            }
        }
    }
    

    Этот код анализирует строки, отправленные из Pig, и переформатирует строки, которые начинаются с java.lang.Exception.

  6. В строке меню выберите Сборка>Построить решение, чтобы скомпилировать проект.

  7. Оставьте решение открытым.

Отправка в хранилище

Затем загрузите приложения UDF Hive и Pig в хранилище в кластере HDInsight.

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

  2. В окне Обозреватель сервера щелкните правой кнопкой мыши Azure, выберите Подключиться к подписке Microsoft Azure и завершите процесс входа.

  3. Разверните кластер HDInsight, в который нужно развернуть это приложение. Отобразится запись с текстом (Учетная запись хранения по умолчанию).

    Default storage account, HDInsight cluster, Server Explorer.

    • Если эту запись можно развернуть, то для кластера в качестве хранилища по умолчанию используется учетная запись хранения Azure. Чтобы просмотреть файлы в хранилище по умолчанию кластера, разверните эту запись, а затем дважды щелкните запись (Контейнер по умолчанию).

    • Если эту запись невозможно развернуть, то для кластера в качестве хранилища по умолчанию используется Azure Data Lake Storage. Чтобы просмотреть файлы в хранилище по умолчанию кластера, дважды щелкните запись (Контейнер по умолчанию).

  4. Чтобы передать EXE-файлы, используйте один из следующих методов.

    • Если вы используете учетную запись хранения Azure, щелкните значок Отправить BLOB-объект.

      HDInsight upload icon for new project.

      В диалоговом окне Отправка нового файла в поле Имя файла нажмите Обзор. В диалоговом окне Отправка большого двоичного объекта перейдите в папку bin\debug проекта HiveCSharp, а затем выберите файл HiveCSharp.exe. Наконец, выберите Открыть, а затем нажмите кнопку OK, чтобы завершить отправку.

    • Если используется Azure Data Lake Storage, щелкните правой кнопкой мыши пустое место в списке файлов и выберите Отправить. Наконец, выберите файл HiveCSharp.exe и нажмите кнопку Открыть.

    После завершения передачи HiveCSharp.exe повторите этот процесс для передачи файла PigUDF.exe.

Выполнение запроса Apache Hive

Теперь можно выполнить запрос Hive, использующий приложение UDF для Hive.

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

  2. Разверните пункт Azure, а затем — HDInsight.

  3. Щелкните правой кнопкой мыши кластер, в котором развернуто приложение HiveCSharp, а затем выберите Написать запрос Hive.

  4. В качестве запроса Hive используйте следующий текст:

    -- Uncomment the following if you are using Azure Storage
    -- add file wasbs:///HiveCSharp.exe;
    -- Uncomment the following if you are using Azure Data Lake Storage Gen1
    -- add file adl:///HiveCSharp.exe;
    -- Uncomment the following if you are using Azure Data Lake Storage Gen2
    -- add file abfs:///HiveCSharp.exe;
    
    SELECT TRANSFORM (clientid, devicemake, devicemodel)
    USING 'HiveCSharp.exe' AS
    (clientid string, phoneLabel string, phoneHash string)
    FROM hivesampletable
    ORDER BY clientid LIMIT 50;
    

    Внимание

    Раскомментируйте инструкцию add file, которая соответствует типу хранилища по умолчанию для кластера.

    Этот запрос предусматривает выбор полей clientid, devicemake и devicemodel из hivesampletable и их передачу в приложение HiveCSharp.exe. В результате запроса приложение должно возвратить три поля, которые хранятся под именами clientid, phoneLabel и phoneHash. Кроме этого, в корневом каталоге контейнера хранилища по умолчанию должен быть файл HiveCSharp.exe.

  5. Переключите Интерактивный режим по умолчанию на Пакетный, а затем нажмите кнопку Отправить, чтобы отправить задание в кластер HDInsight. Откроется окно Сводка по заданию Hive.

  6. Щелкайте Обновить до тех пор, пока значение параметра Состояние задания не изменится на Завершено. Чтобы просмотреть выходные данные задания, щелкните Выходные данные задания.

Выполнение задания Apache Pig

Вы также можете запустить задание Pig, которое использует ваше приложение UDF Pig.

  1. Подключитесь к кластеру HDInsight с помощью протокола SSH. (Например, выполните команду ssh sshuser@<clustername>-ssh.azurehdinsight.net.) Дополнительные сведения см. в разделе Использование SSH вместе с HDInsight.

  2. Для запуска командной строки Pig используйте приведенную ниже команду.

    pig
    

    Откроется командная строка grunt>.

  3. Чтобы запустить задание Pig, использующее приложение .NET Framework, введите следующую команду.

    DEFINE streamer `PigUDF.exe` CACHE('/PigUDF.exe');
    LOGS = LOAD '/example/data/sample.log' as (LINE:chararray);
    LOG = FILTER LOGS by LINE is not null;
    DETAILS = STREAM LOG through streamer as (col1, col2, col3, col4, col5);
    DUMP DETAILS;
    

    Инструкция DEFINE создает псевдоним streamer для приложения PigUDF.exe, а CACHE загружает его из хранилища по умолчанию для кластера. Позже streamer используется с оператором STREAM для обработки отдельных строк из LOG и возвращает данные в виде ряда столбцов.

    Примечание.

    Имя приложения, используемое для потоковой передачи, должно быть окружено символом ` (backtick) при псевдониме и символом ' (одинарным кавычками) при использовании.SHIP

  4. После ввода последней строки запустится задание. Появится результат, аналогичный приведенному ниже тексту.

    (2019-07-15 16:43:25 SampleClass5 [WARN] problem finding id 1358451042 - java.lang.Exception)
    (2019-07-15 16:43:25 SampleClass5 [DEBUG] detail for id 1976092771)
    (2019-07-15 16:43:25 SampleClass5 [TRACE] verbose detail for id 1317358561)
    (2019-07-15 16:43:25 SampleClass5 [TRACE] verbose detail for id 1737534798)
    (2019-07-15 16:43:25 SampleClass7 [DEBUG] detail for id 1475865947)
    
  5. Используйте exit для выхода из Pig.

Следующие шаги

В этом документе мы рассмотрели использование приложения .NET Framework из Hive и Pig в HDInsight. Чтобы узнать об использовании Python с Hive и Pig, ознакомьтесь со статьей Использование определяемых пользователем функций Python с Apache Hive и Apache Pig в HDInsight.

Другие способы использования Hive и дополнительную информацию об использовании MapReduce см. в следующих разделах: