HDInsight'ta Apache Hadoop üzerinde Apache Hive ve Apache Pig ile C# kullanıcı tanımlı işlevleri kullanma
HDInsight üzerinde Apache Hive ve Apache Pig ile C# kullanıcı tanımlı işlevleri (UDF) kullanmayı öğrenin.
Önemli
Bu belgedeki adımlar Linux tabanlı HDInsight kümeleriyle çalışır. Linux, HDInsight sürüm 3.4 ve üzerinde kullanılan tek işletim sistemidir. Daha fazla bilgi için bkz . HDInsight bileşeni sürüm oluşturma.
Hem Hive hem de Pig, işlenmek üzere dış uygulamalara veri geçirebilir. Bu işlem akış olarak bilinir. .NET uygulaması kullanılırken veriler STDIN'de uygulamaya geçirilir ve uygulama SONUÇLARı STDOUT'ta döndürür. STDIN ve STDOUT'tan okumak ve yazmak için bir konsol uygulamasından ve Console.WriteLine()
kullanabilirsinizConsole.ReadLine()
.
Önkoşullar
.NET Framework 4.5'i hedefleyen C# kodu yazma ve derleme hakkında bilgi.
İstediğiniz IDE'i kullanın. Visual Studio veya Visual Studio Code'un kullanılması önerilir. Bu belgedeki adımlarda Visual Studio 2019 kullanılır.
.exe dosyaları kümeye yüklemenin ve Pig ile Hive işlerini çalıştırmanın bir yolu. Visual Studio, Azure PowerShell ve Azure CLI için Data Lake Araçları'nı öneririz. Bu belgedeki adımlar, dosyaları karşıya yüklemek ve örnek Hive sorgusunu çalıştırmak için Visual Studio için Data Lake Araçları'nı kullanır.
Hive sorgularını çalıştırmanın diğer yolları hakkında bilgi için bkz . Azure HDInsight'ta Apache Hive ve HiveQL nedir?.
HDInsight kümesinde hadoop. Küme oluşturma hakkında daha fazla bilgi için bkz . HDInsight kümeleri oluşturma.
HDInsight üzerinde .NET
Linux tabanlı HDInsight kümeleri Mono (https://mono-project.com) kullanarak .NET uygulamalarını çalıştırır. Mono sürüm 4.2.1, HDInsight sürüm 3.6'ya dahildir.
.NET Framework sürümleriyle Mono uyumluluğu hakkında daha fazla bilgi için bkz . Mono uyumluluğu.
HDInsight sürümlerine dahil edilen .NET Framework ve Mono sürümü hakkında daha fazla bilgi için bkz . HDInsight bileşen sürümleri.
C# projelerini oluşturma
Aşağıdaki bölümlerde, Apache Hive UDF ve Apache Pig UDF için Visual Studio'da nasıl C# projesi oluşturulacağı açıklanmaktadır.
Apache Hive UDF
Apache Hive UDF için C# projesi oluşturmak için:
Visual Studio’yu başlatın.
Yeni proje oluştur'u seçin.
Yeni proje oluştur penceresinde Konsol Uygulaması (.NET Framework) şablonunu (C# sürümü) seçin. Sonra İleri'yi seçin.
Yeni projenizi yapılandırın penceresinde HiveCSharp proje adını girin ve yeni projeyi kaydetmek için konumuna gidin veya bir Konum oluşturun. Daha sonra, Oluştur'u seçin.
Visual Studio IDE'de, Program.cs içeriğini aşağıdaki kodla değiştirin:
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(); } } }
Projeyi oluşturmak için menü çubuğunda Derleme Çözümü'ne tıklayın>.
Çözümü kapatın.
Apache Pig UDF
Apache Hive UDF için C# projesi oluşturmak için:
Visual Studio'yu açın.
Başlangıç penceresinde Yeni proje oluştur'u seçin.
Yeni proje oluştur penceresinde Konsol Uygulaması (.NET Framework) şablonunu (C# sürümü) seçin. Sonra İleri'yi seçin.
Yeni projenizi yapılandırın penceresinde PigUDF Proje adını girin ve yeni projeyi kaydetmek için konumuna gidin veya bir Konum oluşturun. Daha sonra, Oluştur'u seçin.
Visual Studio IDE'de, Program.cs içeriğini aşağıdaki kodla değiştirin:
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)); } } } }
Bu kod Pig'den gönderilen satırları ayrıştırıp ile
java.lang.Exception
başlayan satırları yeniden biçimlendirir.Projeyi oluşturmak için menü çubuğundan Derleme Çözümü Oluştur'u>seçin.
Çözümü açık bırakın.
Depolama alanına yükleme
Ardından Hive ve Pig UDF uygulamalarını HDInsight kümesindeki depolama alanına yükleyin.
Visual Studio'da Sunucu Gezginini Görüntüle'ye >gidin.
Sunucu Gezgini'nde Azure'a sağ tıklayın, Microsoft Azure Aboneliği'ne Bağlan seçin ve oturum açma işlemini tamamlayın.
Bu uygulamayı dağıtmak istediğiniz HDInsight kümesini genişletin. (Varsayılan Depolama Hesabı) metnini içeren bir girdi listelenir.
Bu girdi genişletilebilirse, küme için varsayılan depolama alanı olarak bir Azure Depolama Hesabı kullanıyorsunuz demektir. Kümenin varsayılan depolama alanı üzerindeki dosyaları görüntülemek için girdiyi genişletin ve ardından (Varsayılan Kapsayıcı) öğesine çift tıklayın.
Bu girdi genişletilemiyorsa küme için varsayılan depolama alanı olarak Azure Data Lake Depolama kullanıyorsunuz demektir. Küme için varsayılan depolamadaki dosyaları görüntülemek için (Varsayılan Depolama Hesabı) girdisine çift tıklayın.
.exe dosyalarını karşıya yüklemek için aşağıdaki yöntemlerden birini kullanın:
Azure Depolama Hesabı kullanıyorsanız Blobu Karşıya Yükle simgesini seçin.
Yeni Dosyayı Karşıya Yükle iletişim kutusundaki Dosya adı'nın altında Gözat'ı seçin. Blobu Karşıya Yükle iletişim kutusunda HiveCSharp projesinin bin\debug klasörüne gidin ve HiveCSharp.exe dosyasını seçin. Son olarak, karşıya yüklemeyi tamamlamak için Aç'ı ve ardından Tamam'ı seçin.
Azure Data Lake Depolama kullanıyorsanız dosya listesinde boş bir alana sağ tıklayın ve karşıya yükle'yi seçin. Son olarak, HiveCSharp.exe dosyasını seçin ve Aç'ı seçin.
HiveCSharp.exe karşıya yükleme işlemi tamamlandıktan sonra PigUDF.exe dosyası için karşıya yükleme işlemini yineleyin.
Apache Hive sorgusu çalıştırma
Artık Hive UDF uygulamanızı kullanan bir Hive sorgusu çalıştırabilirsiniz.
Visual Studio'da Sunucu Gezginini Görüntüle'ye >gidin.
Azure seçeneğini ve sonra HDInsight seçeneğini genişletin.
HiveCSharp uygulamasını dağıttığınız kümeye sağ tıklayın ve ardından Hive Sorgusu Yaz'ı seçin.
Hive sorgusu için aşağıdaki metni kullanın:
-- 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;
Önemli
add file
Kümeniz için kullanılan varsayılan depolama türüyle eşleşen deyiminin açıklamasını kaldırın.Bu sorgu, içinden , ve alanlarını seçer
clientid
ve sonra alanları HiveCSharp.exe uygulamasına geçirir.devicemodel
devicemake
hivesampletable
Sorgu, uygulamanın ,phoneLabel
vephoneHash
olarakclientid
depolanan üç alan döndürmesini bekler. Sorgu ayrıca varsayılan depolama kapsayıcısının kökünde HiveCSharp.exe bulmayı bekler.İşi HDInsight kümesine göndermek için varsayılan Etkileşimli'yi Batch olarak değiştirin ve gönder'i seçin. Hive İş Özeti penceresi açılır.
İş Durumu Tamamlandı olarak değişene kadar özeti yenilemek için Yenile'yi seçin. İş çıkışını görüntülemek için İş Çıktısı'nı seçin.
Apache Pig işi çalıştırma
Pig UDF uygulamanızı kullanan bir Pig işi de çalıştırabilirsiniz.
HDInsight kümenize bağlanmak için SSH kullanın. (Örneğin, komutunu
ssh sshuser@<clustername>-ssh.azurehdinsight.net
çalıştırın.) Daha fazla bilgi için bkz . SSH'yiHDInsight ile kullanma.Pig komut satırını başlatmak için aşağıdaki komutu kullanın:
pig
Bir
grunt>
istem görüntülenir..NET Framework uygulamasını kullanan bir Pig işini çalıştırmak için aşağıdakileri girin:
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;
deyimi,
DEFINE
PigUDF.exe uygulaması için bir diğer adıstreamer
oluşturur veCACHE
küme için varsayılan depolama alanından yükler. Daha sonra işleçstreamer
ile birlikteSTREAM
, içinde bulunanLOG
tek satırları işlemek ve verileri bir dizi sütun olarak döndürmek için kullanılır.Not
Akış için kullanılan uygulama adı, diğer ad kullanıldığında (backtick) karakteriyle ve
'
ile kullanıldığında (tek tırnak) karakteriyleSHIP
çevrelenmelidir`
.Son satırı girdikten sonra işin başlaması gerekir. Aşağıdaki metne benzer bir çıktı döndürür:
(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)
Domuzdan çıkmak için kullanın
exit
.
Sonraki adımlar
Bu belgede, HDInsight üzerinde Hive ve Pig'den bir .NET Framework uygulamasını kullanmayı öğrendiniz. Python'ı Hive ve Pig ile kullanmayı öğrenmek istiyorsanız bkz . HDInsight'ta Apache Hive ve Apache Pig ile Python kullanma.
Hive'ı kullanmanın diğer yolları ve MapReduce'u kullanma hakkında bilgi edinmek için aşağıdaki makalelere bakın: