Memecahkan masalah Apache Hadoop HDFS menggunakan Azure HDInsight
Pelajari masalah dan resolusi teratas saat menggunakan Hadoop Distributed File System (HDFS). Untuk daftar lengkap perintah, lihat Panduan Perintah HDFS dan Panduan Shell Sistem File.
Dapatkan akses HDFS lokal dari baris perintah dan kode aplikasi dan bukan menggunakan penyimpanan Azure Blob atau Azure Data Lake Storage dari dalam kluster HDInsight.
Pada perintah, gunakan
hdfs dfs -D "fs.default.name=hdfs://mycluster/" ...
secara harfiah, seperti dalam perintah berikut: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
Dari kode sumber, gunakan URI
hdfs://mycluster/
secara harfiah, seperti dalam aplikasi sampel berikut: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()); } } }
Jalankan file .jar yang dikompilasi (contohnya, file bernama
java-unit-tests-1.0.jar
) pada kluster HDInsight dengan perintah berikut: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
Saat menggunakan perintah hadoop
atau hdfs dfs
untuk menulis file yang ~12 GB atau lebih besar pada kluster HBase, Anda mungkin menemukan eror berikut:
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
HBase pada kluster HDInsight secara default kembali ke ukuran blok 256 KB saat menulis ke penyimpanan Azure. Meski berfungsi dengan baik untuk API HBase atau API REST, hal itu menghasilkan eror jika menggunakan utilitas baris perintah hadoop
atau hdfs dfs
.
Gunakan fs.azure.write.request.size
untuk menentukan ukuran blok yang lebih besar. Anda dapat melakukan modifikasi ini berdasarkan per penggunaan dengan menggunakan parameter -D
. Perintah berikut adalah contoh penggunaan parameter ini dengan perintah hadoop
:
hadoop -fs -D fs.azure.write.request.size=4194304 -copyFromLocal test_large_file.bin /example/data
Anda juga dapat meningkatkan nilai fs.azure.write.request.size
secara global dengan menggunakan Apache Ambari. Langkah-langkah berikut dapat digunakan untuk mengubah nilai di Ambari Web UI:
Di browser Anda, buka Ambari Web UI untuk kluster Anda. URL adalah
https://CLUSTERNAME.azurehdinsight.net
, di manaCLUSTERNAME
adalah nama kluster Anda. Ketika diminta, masukkan nama dan sandi untuk kluster.Dari sisi kiri layar, pilih HDFS, lalu pilih tab Konfigurasi.
Pada bidang Filter, masukkan
fs.azure.write.request.size
.Ubah nilai dari 262144 (256 KB) ke nilai baru. Contohnya, 4194304 (4 MB).
Untuk informasi selengkapnya tentang penggunan Ambari, lihat Mengelola kluster HDInsight menggunakan Apache Ambari Web UI.
Perintah -du
menampilkan ukuran file dan direktori yang terkandung dalam direktori yang diberikan atau panjang file jika hanya berupa file.
Opsi -s
menghasilkan ringkasan agregat dari panjang file yang ditampilkan.
Opsi -h
memformat ukuran file.
Contoh:
hdfs dfs -du -s -h hdfs://mycluster/
hdfs dfs -du -s -h hdfs://mycluster/tmp
Perintah -rm menghapus file yang ditentukan sebagai argumen.
Contoh:
hdfs dfs -rm hdfs://mycluster/tmp/testfile
Jika Anda tidak melihat masalah atau tidak dapat memecahkan masalah, kunjungi salah satu saluran berikut untuk mendapatkan dukungan lebih lanjut:
Dapatkan jawaban dari para ahli Azure melalui Dukungan Komunitas Azure.
Hubungi @AzureSupport - akun Microsoft Azure resmi untuk meningkatkan pengalaman pelanggan. Menghubungkan komunitas Microsoft Azure ke sumber daya yang tepat: jawaban, dukungan, dan pakar.
Jika Anda memerlukan bantuan lainnya, Anda dapat mengirimkan permintaan dukungan dari portal Microsoft Azure. Pilih Dukungan dari bilah menu atau buka hub Bantuan + Dukungan. Untuk informasi selengkapnya, tinjau Cara membuat permintaan dukungan Microsoft Azure. Akses ke Manajemen Langganan dan dukungan tagihan disertakan dengan langganan Microsoft Azure, dan Dukungan Teknis disediakan melalui salah satu Paket Dukungan Azure.