Door de gebruiker gedefinieerde C#-functies gebruiken met Apache Hive en Apache Pig in Apache Hadoop in HDInsight

Meer informatie over het gebruik van door de gebruiker gedefinieerde C#-functies (UDF) met Apache Hive en Apache Pig in HDInsight.

Belangrijk

De stappen in dit document werken met HDInsight-clusters op basis van Linux. Linux is het enige besturingssysteem dat wordt gebruikt in HDInsight-versie 3.4 of hoger. Zie versiebeheer voor HDInsight-onderdelen voor meer informatie.

Zowel Hive als Pig kunnen gegevens doorgeven aan externe toepassingen voor verwerking. Dit proces wordt streaming genoemd. Wanneer u een .NET-toepassing gebruikt, worden de gegevens doorgegeven aan de toepassing op STDIN en retourneert de toepassing de resultaten op STDOUT. Als u wilt lezen en schrijven vanuit STDIN en STDOUT, kunt u en Console.WriteLine() vanuit een consoletoepassing.Console.ReadLine()

Vereisten

  • Een vertrouwdheid met het schrijven en bouwen van C#-code die is gericht op .NET Framework 4.5.

    Gebruik de IDE die u wilt. Visual Studio of Visual Studio Code wordt aangeraden. In de stappen in dit document wordt Visual Studio 2019 gebruikt.

  • Een manier om .exe bestanden te uploaden naar het cluster en Pig- en Hive-taken uit te voeren. We raden Data Lake Tools voor Visual Studio, Azure PowerShell en Azure CLI aan. In de stappen in dit document worden de Data Lake Tools voor Visual Studio gebruikt om de bestanden te uploaden en de Hive-voorbeeldquery uit te voeren.

    Zie Wat is Apache Hive en HiveQL in Azure HDInsight voor meer informatie over andere manieren om Hive-query's uit te voeren.

  • Een Hadoop op HDInsight-cluster. Zie HDInsight-clusters maken voor meer informatie over het maken van een cluster.

.NET in HDInsight

HdInsight-clusters op basis van Linux gebruiken Mono (https://mono-project.com) om .NET-toepassingen uit te voeren. Mono versie 4.2.1 is opgenomen in HDInsight versie 3.6.

Zie Mono-compatibiliteit met .NET Framework-versies voor meer informatie over monocompatibiliteit.

Zie HDInsight-onderdeelversies voor meer informatie over de versie van .NET Framework en Mono die zijn opgenomen in HDInsight-versies.

De C#-projecten maken

In de volgende secties wordt beschreven hoe u een C#-project maakt in Visual Studio voor een Apache Hive UDF en een Apache Pig UDF.

Apache Hive UDF

Een C#-project maken voor een Apache Hive UDF:

  1. Start Visual Studio.

  2. Selecteer Een nieuw project maken.

  3. Kies in het venster Een nieuw project maken de console-appsjabloon (.NET Framework) (de C#-versie). Selecteer Volgende.

  4. Voer in het venster Uw nieuwe project configureren een projectnaam van HiveCSharp in en navigeer naar of maak een locatie om het nieuwe project op te slaan. Selecteer vervolgens Maken.

  5. Vervang in visual Studio IDE de inhoud van Program.cs door de volgende code:

    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. Selecteer Build Build>Solution in de menubalk om het project te bouwen.

  7. Sluit de oplossing.

Apache Pig UDF

Een C#-project maken voor een Apache Hive UDF:

  1. Open Visual Studio.

  2. Selecteer in het Startvenster de optie Een nieuw project maken.

  3. Kies in het venster Een nieuw project maken de console-appsjabloon (.NET Framework) (de C#-versie). Selecteer Volgende.

  4. Voer in het venster Uw nieuwe project configureren een projectnaam van PigUDF in en ga naar of maak een locatie om het nieuwe project op te slaan. Selecteer vervolgens Maken.

  5. Vervang in visual Studio IDE de inhoud van Program.cs door de volgende code:

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

    Deze code parseert de regels die worden verzonden van Pig en herformatteert lijnen die beginnen met java.lang.Exception.

  6. Kies Build Build>Solution in de menubalk om het project te bouwen.

  7. Laat de oplossing open.

Uploaden naar opslag

Upload vervolgens de Hive- en Pig UDF-toepassingen naar opslag in een HDInsight-cluster.

  1. Navigeer in Visual Studio naar Server Explorer weergeven>.

  2. Klik in Server Explorer met de rechtermuisknop op Azure, selecteer Verbinding maken naar het Microsoft Azure-abonnement en voltooi het aanmeldingsproces.

  3. Vouw het HDInsight-cluster uit waarnaar u deze toepassing wilt implementeren. Er wordt een vermelding met de tekst (standaardopslagaccount) weergegeven.

    Default storage account, HDInsight cluster, Server Explorer.

    • Als deze vermelding kan worden uitgebreid, gebruikt u een Azure Storage-account als standaardopslag voor het cluster. Als u de bestanden in de standaardopslag voor het cluster wilt weergeven, vouwt u de vermelding uit en dubbelklikt u vervolgens op de (standaardcontainer).

    • Als deze vermelding niet kan worden uitgebreid, gebruikt u Azure Data Lake Storage als de standaardopslag voor het cluster. Als u de bestanden in de standaardopslag voor het cluster wilt weergeven, dubbelklikt u op de vermelding (Standaardopslagaccount).

  4. Gebruik een van de volgende methoden om de .exe-bestanden te uploaden:

    • Als u een Azure Storage-account gebruikt, selecteert u het pictogram Blob uploaden.

      HDInsight upload icon for new project.

      Selecteer Bladeren in het dialoogvenster Nieuw bestand uploaden onder Bestandsnaam. Ga in het dialoogvenster Blob uploaden naar de map bin\debug voor het HiveCSharp-project en kies vervolgens het HiveCSharp.exe bestand. Selecteer Ten slotte Openen en vervolgens OK om het uploaden te voltooien.

    • Als u Azure Data Lake Storage gebruikt, klikt u met de rechtermuisknop op een leeg gebied in de lijst met bestanden en selecteert u Uploaden. Kies ten slotte het HiveCSharp.exe bestand en selecteer Openen.

    Zodra het uploaden van het HiveCSharp.exe is voltooid, herhaalt u het uploadproces voor het PigUDF.exe-bestand .

Een Apache Hive-query uitvoeren

U kunt nu een Hive-query uitvoeren die gebruikmaakt van uw Hive UDF-toepassing.

  1. Navigeer in Visual Studio naar Server Explorer weergeven>.

  2. Vouw Azure uit en vouw vervolgens HDInsight uit.

  3. Klik met de rechtermuisknop op het cluster waarnaar u de HiveCSharp-toepassing hebt geïmplementeerd en selecteer vervolgens Een Hive-query schrijven.

  4. Gebruik de volgende tekst voor de Hive-query:

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

    Belangrijk

    Verwijder opmerkingen bij de add file instructie die overeenkomt met het type standaardopslag dat wordt gebruikt voor uw cluster.

    Met deze query selecteert u de clientid, devicemakeen devicemodel de velden van hivesampletablewaaruit de velden worden doorgegeven aan de HiveCSharp.exe-toepassing . De query verwacht dat de toepassing drie velden retourneert, die zijn opgeslagen als clientid, phoneLabelen phoneHash. De query verwacht ook HiveCSharp.exe te vinden in de hoofdmap van de standaardopslagcontainer.

  5. Zet de standaard interactive naar Batch en selecteer verzenden om de taak naar het HDInsight-cluster te verzenden. Het venster Samenvatting van Hive-taak wordt geopend.

  6. Selecteer Vernieuwen om de samenvatting te vernieuwen totdat de taakstatus wordt gewijzigd in Voltooid. Als u de taakuitvoer wilt weergeven, selecteert u Taakuitvoer.

Een Apache Pig-taak uitvoeren

U kunt ook een Pig-taak uitvoeren die gebruikmaakt van uw Pig UDF-toepassing.

  1. Gebruik SSH om verbinding te maken met uw HDInsight-cluster. (Voer bijvoorbeeld de opdracht ssh sshuser@<clustername>-ssh.azurehdinsight.netuit.) Zie SSH gebruiken metHDInsight voor meer informatie.

  2. Gebruik de volgende opdracht om de Pig-opdrachtregel te starten:

    pig
    

    Er wordt een grunt> prompt weergegeven.

  3. Voer het volgende in om een Pig-taak uit te voeren die gebruikmaakt van de .NET Framework-toepassing:

    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;
    

    De DEFINE instructie maakt een alias van streamer voor de PigUDF.exe toepassing en CACHE laadt deze uit de standaardopslag voor het cluster. streamer Later wordt de STREAM operator gebruikt om de afzonderlijke regels in LOG de operator te verwerken en de gegevens als een reeks kolommen te retourneren.

    Notitie

    De toepassingsnaam die wordt gebruikt voor streaming, moet worden omgeven door het ` teken (backtick) als alias en door het ' teken (enkele aanhalingsteken) bij gebruik met SHIP.

  4. Nadat u de laatste regel hebt ingevoerd, moet de taak worden gestart. Deze retourneert uitvoer die vergelijkbaar is met de volgende tekst:

    (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. Gebruik exit dit om varken af te sluiten.

Volgende stappen

In dit document hebt u geleerd hoe u een .NET Framework-toepassing gebruikt vanuit Hive en Pig in HDInsight. Als u wilt weten hoe u Python gebruikt met Hive en Pig, raadpleegt u Python gebruiken met Apache Hive en Apache Pig in HDInsight.

Zie de volgende artikelen voor andere manieren om Hive te gebruiken en voor meer informatie over het gebruik van MapReduce: