Řešení potíží s Apache Hadoop HDFS s využitím Azure HDInsightu
Seznamte se s hlavními problémy a řešeními při práci se systémem souborů HDFS (Hadoop Distributed File System). Úplný seznam příkazů najdete v příručce k příkazům HDFS a průvodci prostředím systému souborů.
Návody přistupovat k místnímu SYSTÉMU HDFS z clusteru?
Problém
Přístup k místnímu HDFS z příkazového řádku a kódu aplikace místo pomocí služby Azure Blob Storage nebo Azure Data Lake Storage z clusteru HDInsight.
Kroky řešení
Na příkazovém řádku použijte
hdfs dfs -D "fs.default.name=hdfs://mycluster/" ...
doslova jako v následujícím příkazu:hdfs dfs -D "fs.default.name=hdfs://mycluster/" -ls / Found 3 items drwxr-xr-x - hdiuser hdfs 0 2017-03-24 14:12 /EventCheckpoint-30-8-24-11102016-01 drwx-wx-wx - hive hdfs 0 2016-11-10 18:42 /tmp drwx------ - hdiuser hdfs 0 2016-11-10 22:22 /user
Ze zdrojového kódu použijte identifikátor URI
hdfs://mycluster/
doslova, jako v následující ukázkové aplikaci:import java.io.IOException; import java.net.URI; import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; public class JavaUnitTests { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String hdfsUri = "hdfs://mycluster/"; conf.set("fs.defaultFS", hdfsUri); FileSystem fileSystem = FileSystem.get(URI.create(hdfsUri), conf); RemoteIterator<LocatedFileStatus> fileStatusIterator = fileSystem.listFiles(new Path("/tmp"), true); while(fileStatusIterator.hasNext()) { System.out.println(fileStatusIterator.next().getPath().toString()); } } }
Spusťte kompilovaný soubor .jar (například soubor s názvem
java-unit-tests-1.0.jar
) v clusteru HDInsight pomocí následujícího příkazu:hadoop jar java-unit-tests-1.0.jar JavaUnitTests hdfs://mycluster/tmp/hive/hive/5d9cf301-2503-48c7-9963-923fb5ef79a7/inuse.info hdfs://mycluster/tmp/hive/hive/5d9cf301-2503-48c7-9963-923fb5ef79a7/inuse.lck hdfs://mycluster/tmp/hive/hive/a0be04ea-ae01-4cc4-b56d-f263baf2e314/inuse.info hdfs://mycluster/tmp/hive/hive/a0be04ea-ae01-4cc4-b56d-f263baf2e314/inuse.lck
Výjimka úložiště pro zápis do objektu blob
Problém
Při použití příkazů k hdfs dfs
zápisu hadoop
souborů, které jsou v clusteru HBase přibližně 12 GB nebo větší, může dojít k následující chybě:
ERROR azure.NativeAzureFileSystem: Encountered Storage Exception for write on Blob : example/test_large_file.bin._COPYING_ Exception details: null Error Code : RequestBodyTooLarge
copyFromLocal: java.io.IOException
at com.microsoft.azure.storage.core.Utility.initIOException(Utility.java:661)
at com.microsoft.azure.storage.blob.BlobOutputStream$1.call(BlobOutputStream.java:366)
at com.microsoft.azure.storage.blob.BlobOutputStream$1.call(BlobOutputStream.java:350)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.microsoft.azure.storage.StorageException: The request body is too large and exceeds the maximum permissible limit.
at com.microsoft.azure.storage.StorageException.translateException(StorageException.java:89)
at com.microsoft.azure.storage.core.StorageRequest.materializeException(StorageRequest.java:307)
at com.microsoft.azure.storage.core.ExecutionEngine.executeWithRetry(ExecutionEngine.java:182)
at com.microsoft.azure.storage.blob.CloudBlockBlob.uploadBlockInternal(CloudBlockBlob.java:816)
at com.microsoft.azure.storage.blob.CloudBlockBlob.uploadBlock(CloudBlockBlob.java:788)
at com.microsoft.azure.storage.blob.BlobOutputStream$1.call(BlobOutputStream.java:354)
... 7 more
Příčina
HBase v clusterech HDInsight má při zápisu do úložiště Azure výchozí velikost bloku 256 kB. I když funguje pro rozhraní API HBase nebo rozhraní REST API, při použití nástrojů příkazového hadoop
hdfs dfs
řádku dojde k chybě.
Rozlišení
Slouží fs.azure.write.request.size
k určení větší velikosti bloku. Tuto změnu můžete provést na základě použití pomocí parametru -D
. Následující příkaz je příkladem použití tohoto parametru s příkazem hadoop
:
hadoop -fs -D fs.azure.write.request.size=4194304 -copyFromLocal test_large_file.bin /example/data
Hodnotu fs.azure.write.request.size
globálně můžete také zvýšit pomocí Apache Ambari. Pomocí následujících kroků můžete změnit hodnotu ve webovém uživatelském rozhraní Ambari:
V prohlížeči přejděte do webového uživatelského rozhraní Ambari pro váš cluster. Adresa URL je
https://CLUSTERNAME.azurehdinsight.net
, kdeCLUSTERNAME
je název vašeho clusteru. Po zobrazení výzvy zadejte jméno a heslo správce clusteru.Na levé straně obrazovky vyberte HDFS a pak vyberte kartu Konfigurace .
Do pole Filtr... zadejte
fs.azure.write.request.size
.Změňte hodnotu z 262144 (256 kB) na novou hodnotu. Například 4194304 (4 MB).
Další informace o používání Ambari najdete v tématu Správa clusterů HDInsight pomocí webového uživatelského rozhraní Apache Ambari.
Du
Příkaz -du
zobrazí velikosti souborů a adresářů obsažených v daném adresáři nebo délku souboru v případě, že jde jen o soubor.
Tato -s
možnost vytvoří agregovaný souhrn zobrazovaných délek souboru.
Možnost -h
formátuje velikosti souborů.
Příklad:
hdfs dfs -du -s -h hdfs://mycluster/
hdfs dfs -du -s -h hdfs://mycluster/tmp
mikrometr
Příkaz -rm odstraní soubory zadané jako argumenty.
Příklad:
hdfs dfs -rm hdfs://mycluster/tmp/testfile
Další kroky
Pokud jste problém neviděli nebo nemůžete problém vyřešit, navštivte jeden z následujících kanálů, kde najdete další podporu:
Získejte odpovědi od odborníků na Azure prostřednictvím podpory komunity Azure.
Spojte se s @AzureSupport – oficiálním účtem Microsoft Azure pro zlepšení uživatelského prostředí. Propojení komunity Azure se správnými prostředky: odpovědi, podpora a odborníci.
Pokud potřebujete další pomoc, můžete odeslat žádost o podporu z webu Azure Portal. V řádku nabídek vyberte možnost Podpora nebo otevřete centrum nápovědy a podpory . Podrobnější informace najdete v tématu Vytvoření žádosti o podpora Azure. Součástí předplatného Microsoft Azure je přístup ke správě předplatného a podpora fakturace. Technická podpora se poskytuje prostřednictvím některého z plánů podpory Azure.