Az Apache Hadoop HDFS hibaelhárítása az Azure HDInsighttal
Ismerje meg a Hadoop Elosztott fájlrendszer (HDFS) használata során felmerülő leggyakoribb problémákat és megoldásokat. A parancsok teljes listáját a HDFS-parancsok útmutatójában és a fájlrendszerhéj-útmutatóban találja.
Hogyan elérni a helyi HDFS-t egy fürtön belülről?
Probléma
Az Azure Blob Storage vagy az Azure Data Lake Storage helyett a parancssorból és az alkalmazás kódjából érheti el a helyi HDFS-t a HDInsight-fürtből.
Megoldási lépések
A parancssorban szó szerint használja
hdfs dfs -D "fs.default.name=hdfs://mycluster/" ...
a következő parancshoz hasonlóan: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
A forráskódból használja az URI-t
hdfs://mycluster/
szó szerint, az alábbi mintaalkalmazáshoz hasonlóan: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()); } } }
Futtassa a lefordított .jar fájlt (például egy nevű
java-unit-tests-1.0.jar
fájlt) a HDInsight-fürtön a következő paranccsal: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
Tárolási kivétel a blobon való íráshoz
Probléma
Ha egy hadoop
hdfs dfs
HBase-fürtön ~12 GB-os vagy annál nagyobb fájlokat ír, a következő hibaüzenet jelenhet meg:
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
Ok
A HDInsight-fürtökön futó HBase alapértelmezés szerint 256 KB-os blokkméretre van beírva az Azure Storage-ba. Bár HBase API-khoz vagy REST API-khoz is használható, hibaüzenetet eredményez a hadoop
parancssori segédprogramok használatakor hdfs dfs
.
Resolution (Osztás)
Nagyobb blokkméret megadására használható fs.azure.write.request.size
. Ezt a módosítást használatonként végezheti el a -D
paraméter használatával. Az alábbi parancs egy példa erre a paraméterre a hadoop
paranccsal:
hadoop -fs -D fs.azure.write.request.size=4194304 -copyFromLocal test_large_file.bin /example/data
Az Apache Ambari használatával globálisan is növelheti az értéket fs.azure.write.request.size
. Az Ambari webes felhasználói felületén az alábbi lépésekkel módosíthatja az értéket:
A böngészőben nyissa meg a fürt Ambari webes felhasználói felületét. Az URL-cím
https://CLUSTERNAME.azurehdinsight.net
aCLUSTERNAME
fürt neve. Amikor a rendszer kéri, adja meg a fürt rendszergazdai nevét és jelszavát.A képernyő bal oldalán válassza a HDFS, majd a Konfigurációk lapot.
A Szűrő... mezőbe írja be a következőt
fs.azure.write.request.size
:Módosítsa az értéket 262144 (256 KB) értékről az új értékre. Például 4194304 (4 MB).
Az Ambari használatával kapcsolatos további információkért lásd : HDInsight-fürtök kezelése az Apache Ambari webes felhasználói felületén.
Du
A -du
parancs megjeleníti az adott könyvtárban található fájlok és könyvtárak méretét, illetve a fájl hosszát, ha csak egy fájlról van szó.
A -s
beállítás összesíti a megjelenített fájlhosszokat.
A -h
beállítás formázja a fájlméreteket.
Példa:
hdfs dfs -du -s -h hdfs://mycluster/
hdfs dfs -du -s -h hdfs://mycluster/tmp
Rm
Az -rm parancs argumentumként megadott fájlokat töröl.
Példa:
hdfs dfs -rm hdfs://mycluster/tmp/testfile
Következő lépések
Ha nem látja a problémát, vagy nem tudja megoldani a problémát, további támogatásért látogasson el az alábbi csatornák egyikére:
Azure-szakértőktől kaphat választ az Azure közösségi támogatásán keresztül.
Csatlakozás @AzureSupport – a hivatalos Microsoft Azure-fiók az ügyfélélmény javításához. Csatlakozás az Azure-közösséget a megfelelő erőforrásokhoz: válaszokhoz, támogatáshoz és szakértőkhöz.
Ha további segítségre van szüksége, támogatási kérelmet küldhet az Azure Portalról. Válassza a Támogatás lehetőséget a menüsávon, vagy nyissa meg a Súgó + támogatási központot. Részletesebb információkért tekintse át a Azure-támogatás kérések létrehozását ismertető cikket. Az előfizetés-kezeléssel és számlázással kapcsolatos támogatás a Microsoft Azure-előfizetés részét képezi, míg a technikai támogatást Azure-támogatási csomagjainkkal biztosítjuk.