C# felhasználó által definiált függvények használata az Apache Hive és az Apache Pig használatával az Apache Hadoopon a HDInsightban

Megtudhatja, hogyan használhatja a C# felhasználó által definiált függvényeket (UDF) az Apache Hive és az Apache Pig on HDInsight használatával.

Fontos

A dokumentum lépései Linux-alapú HDInsight-fürtökkel működnek. A Linux az egyetlen operációs rendszer, amely a HDInsight 3.4-es vagy újabb verziói esetében használható. További információ: HDInsight-összetevők verziószámozása.

A Hive és a Pig is továbbíthat adatokat külső alkalmazásoknak feldolgozás céljából. Ezt a folyamatot streamelésnek nevezzük. .NET-alkalmazás használatakor a rendszer az adatokat az STDIN-en továbbítja az alkalmazásnak, és az alkalmazás az STDOUT-on adja vissza az eredményeket. Az STDIN-ből és az STDOUT-ból való olvasáshoz és íráshoz használhatja Console.ReadLine() és Console.WriteLine() használhatja a konzolalkalmazásokat.

Előfeltételek

  • A 4.5-ös .NET-keretrendszer megcélozó C#-kód írásának és készítésének ismerete.

    Használja a kívánt IDE-t. A Visual Studio vagy a Visual Studio Code használatát javasoljuk. A dokumentum lépései a Visual Studio 2019-et használják.

  • A .exe fájlok fürtbe való feltöltésének és Pig- és Hive-feladatok futtatásának módja. A Data Lake Tools for Visual Studio, az Azure PowerShell és az Azure CLI használatát javasoljuk. A dokumentum lépései a Data Lake Tools for Visual Studio használatával töltik fel a fájlokat, és futtatják a Hive-példa lekérdezést.

    További információ a Hive-lekérdezések futtatásának egyéb módjairól: Mi az az Apache Hive és a HiveQL az Azure HDInsightban?

  • Hadoop a HDInsight-fürtön. A fürt létrehozásával kapcsolatos további információkért lásd a HDInsight-fürtök létrehozását ismertető témakört.

.NET a HDInsighton

A Linux-alapú HDInsight-fürtök a Mono (https://mono-project.com).NET-alkalmazások futtatásához) használatával működnek. A 4.2.1-es monoverzió a HDInsight 3.6-os verziója.

Az .NET-keretrendszer-verziókkal való monokompatibilitásról további információt a Mono kompatibilitás című témakörben talál.

A HDInsight-verziókban található .NET-keretrendszer és Mono verziójáról további információt a HDInsight-összetevők verzióiban talál.

A C#-projektek létrehozása

A következő szakaszok bemutatják, hogyan hozhat létre C#-projektet egy Apache Hive UDF-hez és egy Apache Pig UDF-hez készült Visual Studióban.

Apache Hive UDF

C#-projekt létrehozása Apache Hive UDF-hez:

  1. Indítsa el a Visual Studiót.

  2. Válassza az Új projekt létrehozása lehetőséget.

  3. Az Új projekt létrehozása ablakban válassza a Konzolalkalmazás (.NET-keretrendszer) sablont (a C#-verziót). Ezután válassza a Tovább gombra.

  4. Az új projekt konfigurálása ablakban adja meg a HiveCSharp projektnevét, és keresse meg vagy hozzon létre egy helyet az új projekt mentéséhez. Válassza a Létrehozás parancsot.

  5. A Visual Studio IDE-ben cserélje le a Program.cs tartalmát a következő kódra:

    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. A menüsávon válassza a Build Solution (Build solution)>lehetőséget a projekt létrehozásához.

  7. Zárja be a megoldást.

Apache Pig UDF

C#-projekt létrehozása Apache Hive UDF-hez:

  1. Nyissa meg a Visual Studiót.

  2. A Start ablakban válassza az Új projekt létrehozása lehetőséget.

  3. Az Új projekt létrehozása ablakban válassza a Konzolalkalmazás (.NET-keretrendszer) sablont (a C#-verziót). Ezután válassza a Tovább gombra.

  4. Az új projekt konfigurálása ablakban adja meg a PigUDF projektnevét, és lépjen vagy hozzon létre egy helyet az új projekt mentéséhez. Válassza a Létrehozás parancsot.

  5. A Visual Studio IDE-ben cserélje le a Program.cs tartalmát a következő kódra:

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

    Ez a kód elemzi a Pigből küldött sorokat, és újraformálja a sorokat, amelyek a következővel java.lang.Exceptionkezdődnek: .

  6. A menüsávon válassza a Build Solution (Build solution)>lehetőséget a projekt létrehozásához.

  7. Hagyja nyitva a megoldást.

Feltöltés tárolóba

Ezután töltse fel a Hive- és Pig UDF-alkalmazásokat egy HDInsight-fürt tárhelyére.

  1. A Visual Studióban lépjen a Kiszolgálókezelő megtekintése elemre>.

  2. A Kiszolgálókezelőben kattintson a jobb gombbal az Azure-ra, válassza a Csatlakozás a Microsoft Azure-előfizetésre, és fejezze be a bejelentkezési folyamatot.

  3. Bontsa ki az alkalmazást üzembe helyezni kívánt HDInsight-fürtöt. Megjelenik egy szöveggel (alapértelmezett tárfiók) rendelkező bejegyzés.

    Default storage account, HDInsight cluster, Server Explorer.

    • Ha ez a bejegyzés bővíthető, egy Azure Storage-fiókot használ a fürt alapértelmezett tárolójaként. A fürt alapértelmezett tárolójának fájljainak megtekintéséhez bontsa ki a bejegyzést, majd kattintson duplán az (Alapértelmezett tároló) elemre.

    • Ha ezt a bejegyzést nem lehet kibontani, akkor az Azure Data Lake Storage-t használja a fürt alapértelmezett tárolójaként. A fürt alapértelmezett tárolóján lévő fájlok megtekintéséhez kattintson duplán az (Alapértelmezett tárfiók) bejegyzésre.

  4. A .exe fájlok feltöltéséhez használja az alábbi módszerek egyikét:

    • Ha Azure Storage-fiókot használ, válassza a Blob feltöltése ikont.

      HDInsight upload icon for new project.

      Az Új fájl feltöltése párbeszédpanel Fájlnév csoportjában válassza a Tallózás lehetőséget. A Blob feltöltése párbeszédpanelen lépjen a HiveCSharp projekt bin\debug mappájába, majd válassza ki a HiveCSharp.exe fájlt. Végül válassza a Megnyitás , majd az OK gombot a feltöltés befejezéséhez.

    • Ha Azure Data Lake Storage-t használ, kattintson a jobb gombbal egy üres területre a fájllistában, majd válassza a Feltöltés lehetőséget. Végül válassza ki a HiveCSharp.exe fájlt, és válassza a Megnyitás lehetőséget.

    Miután a HiveCSharp.exe feltöltés befejeződött, ismételje meg a feltöltési folyamatot a PigUDF.exe fájlhoz.

Apache Hive-lekérdezés futtatása

Most futtathat egy Hive-lekérdezést, amely a Hive UDF-alkalmazást használja.

  1. A Visual Studióban lépjen a Kiszolgálókezelő megtekintése elemre>.

  2. Bontsa ki az Azure elemet, majd bontsa ki a HDInsight elemet.

  3. Kattintson a jobb gombbal arra a fürtre, amelybe a HiveCSharp alkalmazást telepítette, majd válassza a Hive-lekérdezés írása lehetőséget.

  4. A Hive-lekérdezéshez használja a következő szöveget:

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

    Fontos

    Bontsa ki a add file fürthöz használt alapértelmezett tároló típusának megfelelő utasítást.

    Ez a lekérdezés kiválasztja a clientid, devicemakeés devicemodel a mezőket, hivesampletablemajd átadja a mezőket a HiveCSharp.exe alkalmazásnak. A lekérdezés azt várja, hogy az alkalmazás három mezőt ad vissza, amelyek a következőként clientidvannak tárolva: , phoneLabelés phoneHash. A lekérdezés arra is számít, hogy az alapértelmezett tároló gyökerében talál HiveCSharp.exe .

  5. Váltson az alapértelmezett Interaktívról Batchre, majd válassza a Küldés lehetőséget a feladat HDInsight-fürtbe való elküldéséhez. Megnyílik a Hive-feladat összegzése ablak.

  6. A Frissítés gombra kattintva frissítheti az összegzést, amíg a feladat állapota befejezett állapotúra nem változik. A feladat kimenetének megtekintéséhez válassza a Feladat kimenete lehetőséget.

Apache Pig-feladat futtatása

Futtathat egy Pig-feladatot is, amely a Pig UDF-alkalmazást használja.

  1. Az SSH használatával csatlakozzon a HDInsight-fürthöz. (Futtassa például a parancsotssh sshuser@<clustername>-ssh.azurehdinsight.net.) További információt az SSH használata aHDInsighttal című témakörben talál.

  2. A Pig parancssor elindításához használja a következő parancsot:

    pig
    

    Megjelenik egy grunt> üzenet.

  3. A .NET-keretrendszer alkalmazást használó Pig-feladat futtatásához adja meg a következőket:

    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;
    

    Az DEFINE utasítás létrehozza a PigUDF.exe alkalmazás aliasátstreamer, és CACHE betölti azt a fürt alapértelmezett tárolójából. Később az STREAM operátorral feldolgozhatja a benne lévő LOG egyetlen sorokat, streamer és oszlopsorozatként adja vissza az adatokat.

    Feljegyzés

    A streameléshez használt alkalmazásnevet aliasként a ` (backtick) karakterrel kell körülvenni, és a ' (idézőjeles) karakterrel SHIPkell körülvenni.

  4. Az utolsó sor beírása után a feladatnak el kell kezdődnie. A következő szöveghez hasonló kimenetet ad vissza:

    (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. A sertésből való kilépésre használható exit .

Következő lépések

Ebben a dokumentumban megtanulta, hogyan használhat .NET-keretrendszer alkalmazást a Hive és a Pig on HDInsight szolgáltatásból. Ha szeretné megtudni, hogyan használhatja a Pythont a Hive és a Pig használatával, olvassa el a Python használata Apache Hive-lel és Apache Pig-lel a HDInsightban című témakört.

A Hive használatának egyéb módjairól és a MapReduce használatáról az alábbi cikkekben olvashat: