Udostępnij za pośrednictwem


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 aplikacji zewnętrznych 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 obiekcie STDOUT. Aby odczytywać i zapisywać dane ze środowisk STDIN i STDOUT, można użyć funkcji Console.ReadLine() 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. Mono w wersji 4.2.1 jest dołączony do usługi HDInsight w wersji 3.6.

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

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

Tworzenie projektów w języku C#

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

Funkcja zdefiniowana przez użytkownika usługi Apache Hive

Aby utworzyć projekt języka C# dla funkcji zdefiniowanej przez użytkownika 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 kliknij przycisk Dalej.

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

  5. W środowisku IDE programu Visual Studio zastąp zawartość 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ę Kompiluj>rozwiązanie kompilacji, aby skompilować projekt.

  7. Zamknij rozwiązanie.

Apache Pig UDF

Aby utworzyć projekt języka C# dla funkcji zdefiniowanej przez użytkownika 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 kliknij przycisk Dalej.

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

  5. W środowisku IDE programu Visual Studio zastąp zawartość 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 języka Pig i ponownie formatuje wiersze rozpoczynające się od java.lang.Exception.

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

  7. Pozostaw rozwiązanie otwarte.

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 widoku>Eksploratora serwera.

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

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

    Default storage account, HDInsight cluster, Server Explorer.

    • 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 klastra, rozwiń wpis, a następnie kliknij dwukrotnie (kontener domyślny).

    • Jeśli nie można rozszerzyć tego wpisu, używasz usługi 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 .

      HDInsight upload icon for new project.

      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 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 usługi 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 Programu Hive korzystające z aplikacji UDF programu Hive.

  1. W programie Visual Studio przejdź do widoku>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 polecenie 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 z instrukcji add file zgodnej 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 apache Pig

Można również uruchomić zadanie pig, które korzysta z aplikacji UDF pig.

  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 korzystające z 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 dla 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) w przypadku aliasu i znakiem ' (pojedynczy cudzysłów) w przypadku użycia z elementem 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 polecenia exit , aby zamknąć świnię.

Następne kroki

W tym dokumencie przedstawiono sposób używania aplikacji .NET Framework z programu 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 Używanie języka Python z usługami Apache Hive i Apache Pig w usłudze HDInsight.

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