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:

  1. Visual Studio’yu başlatın.

  2. Yeni proje oluştur'u seçin.

  3. Yeni proje oluştur penceresinde Konsol Uygulaması (.NET Framework) şablonunu (C# sürümü) seçin. Sonra İleri'yi seçin.

  4. 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.

  5. 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();
            }
        }
    }
    
  6. Projeyi oluşturmak için menü çubuğunda Derleme Çözümü'ne tıklayın>.

  7. Çözümü kapatın.

Apache Pig UDF

Apache Hive UDF için C# projesi oluşturmak için:

  1. Visual Studio'yu açın.

  2. Başlangıç penceresinde Yeni proje oluştur'u seçin.

  3. Yeni proje oluştur penceresinde Konsol Uygulaması (.NET Framework) şablonunu (C# sürümü) seçin. Sonra İleri'yi seçin.

  4. 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.

  5. 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.Exceptionbaşlayan satırları yeniden biçimlendirir.

  6. Projeyi oluşturmak için menü çubuğundan Derleme Çözümü Oluştur'u>seçin.

  7. Çö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.

  1. Visual Studio'da Sunucu Gezginini Görüntüle'ye >gidin.

  2. 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.

  3. Bu uygulamayı dağıtmak istediğiniz HDInsight kümesini genişletin. (Varsayılan Depolama Hesabı) metnini içeren bir girdi listelenir.

    Default storage account, HDInsight cluster, Server Explorer.

    • 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.

  4. .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.

      HDInsight upload icon for new project.

      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.

  1. Visual Studio'da Sunucu Gezginini Görüntüle'ye >gidin.

  2. Azure seçeneğini ve sonra HDInsight seçeneğini genişletin.

  3. HiveCSharp uygulamasını dağıttığınız kümeye sağ tıklayın ve ardından Hive Sorgusu Yaz'ı seçin.

  4. 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 clientidve sonra alanları HiveCSharp.exe uygulamasına geçirir.devicemodeldevicemakehivesampletable Sorgu, uygulamanın , phoneLabelve phoneHasholarak clientiddepolanan üç alan döndürmesini bekler. Sorgu ayrıca varsayılan depolama kapsayıcısının kökünde HiveCSharp.exe bulmayı bekler.

  5. İş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.

  6. İş Durumu Tamamlandı olarak değişene kadar özeti yenilemek için Yenile'yiseç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.

  1. 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.

  2. Pig komut satırını başlatmak için aşağıdaki komutu kullanın:

    pig
    

    Bir grunt> istem görüntülenir.

  3. .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 ve CACHE küme için varsayılan depolama alanından yükler. Daha sonra işleç streamer ile birlikte STREAM , içinde bulunan LOG 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) karakteriyle SHIPçevrelenmelidir ` .

  4. 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)
    
  5. 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: