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:
Indítsa el a Visual Studiót.
Válassza az Új projekt létrehozása lehetőséget.
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.
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.
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(); } } }
A menüsávon válassza a Build Solution (Build solution)>lehetőséget a projekt létrehozásához.
Zárja be a megoldást.
Apache Pig UDF
C#-projekt létrehozása Apache Hive UDF-hez:
Nyissa meg a Visual Studiót.
A Start ablakban válassza az Új projekt létrehozása lehetőséget.
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.
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.
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.Exception
kezdődnek: .A menüsávon válassza a Build Solution (Build solution)>lehetőséget a projekt létrehozásához.
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.
A Visual Studióban lépjen a Kiszolgálókezelő megtekintése elemre>.
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.
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.
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.
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.
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.
A Visual Studióban lépjen a Kiszolgálókezelő megtekintése elemre>.
Bontsa ki az Azure elemet, majd bontsa ki a HDInsight elemet.
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.
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
ésdevicemodel
a mezőket,hivesampletable
majd á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éntclientid
vannak tárolva: ,phoneLabel
ésphoneHash
. A lekérdezés arra is számít, hogy az alapértelmezett tároló gyökerében talál HiveCSharp.exe .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.
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.
Az SSH használatával csatlakozzon a HDInsight-fürthöz. (Futtassa például a parancsot
ssh sshuser@<clustername>-ssh.azurehdinsight.net
.) További információt az SSH használata aHDInsighttal című témakörben talál.A Pig parancssor elindításához használja a következő parancsot:
pig
Megjelenik egy
grunt>
üzenet.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
, ésCACHE
betölti azt a fürt alapértelmezett tárolójából. Később azSTREAM
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) karakterrelSHIP
kell körülvenni.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)
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: