HDInsight'ta Apache Hive ve Apache Pig ile Python Kullanıcı Tanımlı İşlevleri (UDF) kullanma

Azure HDInsight üzerinde Apache Hadoop'ta Apache Hive ve Apache Pig ile Python kullanıcı tanımlı işlevleri (UDF) kullanmayı öğrenin.

HDInsight üzerinde Python

Python2.7 , HDInsight 3.0 ve sonraki sürümlerde varsayılan olarak yüklenir. Apache Hive, akış işleme için Python'ın bu sürümüyle kullanılabilir. Akış işleme, Hive ile UDF arasında veri geçirmek için STDOUT ve STDIN kullanır.

HDInsight, Java dilinde yazılmış bir Python uygulaması olan Jython'u da içerir. Jython doğrudan Java Sanal Makinesi üzerinde çalışır ve akış kullanmaz. Jython, Python'ı Pig ile kullanırken önerilen Python yorumlayıcısıdır.

Önkoşullar

Not

Bu makalede kullanılan depolama hesabı , güvenli aktarım etkin olan Azure Depolama'dır ve bu nedenle wasbs makale boyunca kullanılır.

Depolama yapılandırması

Kullanılan depolama hesabı veya StorageV2 (general purpose v2)türündeyse Storage (general purpose v1) eylem gerekmez. Bu makaledeki işlem en az /tezstagingiçin çıkış oluşturur. Varsayılan hadoop yapılandırması, hizmeti için içindeki yapılandırma değişkeninde core-site.xml yer alır /tezstagingfs.azure.page.blob.dir.HDFS Bu yapılandırma, dizinin çıktısının depolama hesabı türü BlobStorageiçin desteklenmeyen sayfa blobları olmasını sağlar. Bu makalede kullanmak BlobStorage için yapılandırma değişkenini fs.azure.page.blob.dir kaldırın/tezstaging. Yapılandırmaya Ambari kullanıcı arabiriminden erişilebilir. Aksi takdirde şu hata iletisini alırsınız: Page blob is not supported for this account type.

Uyarı

Bu belgedeki adımlar aşağıdaki varsayımları yapar:

  • Python betiklerini yerel geliştirme ortamınızda oluşturursunuz.
  • Betikleri HDInsight'a yüklemek için komutunu veya sağlanan PowerShell betiğini kullanın scp .

HDInsight ile çalışmak için Azure Cloud Shell (bash) kullanmak istiyorsanız:

  • Betikleri cloud shell ortamında oluşturun.
  • Dosyaları cloud shell'den HDInsight'a yüklemek için kullanın scp .
  • HDInsight'a bağlanmak ve örnekleri çalıştırmak için cloud shell'den kullanın ssh .

Apache Hive UDF

Python, HiveQL TRANSFORM deyimi aracılığıyla Hive'dan UDF olarak kullanılabilir. Örneğin, aşağıdaki HiveQL küme için varsayılan Azure Depolama hesabında depolanan dosyayı çağırır hiveudf.py .

add file wasbs:///hiveudf.py;

SELECT TRANSFORM (clientid, devicemake, devicemodel)
    USING 'python hiveudf.py' AS
    (clientid string, phoneLabel string, phoneHash string)
FROM hivesampletable
ORDER BY clientid LIMIT 50;

Bu örnek şunları yapar:

  1. Dosyanın add file başındaki deyimi dosyayı dağıtılmış önbelleğe ekler hiveudf.py , böylece kümedeki tüm düğümler tarafından erişilebilir.
  2. SELECT TRANSFORM ... USING deyimi, içinden hivesampletableveri seçer. Ayrıca clientid, devicemake ve devicemodel değerlerini betiğine hiveudf.py geçirir.
  3. AS yan tümcesi, içinden hiveudf.pydöndürülen alanları açıklar.

Dosya oluştur

Geliştirme ortamınızda adlı hiveudf.pybir metin dosyası oluşturun. Dosyanın içeriği olarak aşağıdaki kodu kullanın:

#!/usr/bin/env python
import sys
import string
import hashlib

while True:
    line = sys.stdin.readline()
    if not line:
        break

    line = string.strip(line, "\n ")
    clientid, devicemake, devicemodel = string.split(line, "\t")
    phone_label = devicemake + ' ' + devicemodel
    print "\t".join([clientid, phone_label, hashlib.md5(phone_label).hexdigest()])

Bu betik aşağıdaki eylemleri gerçekleştirir:

  1. STDIN'den bir veri satırı okur.
  2. Sondaki yeni satır karakteri kullanılarak string.strip(line, "\n ")kaldırılır.
  3. Akış işleme yaparken, tek bir satır her değer arasında bir sekme karakteri olan tüm değerleri içerir. Bu nedenle string.split(line, "\t") , her sekmedeki girişi bölmek ve yalnızca alanları döndürmek için kullanılabilir.
  4. İşleme tamamlandığında çıkış, her alan arasında bir sekmeyle birlikte tek bir satır olarak STDOUT'a yazılmalıdır. Örneğin, print "\t".join([clientid, phone_label, hashlib.md5(phone_label).hexdigest()]).
  5. Döngü while , hayır line okunana kadar yineleniyor.

Betik çıkışı, ve devicemodeliçin devicemake giriş değerlerinin birleştirilmiş ve birleştirilmiş değerin karmasıdır.

Karşıya dosya yükleme (kabuk)

Aşağıdaki komut, farklıysa yerine gerçek kullanıcı adını alır sshuser . değerini gerçek küme adıyla değiştirin mycluster . Çalışma dizininizin dosyanın bulunduğu yerde olduğundan emin olun.

  1. Dosyaları HDInsight kümenize kopyalamak için kullanın scp . Komutunu düzenleyin ve girin:

    scp hiveudf.py sshuser@mycluster-ssh.azurehdinsight.net:
    
  2. Kümeye bağlanmak için SSH kullanın. Komutunu düzenleyin ve girin:

    ssh sshuser@mycluster-ssh.azurehdinsight.net
    
  3. SSH oturumundan daha önce karşıya yüklenen Python dosyalarını kümenin depolama alanına ekleyin.

    hdfs dfs -put hiveudf.py /hiveudf.py
    

Hive UDF (kabuk) kullanma

  1. Hive'a bağlanmak için açık SSH oturumunuzda aşağıdaki komutu kullanın:

    beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
    

    Bu komut Beeline istemcisini başlatır.

  2. İstemde aşağıdaki sorguyu 0: jdbc:hive2://headnodehost:10001/> girin:

    add file wasbs:///hiveudf.py;
    SELECT TRANSFORM (clientid, devicemake, devicemodel)
        USING 'python hiveudf.py' AS
        (clientid string, phoneLabel string, phoneHash string)
    FROM hivesampletable
    ORDER BY clientid LIMIT 50;
    
  3. Son satır girildikten sonra işin başlaması gerekir. İş tamamlandıktan sonra aşağıdaki örneğe benzer bir çıktı döndürür:

    100041    RIM 9650    d476f3687700442549a83fac4560c51c
    100041    RIM 9650    d476f3687700442549a83fac4560c51c
    100042    Apple iPhone 4.2.x    375ad9a0ddc4351536804f1d5d0ea9b9
    100042    Apple iPhone 4.2.x    375ad9a0ddc4351536804f1d5d0ea9b9
    100042    Apple iPhone 4.2.x    375ad9a0ddc4351536804f1d5d0ea9b9
    
  4. Beeline'dan çıkmak için aşağıdaki komutu girin:

    !q
    

Karşıya dosya yükleme (PowerShell)

PowerShell, Hive sorgularını uzaktan çalıştırmak için de kullanılabilir. Çalışma dizininizin bulunduğu konumda hiveudf.py olduğundan emin olun. Betiği kullanan hiveudf.py bir Hive sorgusu çalıştırmak için aşağıdaki PowerShell betiğini kullanın:

# Login to your Azure subscription
# Is there an active Azure subscription?
$sub = Get-AzSubscription -ErrorAction SilentlyContinue
if(-not($sub))
{
    Connect-AzAccount
}

# If you have multiple subscriptions, set the one to use
# Select-AzSubscription -SubscriptionId "<SUBSCRIPTIONID>"

# Revise file path as needed
$pathToStreamingFile = ".\hiveudf.py"

# Get cluster info
$clusterName = Read-Host -Prompt "Enter the HDInsight cluster name"
$clusterInfo = Get-AzHDInsightCluster -ClusterName $clusterName
$resourceGroup = $clusterInfo.ResourceGroup
$storageAccountName=$clusterInfo.DefaultStorageAccount.split('.')[0]
$container=$clusterInfo.DefaultStorageContainer
$storageAccountKey=(Get-AzStorageAccountKey `
   -ResourceGroupName $resourceGroup `
   -Name $storageAccountName)[0].Value

# Create an Azure Storage context
$context = New-AzStorageContext `
    -StorageAccountName $storageAccountName `
    -StorageAccountKey $storageAccountKey

# Upload local files to an Azure Storage blob
Set-AzStorageBlobContent `
    -File $pathToStreamingFile `
    -Blob "hiveudf.py" `
    -Container $container `
    -Context $context

Not

Dosyaları karşıya yükleme hakkında daha fazla bilgi için HDInsight'ta Apache Hadoop işleri için verileri karşıya yükleme belgesine bakın.

Hive UDF kullanma

# Script should stop on failures
$ErrorActionPreference = "Stop"

# Login to your Azure subscription
# Is there an active Azure subscription?
$sub = Get-AzSubscription -ErrorAction SilentlyContinue
if(-not($sub))
{
    Connect-AzAccount
}

# If you have multiple subscriptions, set the one to use
# Select-AzSubscription -SubscriptionId "<SUBSCRIPTIONID>"

# Get cluster info
$clusterName = Read-Host -Prompt "Enter the HDInsight cluster name"
$creds=Get-Credential -UserName "admin" -Message "Enter the login for the cluster"

$HiveQuery = "add file wasbs:///hiveudf.py;" +
                "SELECT TRANSFORM (clientid, devicemake, devicemodel) " +
                "USING 'python hiveudf.py' AS " +
                "(clientid string, phoneLabel string, phoneHash string) " +
                "FROM hivesampletable " +
                "ORDER BY clientid LIMIT 50;"

# Create Hive job object
$jobDefinition = New-AzHDInsightHiveJobDefinition `
    -Query $HiveQuery

# For status bar updates
$activity="Hive query"

# Progress bar (optional)
Write-Progress -Activity $activity -Status "Starting query..."

# Start defined Azure HDInsight job on specified cluster.
$job = Start-AzHDInsightJob `
    -ClusterName $clusterName `
    -JobDefinition $jobDefinition `
    -HttpCredential $creds

# Progress bar (optional)
Write-Progress -Activity $activity -Status "Waiting on query to complete..."

# Wait for completion or failure of specified job
Wait-AzHDInsightJob `
    -JobId $job.JobId `
    -ClusterName $clusterName `
    -HttpCredential $creds

# Uncomment the following to see stderr output
<#
Get-AzHDInsightJobOutput `
   -Clustername $clusterName `
   -JobId $job.JobId `
   -HttpCredential $creds `
   -DisplayOutputType StandardError
#>

# Progress bar (optional)
Write-Progress -Activity $activity -Status "Retrieving output..."

# Gets the log output
Get-AzHDInsightJobOutput `
    -Clustername $clusterName `
    -JobId $job.JobId `
    -HttpCredential $creds

Hive işinin çıktısı aşağıdaki örneğe benzer şekilde görünmelidir:

100041    RIM 9650    d476f3687700442549a83fac4560c51c
100041    RIM 9650    d476f3687700442549a83fac4560c51c
100042    Apple iPhone 4.2.x    375ad9a0ddc4351536804f1d5d0ea9b9
100042    Apple iPhone 4.2.x    375ad9a0ddc4351536804f1d5d0ea9b9
100042    Apple iPhone 4.2.x    375ad9a0ddc4351536804f1d5d0ea9b9

Apache Pig UDF

Python betiği, deyimi aracılığıyla GENERATE Pig'den UDF olarak kullanılabilir. Betiği Jython veya C Python kullanarak çalıştırabilirsiniz.

  • Jython, JVM üzerinde çalışır ve pig'den yerel olarak çağrılabilir.
  • C Python bir dış işlemdir, bu nedenle JVM'deki Pig verileri bir Python işleminde çalıştırılan betike gönderilir. Python betiğinin çıkışı Pig'e geri gönderilir.

Python yorumlayıcısını belirtmek için Python betiğine başvururken kullanın register . Aşağıdaki örnekler, pig ile betikleri olarak myfuncskaydeder:

  • Jython'u kullanmak için: register '/path/to/pigudf.py' using jython as myfuncs;
  • C Python kullanmak için: register '/path/to/pigudf.py' using streaming_python as myfuncs;

Önemli

Jython kullanırken, pig_jython dosyasının yolu yerel yol veya WASBS:// yolu olabilir. Ancak, C Python kullanırken Pig işini göndermek için kullandığınız düğümün yerel dosya sistemindeki bir dosyaya başvurmanız gerekir.

Kayıt geçmişte kaldıktan sonra, bu örneğin Pig Latin harfi her ikisi için de aynıdır:

LOGS = LOAD 'wasbs:///example/data/sample.log' as (LINE:chararray);
LOG = FILTER LOGS by LINE is not null;
DETAILS = FOREACH LOG GENERATE myfuncs.create_structure(LINE);
DUMP DETAILS;

Bu örnek şunları yapar:

  1. İlk satır, sample.log örnek veri dosyasını içine LOGSyükler. Ayrıca her kaydı olarak chararraytanımlar.
  2. Sonraki satır, tüm null değerleri filtreler ve işlemin sonucunu içine LOGdepolar.
  3. Ardından, içindeki LOG kayıtları yineler ve olarak myfuncsyüklenen Python/Jython betiğinde bulunan yöntemi çağırmak create_structure için kullanırGENERATE. LINE geçerli kaydı işleve geçirmek için kullanılır.
  4. Son olarak, çıkışlar komutu kullanılarak STDOUT'a DUMP atılır. Bu komut, işlem tamamlandıktan sonra sonuçları görüntüler.

Dosya oluştur

Geliştirme ortamınızda adlı pigudf.pybir metin dosyası oluşturun. Dosyanın içeriği olarak aşağıdaki kodu kullanın:

# Uncomment the following if using C Python
#from pig_util import outputSchema


@outputSchema("log: {(date:chararray, time:chararray, classname:chararray, level:chararray, detail:chararray)}")
def create_structure(input):
    if (input.startswith('java.lang.Exception')):
        input = input[21:len(input)] + ' - java.lang.Exception'
    date, time, classname, level, detail = input.split(' ', 4)
    return date, time, classname, level, detail

Pig Latin örneğinde giriş, LINE giriş için tutarlı bir şema olmadığından chararray olarak tanımlanır. Python betiği, verileri çıkış için tutarlı bir şemaya dönüştürür.

  1. deyimi, @outputSchema Pig'e döndürülen verilerin biçimini tanımlar. Bu durumda, pig veri türü olan bir veri paketidir. Çanta, tümü chararray (dizeler) olan aşağıdaki alanları içerir:

    • date - Günlük girişinin oluşturulduğu tarih
    • time - Günlük girişinin oluşturulduğu saat
    • classname - girdinin oluşturulduğu sınıf adı
    • level - günlük düzeyi
    • detail - günlük girdisi için ayrıntılı ayrıntılar
  2. Ardından, Pig'in def create_structure(input) satır öğelerini geçirdiği işlevi tanımlar.

  3. Örnek veriler olan , sample.logçoğunlukla tarih, saat, sınıf adı, düzey ve ayrıntı şemasına uygundur. Ancak, ile *java.lang.Exception*başlayan birkaç satır içerir. Bu satırlar şemayla eşleşecek şekilde değiştirilmelidir. deyimi if bunları denetler, ardından dizeyi sonuna taşımak *java.lang.Exception* için giriş verilerine masaj gerçekleştirir ve verileri beklenen çıkış şemasıyla hizaya getirir.

  4. Ardından, split ilk dört boşluk karakterindeki verileri bölmek için komutu kullanılır. Çıkış , , time, classnamelevelve detailiçine dateatanır.

  5. Son olarak, değerler Pig'e döndürülür.

Veriler Pig'e döndürülürken, deyiminde tanımlandığı gibi tutarlı bir şemaya @outputSchema sahiptir.

Karşıya dosya yükleme (kabuk)

Aşağıdaki komutlarda değerini farklıysa gerçek kullanıcı adıyla değiştirin sshuser . değerini gerçek küme adıyla değiştirin mycluster . Çalışma dizininizin dosyanın bulunduğu yerde olduğundan emin olun.

  1. Dosyaları HDInsight kümenize kopyalamak için kullanın scp . Komutunu düzenleyin ve girin:

    scp pigudf.py sshuser@mycluster-ssh.azurehdinsight.net:
    
  2. Kümeye bağlanmak için SSH kullanın. Komutunu düzenleyin ve girin:

    ssh sshuser@mycluster-ssh.azurehdinsight.net
    
  3. SSH oturumundan daha önce karşıya yüklenen Python dosyalarını kümenin depolama alanına ekleyin.

    hdfs dfs -put pigudf.py /pigudf.py
    

Pig UDF kullanma (kabuk)

  1. Pig'e bağlanmak için açık SSH oturumunuzdan aşağıdaki komutu kullanın:

    pig
    
  2. İstemde aşağıdaki deyimleri grunt> girin:

    Register wasbs:///pigudf.py using jython as myfuncs;
    LOGS = LOAD 'wasbs:///example/data/sample.log' as (LINE:chararray);
    LOG = FILTER LOGS by LINE is not null;
    DETAILS = foreach LOG generate myfuncs.create_structure(LINE);
    DUMP DETAILS;
    
  3. Aşağıdaki satırı girdikten sonra iş başlamalıdır. İş tamamlandıktan sonra aşağıdaki verilere benzer bir çıktı döndürür:

    ((2012-02-03,20:11:56,SampleClass5,[TRACE],verbose detail for id 990982084))
    ((2012-02-03,20:11:56,SampleClass7,[TRACE],verbose detail for id 1560323914))
    ((2012-02-03,20:11:56,SampleClass8,[DEBUG],detail for id 2083681507))
    ((2012-02-03,20:11:56,SampleClass3,[TRACE],verbose detail for id 1718828806))
    ((2012-02-03,20:11:56,SampleClass3,[INFO],everything normal for id 530537821))
    
  4. quit Grunt kabuğundan çıkmak için kullanın ve ardından yerel dosya sistemindeki pigudf.py dosyasını düzenlemek için aşağıdakileri kullanın:

    nano pigudf.py
    
  5. Düzenleyiciye girdikten sonra, karakteri satırın # başından kaldırarak aşağıdaki satırın açıklamalarını kaldırın:

    #from pig_util import outputSchema
    

    Bu satır, Python betiğini Jython yerine C Python ile çalışacak şekilde değiştirir. Değişiklik yapıldıktan sonra düzenleyiciden çıkmak için Ctrl+X tuşlarını kullanın. Değişiklikleri kaydetmek için Y'yi ve ardından Enter tuşuna basın .

  6. pig Kabuğu yeniden başlatmak için komutunu kullanın. İstemde olduğunuzda grunt> , C Python yorumlayıcısını kullanarak Python betiğini çalıştırmak için aşağıdakileri kullanın.

    Register 'pigudf.py' using streaming_python as myfuncs;
    LOGS = LOAD 'wasbs:///example/data/sample.log' as (LINE:chararray);
    LOG = FILTER LOGS by LINE is not null;
    DETAILS = foreach LOG generate myfuncs.create_structure(LINE);
    DUMP DETAILS;
    

    Bu iş tamamlandıktan sonra, betiği daha önce Jython kullanarak çalıştırdığınızla aynı çıkışı görmeniz gerekir.

Karşıya dosya yükleme (PowerShell)

PowerShell, Hive sorgularını uzaktan çalıştırmak için de kullanılabilir. Çalışma dizininizin bulunduğu konumda pigudf.py olduğundan emin olun. Betiği kullanan pigudf.py bir Hive sorgusu çalıştırmak için aşağıdaki PowerShell betiğini kullanın:

# Login to your Azure subscription
# Is there an active Azure subscription?
$sub = Get-AzSubscription -ErrorAction SilentlyContinue
if(-not($sub))
{
    Connect-AzAccount
}

# If you have multiple subscriptions, set the one to use
# Select-AzSubscription -SubscriptionId "<SUBSCRIPTIONID>"

# Revise file path as needed
$pathToJythonFile = ".\pigudf.py"


# Get cluster info
$clusterName = Read-Host -Prompt "Enter the HDInsight cluster name"
$clusterInfo = Get-AzHDInsightCluster -ClusterName $clusterName
$resourceGroup = $clusterInfo.ResourceGroup
$storageAccountName=$clusterInfo.DefaultStorageAccount.split('.')[0]
$container=$clusterInfo.DefaultStorageContainer
$storageAccountKey=(Get-AzStorageAccountKey `
   -ResourceGroupName $resourceGroup `
   -Name $storageAccountName)[0].Value

# Create an Azure Storage context
$context = New-AzStorageContext `
    -StorageAccountName $storageAccountName `
    -StorageAccountKey $storageAccountKey

# Upload local files to an Azure Storage blob
Set-AzStorageBlobContent `
    -File $pathToJythonFile `
    -Blob "pigudf.py" `
    -Container $container `
    -Context $context

Pig UDF (PowerShell) kullanma

Not

PowerShell kullanarak uzaktan bir iş gönderirken yorumlayıcı olarak C Python kullanmak mümkün değildir.

PowerShell, Pig Latin işlerini çalıştırmak için de kullanılabilir. Betiği kullanan pigudf.py bir Pig Latin işi çalıştırmak için aşağıdaki PowerShell betiğini kullanın:

# Script should stop on failures
$ErrorActionPreference = "Stop"

# Login to your Azure subscription
# Is there an active Azure subscription?
$sub = Get-AzSubscription -ErrorAction SilentlyContinue
if(-not($sub))
{
    Connect-AzAccount
}

# Get cluster info
$clusterName = Read-Host -Prompt "Enter the HDInsight cluster name"
$creds=Get-Credential -UserName "admin" -Message "Enter the login for the cluster"


$PigQuery = "Register wasbs:///pigudf.py using jython as myfuncs;" +
            "LOGS = LOAD 'wasbs:///example/data/sample.log' as (LINE:chararray);" +
            "LOG = FILTER LOGS by LINE is not null;" +
            "DETAILS = foreach LOG generate myfuncs.create_structure(LINE);" +
            "DUMP DETAILS;"

# Create Pig job object
$jobDefinition = New-AzHDInsightPigJobDefinition -Query $PigQuery

# For status bar updates
$activity="Pig job"

# Progress bar (optional)
Write-Progress -Activity $activity -Status "Starting job..."

# Start defined Azure HDInsight job on specified cluster.
$job = Start-AzHDInsightJob `
    -ClusterName $clusterName `
    -JobDefinition $jobDefinition `
    -HttpCredential $creds

# Progress bar (optional)
Write-Progress -Activity $activity -Status "Waiting for the Pig job to complete..."

# Wait for completion or failure of specified job
Wait-AzHDInsightJob `
    -Job $job.JobId `
    -ClusterName $clusterName `
    -HttpCredential $creds

# Uncomment the following to see stderr output
<#
Get-AzHDInsightJobOutput `
    -Clustername $clusterName `
    -JobId $job.JobId `
    -HttpCredential $creds `
    -DisplayOutputType StandardError
#>

# Progress bar (optional)
Write-Progress -Activity $activity "Retrieving output..."

# Gets the log output
Get-AzHDInsightJobOutput `
    -Clustername $clusterName `
    -JobId $job.JobId `
    -HttpCredential $creds

Pig işinin çıktısı aşağıdaki verilere benzer şekilde görünmelidir:

((2012-02-03,20:11:56,SampleClass5,[TRACE],verbose detail for id 990982084))
((2012-02-03,20:11:56,SampleClass7,[TRACE],verbose detail for id 1560323914))
((2012-02-03,20:11:56,SampleClass8,[DEBUG],detail for id 2083681507))
((2012-02-03,20:11:56,SampleClass3,[TRACE],verbose detail for id 1718828806))
((2012-02-03,20:11:56,SampleClass3,[INFO],everything normal for id 530537821))

Sorun giderme

İşleri çalıştırırken karşılaşılan hatalar

Hive işini çalıştırırken aşağıdaki metne benzer bir hatayla karşılaşabilirsiniz:

Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: [Error 20001]: An error occurred while reading or writing to your custom script. It may have crashed with an error.

Bu sorun Python dosyasındaki satır sonlarından kaynaklanıyor olabilir. Birçok Windows düzenleyicisi varsayılan olarak satır sonu olarak CRLF kullanır, ancak Linux uygulamaları genellikle LF bekler.

Dosyayı HDInsight'a yüklemeden önce CR karakterlerini kaldırmak için aşağıdaki PowerShell deyimlerini kullanabilirsiniz:

Write-Progress -Activity $activity -Status "Waiting for the Pig job to complete..."

# Wait for completion or failure of specified job

PowerShell komut dosyaları

Örnekleri çalıştırmak için kullanılan örnek PowerShell betiklerinin her ikisi de işin hata çıkışını görüntüleyen bir açıklama satırı içerir. İş için beklenen çıkışı görmüyorsanız aşağıdaki satırın açıklamasını kaldırın ve hata bilgilerinin bir sorun olup olmadığını denetleyin.

$activity="Pig job"

# Progress bar (optional)
Write-Progress -Activity $activity -Status "Starting job..."

Hata bilgileri (STDERR) ve işin sonucu (STDOUT) da HDInsight depolama alanınıza kaydedilir.

Bu iş için... Blob kapsayıcısında bu dosyalara bakın
Hive /HivePython/stderr

/HivePython/stdout

Pig /PigPython/stderr

/PigPython/stdout

Sonraki adımlar

Varsayılan olarak sağlanmayan Python modüllerini yüklemeniz gerekiyorsa bkz. Azure HDInsight'a modül dağıtma.

Pig, Hive kullanmanın diğer yolları ve MapReduce'u kullanma hakkında bilgi edinmek için aşağıdaki belgelere bakın: