Azure Data Factory'de Hive Etkinliğini kullanarak verileri dönüştürme

Not

Bu makale, Data Factory’nin 1. sürümü için geçerlidir. Data Factory hizmetinin geçerli sürümünü kullanıyorsanız bkz. Data Factory'de Hive etkinliğini kullanarak verileri dönüştürme.

Data Factory işlem hattındaki HDInsight Hive etkinliği, Hive sorgularını kendi veya isteğe bağlı Windows/Linux tabanlı HDInsight kümenizde yürütür. Bu makale, veri dönüştürme ve desteklenen dönüştürme etkinliklerine genel bir genel bakış sunan veri dönüştürme etkinlikleri makalesini oluşturur.

Not

Azure Data Factory yeniyseniz Azure Data Factory giriş makalesini okuyun ve şu öğreticiyi yapın: Bu makaleyi okumadan önce ilk veri işlem hattınızı oluşturma.

Syntax

{
    "name": "Hive Activity",
    "description": "description",
    "type": "HDInsightHive",
    "inputs": [
      {
        "name": "input tables"
      }
    ],
    "outputs": [
      {
        "name": "output tables"
      }
    ],
    "linkedServiceName": "MyHDInsightLinkedService",
    "typeProperties": {
      "script": "Hive script",
      "scriptPath": "<pathtotheHivescriptfileinAzureblobstorage>",
      "defines": {
        "param1": "param1Value"
      }
    },
   "scheduler": {
      "frequency": "Day",
      "interval": 1
    }
}

Söz dizimi ayrıntıları

Özellik Açıklama Gerekli
name Etkinliğin adı Yes
açıklama Etkinliğin ne için kullanıldığını açıklayan metin No
tür HDinsightHive Yes
Giriş Hive etkinliği tarafından tüketilen girişler No
Çıkış Hive etkinliği tarafından üretilen çıkışlar Yes
linkedServiceName Data Factory'de bağlı hizmet olarak kaydedilen HDInsight kümesine başvuru Yes
betik Hive betiğini satır içi olarak belirtme No
scriptPath Hive betiğini bir Azure blob depolama alanında depolayın ve dosyanın yolunu sağlayın. 'script' veya 'scriptPath' özelliğini kullanın. Her ikisi de birlikte kullanılamaz. Dosya adı büyük/küçük harfe duyarlıdır. No
Tanım -lar 'hiveconf' kullanarak Hive betiğinde başvurmak için parametreleri anahtar/değer çiftleri olarak belirtin No

Örnek

Şirketiniz tarafından başlatılan oyunları oynayan kullanıcılar tarafından harcanan zamanı belirlemek istediğiniz oyun günlükleri analizi örneğini ele alalım.

Aşağıdaki günlük virgülle (,) ayrılmış ve şu alanları içeren örnek bir oyun günlüğüdür: ProfileID, SessionStart, Duration, SrcIPAddress ve GameType.

1809,2014-05-04 12:04:25.3470000,14,221.117.223.75,CaptureFlag
1703,2014-05-04 06:05:06.0090000,16,12.49.178.247,KingHill
1703,2014-05-04 10:21:57.3290000,10,199.118.18.179,CaptureFlag
1809,2014-05-04 05:24:22.2100000,23,192.84.66.141,KingHill
.....

Bu verileri işlemek için Hive betiği :

DROP TABLE IF EXISTS HiveSampleIn; 
CREATE EXTERNAL TABLE HiveSampleIn 
(
    ProfileID        string, 
    SessionStart     string, 
    Duration         int, 
    SrcIPAddress     string, 
    GameType         string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '10' STORED AS TEXTFILE LOCATION 'wasb://adfwalkthrough@<storageaccount>.blob.core.windows.net/samplein/'; 

DROP TABLE IF EXISTS HiveSampleOut; 
CREATE EXTERNAL TABLE HiveSampleOut 
(    
    ProfileID     string, 
    Duration     int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '10' STORED AS TEXTFILE LOCATION 'wasb://adfwalkthrough@<storageaccount>.blob.core.windows.net/sampleout/';

INSERT OVERWRITE TABLE HiveSampleOut
Select 
    ProfileID,
    SUM(Duration)
FROM HiveSampleIn Group by ProfileID

Bu Hive betiğini bir Data Factory işlem hattında yürütmek için aşağıdakileri yapmanız gerekir

  1. Kendi HDInsight işlem kümenizi kaydetmek veya isteğe bağlı HDInsight işlem kümesini yapılandırmak için bağlı bir hizmet oluşturun. Şimdi bu bağlı hizmeti "HDInsightLinkedService" olarak adlandıralım.

  2. Verileri barındıran Azure Blob depolama bağlantısını yapılandırmak için bağlı bir hizmet oluşturun. Şimdi bu bağlı hizmeti "StorageLinkedService" olarak adlandıralım

  3. Girişe ve çıkış verilerine işaret eden veri kümeleri oluşturun. Giriş veri kümesini "HiveSampleIn" ve çıkış veri kümesini "HiveSampleOut" olarak adlandıralım

  4. Hive sorgusunu dosya olarak 2. adımda yapılandırılan Azure Blob Depolama kopyalayın. Verileri barındırmak için depolama alanı bu sorgu dosyasını barındırandan farklıysa, ayrı bir Azure Depolama bağlı hizmeti oluşturun ve etkinlikte buna başvurun. Hive sorgu dosyasının yolunu belirtmek için scriptPath ve betik dosyasını içeren Azure depolama alanını belirtmek için scriptLinkedService kullanın.

    Not

    Betik özelliğini kullanarak etkinlik tanımında Hive betiğini satır içi olarak da sağlayabilirsiniz. JSON belgesindeki betikteki tüm özel karakterlerin kaçılması gerektiğinden ve hata ayıklama sorunlarına neden olabileceğinden bu yaklaşımı önermiyoruz. En iyi yöntem 4. adımı izlemektir.

  5. HDInsightHive etkinliğiyle bir işlem hattı oluşturun. Etkinlik verileri işler/dönüştürür.

{
  "name": "HiveActivitySamplePipeline",
     "properties": {
  "activities": [
    {
      "name": "HiveActivitySample",
      "type": "HDInsightHive",
      "inputs": [
      {
        "name": "HiveSampleIn"
      }
      ],
           "outputs": [
             {
              "name": "HiveSampleOut"
             }
           ],
           "linkedServiceName": "HDInsightLinkedService",
           "typeproperties": {
               "scriptPath": "adfwalkthrough\\scripts\\samplehive.hql",
               "scriptLinkedService": "StorageLinkedService"
           },
            "scheduler": {
        "frequency": "Hour",
                 "interval": 1
           }
         }
    ]
  }
}
  1. İşlem hattını dağıtın. Ayrıntılar için İşlem hattı oluşturma makalesine bakın.
  2. Veri fabrikası izleme ve yönetim görünümlerini kullanarak işlem hattını izleyin. Ayrıntılar için Data Factory işlem hatlarını izleme ve yönetme makalesine bakın.

Hive betiği için parametreleri belirtme

Bu örnekte, oyun günlükleri günlük olarak Azure Blob Depolama'a aktarılır ve tarih ve saatle bölümlenmiş bir klasörde depolanır. Hive betiğini parametreleştirmek ve giriş klasörü konumunu çalışma zamanı sırasında dinamik olarak geçirmek ve ayrıca tarih ve saatle bölümlenmiş çıktıyı üretmek istiyorsunuz.

Parametreli Hive betiğini kullanmak için aşağıdakileri yapın

  • içindeki parametreleri tanımlar.

      {
          "name": "HiveActivitySamplePipeline",
            "properties": {
          "activities": [
               {
                  "name": "HiveActivitySample",
                  "type": "HDInsightHive",
                  "inputs": [
                        {
                          "name": "HiveSampleIn"
                        }
                  ],
                  "outputs": [
                        {
                          "name": "HiveSampleOut"
                      }
                  ],
                  "linkedServiceName": "HDInsightLinkedService",
                  "typeproperties": {
                        "scriptPath": "adfwalkthrough\\scripts\\samplehive.hql",
                        "scriptLinkedService": "StorageLinkedService",
                        "defines": {
                          "Input": "$$Text.Format('wasb://adfwalkthrough@<storageaccountname>.blob.core.windows.net/samplein/yearno={0:yyyy}/monthno={0:MM}/dayno={0:dd}/', SliceStart)",
                          "Output": "$$Text.Format('wasb://adfwalkthrough@<storageaccountname>.blob.core.windows.net/sampleout/yearno={0:yyyy}/monthno={0:MM}/dayno={0:dd}/', SliceStart)"
                        },
                         "scheduler": {
                            "frequency": "Hour",
                            "interval": 1
                      }
                  }
                }
          ]
        }
      }
    
  • Hive Betiği'nde ${hiveconf:parameterName} kullanarak parametresine bakın.

    DROP TABLE IF EXISTS HiveSampleIn; 
    CREATE EXTERNAL TABLE HiveSampleIn 
    (
        ProfileID     string, 
        SessionStart     string, 
        Duration     int, 
        SrcIPAddress     string, 
        GameType     string
    ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '10' STORED AS TEXTFILE LOCATION '${hiveconf:Input}'; 
    
    DROP TABLE IF EXISTS HiveSampleOut; 
    CREATE EXTERNAL TABLE HiveSampleOut 
    (
        ProfileID     string, 
        Duration     int
    ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '10' STORED AS TEXTFILE LOCATION '${hiveconf:Output}';
    
    INSERT OVERWRITE TABLE HiveSampleOut
    Select 
        ProfileID,
        SUM(Duration)
    FROM HiveSampleIn Group by ProfileID
    

    Ayrıca Bkz.

  • Pig Etkinliği

  • MapReduce Etkinliği

  • Hadoop Akış Etkinliği

  • Spark programları çağırma

  • R betikleri çağırma