Azure HDInsight kullanarak Apache Hadoop HDFS sorunlarını giderme
Hadoop Dağıtılmış Dosya Sistemi (HDFS) ile çalışırken karşılaşılan en önemli sorunları ve çözümleri öğrenin. Komutların tam listesi için bkz . HDFS Komutları Kılavuzu ve Dosya Sistemi Kabuğu Kılavuzu.
Yerel HDFS'ye bir kümenin içinden erişmek Nasıl yaparım??
Sorun
HDInsight kümesinin içinden Azure Blob depolama veya Azure Data Lake Storage kullanmak yerine komut satırından ve uygulama kodundan yerel HDFS'ye erişin.
Çözüm adımları
Komut isteminde, aşağıdaki komutta olduğu gibi tam anlamıyla kullanın
hdfs dfs -D "fs.default.name=hdfs://mycluster/" ...
: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
Kaynak kodundan, aşağıdaki örnek uygulamada olduğu gibi URI'yi
hdfs://mycluster/
tam anlamıyla kullanın: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()); } } }
Derlenmiş .jar dosyasını (örneğin, adlı
java-unit-tests-1.0.jar
bir dosya) HDInsight kümesinde aşağıdaki komutla çalıştırın: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
Bloba yazma için depolama özel durumu
Sorun
HBase kümesinde hadoop
yaklaşık 12 GB veya daha büyük dosyalar yazmak için veya hdfs dfs
komutlarını kullanırken aşağıdaki hatayla karşılaşabilirsiniz:
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
Neden
HDInsight kümelerinde HBase, Azure depolamaya yazarken varsayılan olarak 256 KB blok boyutuna ayarlanır. HBase API'leri veya REST API'leri için çalışırken veya hdfs dfs
komut satırı yardımcı programları kullanılırken hatayla hadoop
sonuçlanır.
Çözüm
Daha büyük bir blok boyutu belirtmek için kullanın fs.azure.write.request.size
. Parametresini kullanarak -D
bu değişikliği kullanım başına temelinde yapabilirsiniz. Aşağıdaki komut, komutuyla bu parametreyi hadoop
kullanan bir örnektir:
hadoop -fs -D fs.azure.write.request.size=4194304 -copyFromLocal test_large_file.bin /example/data
Apache Ambari kullanarak da değerini genel olarak artırabilirsiniz fs.azure.write.request.size
. Ambari Web kullanıcı arabirimindeki değeri değiştirmek için aşağıdaki adımlar kullanılabilir:
Tarayıcınızda kümenizin Ambari Web kullanıcı arabirimine gidin. URL,
https://CLUSTERNAME.azurehdinsight.net
CLUSTERNAME
burada kümenizin adıdır. İstendiğinde kümenin yönetici adını ve parolasını girin.Ekranın sol tarafından HDFS'yi ve ardından Yapılandırmalar sekmesini seçin.
Filtre... alanına girin
fs.azure.write.request.size
.262144 (256 KB) olan değeri yeni değerle değiştirin. Örneğin, 4194304 (4 MB).
Ambari kullanma hakkında daha fazla bilgi için bkz . Apache Ambari Web kullanıcı arabirimini kullanarak HDInsight kümelerini yönetme.
Du
Komut, -du
belirli bir dizinde yer alan dosya ve dizinlerin boyutlarını veya yalnızca bir dosya olması durumunda dosyanın uzunluğunu görüntüler.
seçeneği -s
, görüntülenen dosya uzunluklarının toplam özetini oluşturur.
-h
seçeneği, dosya boyutlarını biçimlendirmektedir.
Örnek:
hdfs dfs -du -s -h hdfs://mycluster/
hdfs dfs -du -s -h hdfs://mycluster/tmp
Rm
-rm komutu, bağımsız değişken olarak belirtilen dosyaları siler.
Örnek:
hdfs dfs -rm hdfs://mycluster/tmp/testfile
Sonraki adımlar
Sorununuzu görmediyseniz veya sorununuzu çözemiyorsanız daha fazla destek için aşağıdaki kanallardan birini ziyaret edin:
Azure Topluluk Desteği aracılığıyla Azure uzmanlarından yanıt alın.
Müşteri deneyimini geliştirmek için resmi Microsoft Azure hesabı olan @AzureSupport ile bağlantı kurun. Azure topluluğunun doğru kaynaklara bağlanması: yanıtlar, destek ve uzmanlar.
Daha fazla yardıma ihtiyacınız varsa Azure portalından bir destek isteği gönderebilirsiniz. Menü çubuğundan Destek'i seçin veya Yardım + destek hub'ını açın. Daha ayrıntılı bilgi için bkz. Azure desteği isteği oluşturma. Abonelik Yönetimi’ne ve faturalandırma desteğine erişim Microsoft Azure aboneliğinize dahildir, Teknik Destek ise herhangi bir Azure Destek Planı üzerinden sağlanır.