Python User Defined Functions (UDF) gebruiken met Apache Hive en Apache Pig in HDInsight

Meer informatie over het gebruik van door de gebruiker gedefinieerde Python-functies (UDF) met Apache Hive en Apache Pig in Apache Hadoop in Azure HDInsight.

Python in HDInsight

Python2.7 wordt standaard geïnstalleerd in HDInsight 3.0 en hoger. Apache Hive kan worden gebruikt met deze versie van Python voor stroomverwerking. Stroomverwerking maakt gebruik van STDOUT en STDIN om gegevens door te geven tussen Hive en de UDF.

HDInsight bevat ook Jython, een Python-implementatie die is geschreven in Java. Jython wordt rechtstreeks uitgevoerd op de virtuele Java-machine en maakt geen gebruik van streaming. Jython is de aanbevolen Python-interpreter bij het gebruik van Python met Pig.

Vereisten

Notitie

Het opslagaccount dat in dit artikel wordt gebruikt, was Azure Storage met beveiligde overdracht ingeschakeld en wordt daarom wasbs in het hele artikel gebruikt.

Opslagconfiguratie

Er is geen actie vereist als het gebruikte opslagaccount van het type Storage (general purpose v1) of StorageV2 (general purpose v2)is. Het proces in dit artikel produceert uitvoer naar ten minste /tezstaging. Een standaard hadoop-configuratie bevat /tezstaging in de fs.azure.page.blob.dir configuratievariabele in core-site.xml voor service HDFS. Deze configuratie zorgt ervoor dat uitvoer naar de map pagina-blobs is, die niet worden ondersteund voor opslagaccounts BlobStorage. Als u voor dit artikel wilt gebruiken BlobStorage , verwijdert /tezstaging u uit de fs.azure.page.blob.dir configuratievariabele. De configuratie kan worden geopend vanuit de Ambari-gebruikersinterface. Anders wordt het foutbericht weergegeven: Page blob is not supported for this account type.

Waarschuwing

In de stappen in dit document wordt uitgegaan van de volgende veronderstellingen:

  • U maakt de Python-scripts in uw lokale ontwikkelomgeving.
  • U uploadt de scripts naar HDInsight met behulp van de scp opdracht of het opgegeven PowerShell-script.

Als u de Azure Cloud Shell (bash) wilt gebruiken om met HDInsight te werken, moet u het volgende doen:

  • Maak de scripts in de Cloud Shell-omgeving.
  • Gebruik scp om de bestanden van de Cloud Shell te uploaden naar HDInsight.
  • Gebruik ssh vanuit de Cloud Shell om verbinding te maken met HDInsight en voer de voorbeelden uit.

Apache Hive UDF

Python kan worden gebruikt als een UDF van Hive via de HiveQL-instructie TRANSFORM . Met de volgende HiveQL wordt bijvoorbeeld het hiveudf.py bestand aangeroepen dat is opgeslagen in het standaard Azure Storage-account voor het cluster.

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;

Dit voorbeeld doet het volgende:

  1. Met add file de instructie aan het begin van het bestand wordt het hiveudf.py bestand toegevoegd aan de gedistribueerde cache, zodat het toegankelijk is voor alle knooppunten in het cluster.
  2. De SELECT TRANSFORM ... USING -instructie selecteert gegevens uit de hivesampletable. Ook worden de waarden clientid, devicemake en devicemodel doorgegeven aan het hiveudf.py script.
  3. De AS -component beschrijft de velden die worden geretourneerd door hiveudf.py.

Bestand maken

Maak in uw ontwikkelomgeving een tekstbestand met de naam hiveudf.py. Gebruik de volgende code als de inhoud van het bestand:

#!/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()])

Met dit script worden de volgende acties uitgevoerd:

  1. Leest een regel met gegevens uit STDIN.
  2. Het afsluitende teken voor de nieuwe regel wordt verwijderd met behulp van string.strip(line, "\n ").
  3. Bij het verwerken van stromen bevat één regel alle waarden met een tabteken tussen elke waarde. Kan dus string.split(line, "\t") worden gebruikt om de invoer op elk tabblad te splitsen en alleen de velden te retourneren.
  4. Wanneer de verwerking is voltooid, moet de uitvoer als één regel naar STDOUT worden geschreven, met een tabblad tussen elk veld. Bijvoorbeeld print "\t".join([clientid, phone_label, hashlib.md5(phone_label).hexdigest()]).
  5. De while lus wordt herhaald totdat nee line wordt gelezen.

De scriptuitvoer is een samenvoeging van de invoerwaarden voor devicemake en devicemodel, en een hash van de samengevoegde waarde.

Bestand uploaden (shell)

De volgende opdracht vervangt sshuser door de werkelijke gebruikersnaam, indien anders. Vervang door mycluster de werkelijke clusternaam. Zorg ervoor dat de werkmap is waar het bestand zich bevindt.

  1. Gebruik scp om de bestanden naar uw HDInsight-cluster te kopiëren. Bewerk en voer de opdracht in:

    scp hiveudf.py sshuser@mycluster-ssh.azurehdinsight.net:
    
  2. Gebruik SSH om verbinding te maken met het cluster. Bewerk en voer de opdracht in:

    ssh sshuser@mycluster-ssh.azurehdinsight.net
    
  3. Voeg vanuit de SSH-sessie de Python-bestanden toe die u eerder hebt geüpload naar de opslag voor het cluster.

    hdfs dfs -put hiveudf.py /hiveudf.py
    

Hive UDF (shell) gebruiken

  1. Als u verbinding wilt maken met Hive, gebruikt u de volgende opdracht vanuit uw geopende SSH-sessie:

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

    Met deze opdracht wordt de Beeline-client gestart.

  2. Voer de volgende query in bij de 0: jdbc:hive2://headnodehost:10001/> prompt:

    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. Zodra de laatste regel is ingevoerd, moet de taak beginnen. Zodra de taak is voltooid, wordt uitvoer geretourneerd die vergelijkbaar is met het volgende voorbeeld:

    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. Voer de volgende opdracht in om Beeline af te sluiten:

    !q
    

Bestand uploaden (PowerShell)

PowerShell kan ook worden gebruikt om Hive-query's op afstand uit te voeren. Zorg ervoor dat uw werkmap zich bevindt waar hiveudf.py zich bevindt. Gebruik het volgende PowerShell-script om een Hive-query uit te voeren die gebruikmaakt van het hiveudf.py script:

# 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

Notitie

Zie het document Gegevens uploaden voor Apache Hadoop-taken in HDInsight voor meer informatie over het uploaden van bestanden.

Hive UDF gebruiken

# 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

De uitvoer voor de Hive-taak moet er ongeveer uitzien als in het volgende voorbeeld:

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

Een Python-script kan worden gebruikt als een UDF van Pig via de GENERATE -instructie. U kunt het script uitvoeren met Jython of C Python.

  • Jython wordt uitgevoerd op de JVM en kan systeemeigen worden aangeroepen vanuit Pig.
  • C Python is een extern proces, dus de gegevens van Pig op de JVM worden verzonden naar het script dat wordt uitgevoerd in een Python-proces. De uitvoer van het Python-script wordt teruggestuurd naar Pig.

Als u de Python-interpreter wilt opgeven, gebruikt register u wanneer u verwijst naar het Python-script. In de volgende voorbeelden worden scripts met Pig geregistreerd als myfuncs:

  • Jython gebruiken: register '/path/to/pigudf.py' using jython as myfuncs;
  • C Python gebruiken: register '/path/to/pigudf.py' using streaming_python as myfuncs;

Belangrijk

Wanneer u Jython gebruikt, kan het pad naar het pig_jython-bestand een lokaal pad of een WASBS:// pad zijn. Wanneer u C Python gebruikt, moet u echter verwijzen naar een bestand in het lokale bestandssysteem van het knooppunt dat u gebruikt om de Pig-taak te verzenden.

Zodra de registratie is verstreken, is de Pig Latin voor dit voorbeeld hetzelfde voor beide:

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;

Dit voorbeeld doet het volgende:

  1. Met de eerste regel wordt het voorbeeldgegevensbestand sample.log in LOGSgeladen. Ook wordt elke record gedefinieerd als een chararray.
  2. De volgende regel filtert eventuele null-waarden uit en slaat het resultaat van de bewerking op in LOG.
  3. Vervolgens worden de records in LOG herhaald en wordt GENERATE de methode in het create_structure Python/Jython-script aangeroepen dat is geladen als myfuncs. LINE wordt gebruikt om de huidige record door te geven aan de functie.
  4. Ten slotte worden de uitvoer naar STDOUT gedumpt met behulp van de DUMP opdracht . Met deze opdracht worden de resultaten weergegeven nadat de bewerking is voltooid.

Bestand maken

Maak in uw ontwikkelomgeving een tekstbestand met de naam pigudf.py. Gebruik de volgende code als de inhoud van het bestand:

# 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

In het voorbeeld Pig Latin wordt de LINE invoer gedefinieerd als een tekenmaarray, omdat er geen consistent schema voor de invoer is. Het Python-script transformeert de gegevens in een consistent schema voor uitvoer.

  1. De @outputSchema instructie definieert de indeling van de gegevens die worden geretourneerd naar Pig. In dit geval is het een gegevensverzameling, wat een gegevenstype Pig is. De bag bevat de volgende velden, die allemaal chararray (tekenreeksen) zijn:

    • date: de datum waarop de logboekvermelding is gemaakt
    • time: het tijdstip waarop de logboekvermelding is gemaakt
    • classname- de klassenaam waarvoor de vermelding is gemaakt
    • level - het logboekniveau
    • detail - uitgebreide details voor de logboekvermelding
  2. Vervolgens definieert de def create_structure(input) de functie waaraan Pig regelitems doorgeeft.

  3. De voorbeeldgegevens, , sample.logvoldoen meestal aan het datum-, tijd-, klassenaam-, niveau- en detailschema. Het bevat echter enkele regels die beginnen met *java.lang.Exception*. Deze regels moeten worden aangepast aan het schema. De if instructie controleert deze en masseren vervolgens de invoergegevens om de *java.lang.Exception* tekenreeks naar het einde te verplaatsen, zodat de gegevens in overeenstemming zijn met het verwachte uitvoerschema.

  4. Vervolgens wordt de split opdracht gebruikt om de gegevens te splitsen op de eerste vier spatietekens. De uitvoer wordt toegewezen in date, time, classname, levelen detail.

  5. Ten slotte worden de waarden geretourneerd naar Pig.

Wanneer de gegevens worden geretourneerd naar Pig, heeft deze een consistent schema zoals gedefinieerd in de @outputSchema -instructie.

Bestand uploaden (shell)

Vervang in de onderstaande opdrachten door sshuser de werkelijke gebruikersnaam, indien verschillend. Vervang door mycluster de werkelijke clusternaam. Zorg ervoor dat het bestand zich in de werkmap bevindt.

  1. Gebruik scp om de bestanden naar uw HDInsight-cluster te kopiëren. Bewerk en voer de opdracht in:

    scp pigudf.py sshuser@mycluster-ssh.azurehdinsight.net:
    
  2. Gebruik SSH om verbinding te maken met het cluster. Bewerk en voer de opdracht in:

    ssh sshuser@mycluster-ssh.azurehdinsight.net
    
  3. Voeg vanuit de SSH-sessie de Python-bestanden toe die u eerder hebt geüpload naar de opslag voor het cluster.

    hdfs dfs -put pigudf.py /pigudf.py
    

Pig UDF (shell) gebruiken

  1. Als u verbinding wilt maken met pig, gebruikt u de volgende opdracht vanuit uw geopende SSH-sessie:

    pig
    
  2. Voer de volgende instructies in bij de grunt> prompt:

    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. Nadat u de volgende regel hebt ingevoerd, moet de taak beginnen. Zodra de taak is voltooid, retourneert deze uitvoer die vergelijkbaar is met de volgende gegevens:

    ((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. Gebruik quit om de Grunt-shell af te sluiten en gebruik vervolgens het volgende om het pigudf.py-bestand in het lokale bestandssysteem te bewerken:

    nano pigudf.py
    
  5. Verwijder in de editor de opmerking op de volgende regel door het # teken aan het begin van de regel te verwijderen:

    #from pig_util import outputSchema
    

    Met deze regel wijzigt u het Python-script zodat het werkt met C Python in plaats van met Jython. Zodra de wijziging is aangebracht, gebruikt u Ctrl+X om de editor af te sluiten. Selecteer J en vervolgens Enter om de wijzigingen op te slaan.

  6. Gebruik de pig opdracht om de shell opnieuw te starten. Zodra u zich bij de grunt> prompt bevindt, gebruikt u het volgende om het Python-script uit te voeren met behulp van de C Python-interpreter.

    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;
    

    Zodra deze taak is voltooid, ziet u dezelfde uitvoer als toen u het script eerder uitvoerde met behulp van Jython.

Bestand uploaden (PowerShell)

PowerShell kan ook worden gebruikt om Op afstand Hive-query's uit te voeren. Zorg ervoor dat uw werkmap zich bevindt op pigudf.py de locatie. Gebruik het volgende PowerShell-script om een Hive-query uit te voeren die gebruikmaakt van het pigudf.py script:

# 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 gebruiken (PowerShell)

Notitie

Wanneer u een taak extern verzendt met behulp van PowerShell, is het niet mogelijk om C Python als interpreter te gebruiken.

PowerShell kan ook worden gebruikt om Pig Latin-taken uit te voeren. Als u een Pig Latin-taak wilt uitvoeren die gebruikmaakt van het pigudf.py script, gebruikt u het volgende PowerShell-script:

# 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

De uitvoer voor de taak Pig moet er ongeveer uitzien als de volgende gegevens:

((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))

Problemen oplossen

Fouten bij het uitvoeren van taken

Wanneer u de Hive-taak uitvoert, kan er een fout optreden die vergelijkbaar is met de volgende tekst:

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.

Dit probleem kan worden veroorzaakt door de regeleinden in het Python-bestand. Veel Windows-editors gebruiken crlf standaard als het einde van de regel, maar Linux-toepassingen verwachten meestal LF.

U kunt de volgende PowerShell-instructies gebruiken om de CR-tekens te verwijderen voordat u het bestand uploadt naar HDInsight:

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

# Wait for completion or failure of specified job

PowerShell-scripts

Beide PowerShell-voorbeeldscripts die worden gebruikt om de voorbeelden uit te voeren, bevatten een regel met opmerkingen die de foutuitvoer voor de taak weergeeft. Als u de verwachte uitvoer voor de taak niet ziet, verwijder dan de opmerking bij de volgende regel en kijk of de foutinformatie wijst op een probleem.

$activity="Pig job"

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

De foutinformatie (STDERR) en het resultaat van de taak (STDOUT) worden ook geregistreerd in uw HDInsight-opslag.

Voor deze taak... Bekijk deze bestanden in de blobcontainer
Hive /HivePython/stderr

/HivePython/stdout

Pig /PigPython/stderr

/PigPython/stdout

Volgende stappen

Zie How to deploy a module to Azure HDInsight (Een module implementeren in Azure HDInsight) als u Python-modules wilt laden die niet standaard worden geleverd.

Zie de volgende documenten voor andere manieren om Pig en Hive te gebruiken en voor meer informatie over het gebruik van MapReduce: