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
- HDInsight üzerinde bir Hadoop kümesi. Bkz. Linux üzerinde HDInsight ile çalışmaya başlama.
- Bir SSH istemcisi. Daha fazla bilgi için bkz. SSH kullanarak HDInsight'a (Apache Hadoop) bağlanma.
- Kümelerinizin birincil depolama alanı için URI şeması .
wasb://
Bu,abfs://
Azure Data Lake Storage 1. Nesil için Azure Data Lake Storage 2. Nesil veya adl:// için Azure Depolama içindir. Azure Depolama için güvenli aktarım etkinleştirildiyse URI wasbs://. Ayrıca bkz. güvenli aktarım. - Depolama yapılandırmasında olası değişiklik. Depolama hesabı türünü
BlobStorage
kullanıyorsanız bkz. Depolama yapılandırması. - İsteğe bağlı. PowerShell kullanmayı planlıyorsanız AZ modülünün yüklü olması gerekir.
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 /tezstaging
iç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 /tezstaging
fs.azure.page.blob.dir
.HDFS
Bu yapılandırma, dizinin çıktısının depolama hesabı türü BlobStorage
iç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:
- Dosyanın
add file
başındaki deyimi dosyayı dağıtılmış önbelleğe eklerhiveudf.py
, böylece kümedeki tüm düğümler tarafından erişilebilir. SELECT TRANSFORM ... USING
deyimi, içindenhivesampletable
veri seçer. Ayrıca clientid, devicemake ve devicemodel değerlerini betiğinehiveudf.py
geçirir.AS
yan tümcesi, içindenhiveudf.py
döndürülen alanları açıklar.
Dosya oluştur
Geliştirme ortamınızda adlı hiveudf.py
bir 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:
- STDIN'den bir veri satırı okur.
- Sondaki yeni satır karakteri kullanılarak
string.strip(line, "\n ")
kaldırılır. - 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. - İş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()])
. - Döngü
while
, hayırline
okunana kadar yineleniyor.
Betik çıkışı, ve devicemodel
iç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.
Dosyaları HDInsight kümenize kopyalamak için kullanın
scp
. Komutunu düzenleyin ve girin:scp hiveudf.py sshuser@mycluster-ssh.azurehdinsight.net:
Kümeye bağlanmak için SSH kullanın. Komutunu düzenleyin ve girin:
ssh sshuser@mycluster-ssh.azurehdinsight.net
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
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.
İ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;
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
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 myfuncs
kaydeder:
- 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:
- İlk satır,
sample.log
örnek veri dosyasını içineLOGS
yükler. Ayrıca her kaydı olarakchararray
tanımlar. - Sonraki satır, tüm null değerleri filtreler ve işlemin sonucunu içine
LOG
depolar. - Ardından, içindeki
LOG
kayıtları yineler ve olarakmyfuncs
yüklenen Python/Jython betiğinde bulunan yöntemi çağırmakcreate_structure
için kullanırGENERATE
.LINE
geçerli kaydı işleve geçirmek için kullanılır. - 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.py
bir 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.
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
Ardından, Pig'in
def create_structure(input)
satır öğelerini geçirdiği işlevi tanımlar.Ö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. deyimiif
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.Ardından,
split
ilk dört boşluk karakterindeki verileri bölmek için komutu kullanılır. Çıkış , ,time
,classname
level
vedetail
içinedate
atanır.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.
Dosyaları HDInsight kümenize kopyalamak için kullanın
scp
. Komutunu düzenleyin ve girin:scp pigudf.py sshuser@mycluster-ssh.azurehdinsight.net:
Kümeye bağlanmak için SSH kullanın. Komutunu düzenleyin ve girin:
ssh sshuser@mycluster-ssh.azurehdinsight.net
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)
Pig'e bağlanmak için açık SSH oturumunuzdan aşağıdaki komutu kullanın:
pig
İ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;
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))
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
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 .
pig
Kabuğu yeniden başlatmak için komutunu kullanın. İstemde olduğunuzdagrunt>
, 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:
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin