Używanie funkcji zdefiniowanych przez użytkownika w języku C# z usługami Apache Hive i Apache Pig na platformie Apache Hadoop w usłudze HDInsight

Dowiedz się, jak używać funkcji zdefiniowanych przez użytkownika w języku C# z usługami Apache Hive i Apache Pig w usłudze HDInsight.

Ważne

Kroki opisane w tym dokumencie działają z klastrami usługi HDInsight opartymi na systemie Linux. Linux jest jedynym systemem operacyjnym używanym w połączeniu z usługą HDInsight w wersji 3.4 lub nowszą. Aby uzyskać więcej informacji, zobacz Przechowywanie wersji składników usługi HDInsight.

Zarówno Hive, jak i Pig mogą przekazywać dane do zewnętrznych aplikacji do przetwarzania. Ten proces jest nazywany przesyłaniem strumieniowym. W przypadku korzystania z aplikacji .NET dane są przekazywane do aplikacji w usłudze STDIN, a aplikacja zwraca wyniki w elemecie STDOUT. Aby odczytywać i zapisywać dane z stDIN i STDOUT, można użyć Console.ReadLine() polecenia i Console.WriteLine() z poziomu aplikacji konsolowej.

Wymagania wstępne

Platforma .NET w usłudze HDInsight

Klastry usługi HDInsight oparte na systemie Linux używają platformy Mono (https://mono-project.com) do uruchamiania aplikacji platformy .NET. Wersja mono 4.2.1 jest dołączona do usługi HDInsight w wersji 3.6.

Aby uzyskać więcej informacji na temat zgodności mono z wersjami .NET Framework, zobacz Zgodność mono.

Aby uzyskać więcej informacji na temat wersji .NET Framework i Mono dołączonej do wersji usługi HDInsight, zobacz Wersje składników usługi HDInsight.

Tworzenie projektów języka C#

W poniższych sekcjach opisano sposób tworzenia projektu języka C# w programie Visual Studio dla funkcji UDF apache Hive i funkcji UDF apache Pig.

Apache Hive UDF

Aby utworzyć projekt języka C# dla funkcji UDF platformy Apache Hive:

  1. Uruchom program Visual Studio.

  2. Wybierz pozycję Utwórz nowy projekt.

  3. W oknie Tworzenie nowego projektu wybierz szablon Aplikacja konsolowa (.NET Framework) (wersja języka C#). Następnie wybierz przycisk Dalej.

  4. W oknie Konfigurowanie nowego projektu wprowadź nazwę projektuHiveCSharp i przejdź do lub utwórz lokalizację , aby zapisać nowy projekt. Następnie wybierz pozycję Utwórz.

  5. W środowisku IDE programu Visual Studio zastąp zawartość pliku Program.cs następującym kodem:

    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. Na pasku menu wybierz pozycję Kompilujrozwiązanie kompilacji>, aby skompilować projekt.

  7. Zamknij rozwiązanie.

Apache Pig UDF

Aby utworzyć projekt języka C# dla funkcji UDF platformy Apache Hive:

  1. Otwórz program Visual Studio.

  2. W oknie Start wybierz pozycję Utwórz nowy projekt.

  3. W oknie Tworzenie nowego projektu wybierz szablon Aplikacja konsolowa (.NET Framework) (wersja języka C#). Następnie wybierz przycisk Dalej.

  4. W oknie Konfigurowanie nowego projektu wprowadź nazwę projektuPigUDF i przejdź do lub utwórz lokalizację , aby zapisać nowy projekt. Następnie wybierz pozycję Utwórz.

  5. W środowisku IDE programu Visual Studio zastąp zawartość pliku Program.cs następującym kodem:

    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));
                }
            }
        }
    }
    

    Ten kod analizuje wiersze wysyłane z elementu Pig i ponownie formatuje wiersze rozpoczynające się od java.lang.Exception.

  6. Na pasku menu wybierz pozycję Kompilujrozwiązanie kompilacji>, aby skompilować projekt.

  7. Pozostaw otwarte rozwiązanie.

Przekazywanie do magazynu

Następnie przekaż aplikacje Hive i Pig UDF do magazynu w klastrze usługi HDInsight.

  1. W programie Visual Studio przejdź do pozycji Wyświetl>Eksploratora serwera.

  2. W Eksploratorze serwera kliknij prawym przyciskiem myszy pozycję Azure, wybierz pozycję Połącz z subskrypcją platformy Microsoft Azure i ukończ proces logowania.

  3. Rozwiń klaster usługi HDInsight, do którego chcesz wdrożyć tę aplikację. Zostanie wyświetlony wpis z tekstem (domyślne konto magazynu).

    Domyślne konto magazynu, klaster usługi HDInsight, Eksplorator serwera

    • Jeśli ten wpis można rozszerzyć, używasz konta usługi Azure Storage jako domyślnego magazynu dla klastra. Aby wyświetlić pliki w domyślnym magazynie dla klastra, rozwiń wpis, a następnie kliknij dwukrotnie (domyślny kontener).

    • Jeśli nie można rozszerzyć tego wpisu, używasz Azure Data Lake Storage jako domyślnego magazynu dla klastra. Aby wyświetlić pliki w domyślnym magazynie klastra, kliknij dwukrotnie wpis (domyślne konto magazynu).

  4. Aby przekazać pliki .exe, użyj jednej z następujących metod:

    • Jeśli używasz konta usługi Azure Storage, wybierz ikonę Przekaż obiekt blob .

      Ikona przekazywania w usłudze HDInsight dla nowego projektu

      W oknie dialogowym Przekazywanie nowego pliku w obszarze Nazwa pliku wybierz pozycję Przeglądaj. W oknie dialogowym Przekazywanie obiektu blob przejdź do folderu bin\debug dla projektu HiveCSharp , a następnie wybierz plik HiveCSharp.exe . Na koniec wybierz pozycję Otwórz , a następnie przycisk OK , aby ukończyć przekazywanie.

    • Jeśli używasz Azure Data Lake Storage, kliknij prawym przyciskiem myszy pusty obszar na liście plików, a następnie wybierz pozycję Przekaż. Na koniec wybierz plik HiveCSharp.exe i wybierz pozycję Otwórz.

    Po zakończeniu przekazywania HiveCSharp.exe powtórz proces przekazywania dla pliku PigUDF.exe .

Uruchamianie zapytania apache Hive

Teraz możesz uruchomić zapytanie Hive, które używa aplikacji UDF programu Hive.

  1. W programie Visual Studio przejdź do pozycji Wyświetl>Eksploratora serwera.

  2. Rozwiń węzeł Azure, a następnie rozwiń węzeł HDInsight.

  3. Kliknij prawym przyciskiem myszy klaster, w którym wdrożono aplikację HiveCSharp , a następnie wybierz pozycję Napisz zapytanie Hive.

  4. Użyj następującego tekstu dla zapytania 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;
    

    Ważne

    Usuń komentarz instrukcji, która jest zgodna add file z typem domyślnego magazynu używanego dla klastra.

    To zapytanie wybiera clientidpola , devicemakei devicemodel z hivesampletable, a następnie przekazuje pola do aplikacji HiveCSharp.exe . Zapytanie oczekuje, że aplikacja zwróci trzy pola, które są przechowywane jako clientid, phoneLabeli phoneHash. Zapytanie oczekuje również znalezienia HiveCSharp.exe w katalogu głównym domyślnego kontenera magazynu.

  5. Przełącz domyślną interakcyjną usługę Batch, a następnie wybierz pozycję Prześlij , aby przesłać zadanie do klastra usługi HDInsight. Zostanie otwarte okno Podsumowanie zadania programu Hive .

  6. Wybierz pozycję Odśwież , aby odświeżyć podsumowanie, dopóki stan zadania nie zmieni się na Ukończono. Aby wyświetlić dane wyjściowe zadania, wybierz pozycję Dane wyjściowe zadania.

Uruchamianie zadania usługi Apache Pig

Możesz również uruchomić zadanie pig, które używa aplikacji Pig UDF.

  1. Użyj protokołu SSH, aby nawiązać połączenie z klastrem usługi HDInsight. (Na przykład uruchom polecenie ssh sshuser@<clustername>-ssh.azurehdinsight.net.) Aby uzyskać więcej informacji, zobacz Use SSH withHDInsight (Używanie protokołu SSH z usługąHDInsight).

  2. Użyj następującego polecenia, aby uruchomić wiersz polecenia Pig:

    pig
    

    Zostanie grunt> wyświetlony monit.

  3. Wprowadź następujące polecenie, aby uruchomić zadanie pig, które używa aplikacji .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;
    

    Instrukcja DEFINE tworzy alias streamer aplikacji PigUDF.exe i CACHE ładuje go z domyślnego magazynu dla klastra. streamer Później jest używany z operatorem STREAM do przetwarzania pojedynczych wierszy zawartych w LOG i zwracania danych jako serii kolumn.

    Uwaga

    Nazwa aplikacji używana do przesyłania strumieniowego musi być otoczona znakiem ` (backtick) po aliasie i znaku (pojedynczego cudzysłowu ' ) w przypadku użycia z SHIP.

  4. Po wprowadzeniu ostatniego wiersza zadanie powinno zostać uruchomione. Zwraca dane wyjściowe podobne do następującego tekstu:

    (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. Użyj exit polecenia , aby zamknąć świnię.

Następne kroki

W tym dokumencie przedstawiono sposób używania aplikacji .NET Framework z usług Hive i Pig w usłudze HDInsight. Jeśli chcesz dowiedzieć się, jak używać języka Python z usługami Hive i Pig, zobacz Use Python with Apache Hive and Apache Pig in HDInsight (Używanie języka Python z usługami Apache Hive i Apache Pig w usłudze HDInsight).

Aby uzyskać inne sposoby korzystania z programu Hive i dowiedzieć się więcej o korzystaniu z usługi MapReduce, zobacz następujące artykuły: