Details
-
Sub-task
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
-
Reviewed
Description
I left a Datanode running overnight and found this in the logs in the morning:
2017-10-18 23:51:54,391 ERROR datanode.DirectoryScanner: Error compiling report for the volume, StorageId: DS-e75ebc3c-6b12-424e-875a-a4ae1a4dcc29 java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: URI scheme is not "file" at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:192) at org.apache.hadoop.hdfs.server.datanode.DirectoryScanner.getDiskReport(DirectoryScanner.java:544) at org.apache.hadoop.hdfs.server.datanode.DirectoryScanner.scan(DirectoryScanner.java:393) at org.apache.hadoop.hdfs.server.datanode.DirectoryScanner.reconcile(DirectoryScanner.java:375) at org.apache.hadoop.hdfs.server.datanode.DirectoryScanner.run(DirectoryScanner.java:320) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.IllegalArgumentException: URI scheme is not "file" at java.io.File.<init>(File.java:421) at org.apache.hadoop.hdfs.server.datanode.fsdataset.FsVolumeSpi$ScanInfo.<init>(FsVolumeSpi.java:319) at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.ProvidedVolumeImpl$ProvidedBlockPoolSlice.compileReport(ProvidedVolumeImpl.java:155) at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.ProvidedVolumeImpl.compileReport(ProvidedVolumeImpl.java:493) at org.apache.hadoop.hdfs.server.datanode.DirectoryScanner$ReportCompiler.call(DirectoryScanner.java:620) at org.apache.hadoop.hdfs.server.datanode.DirectoryScanner$ReportCompiler.call(DirectoryScanner.java:581) at java.util.concurrent.FutureTask.run(FutureTask.java:266) ... 3 more
The code in question tries to make a File from the URI (in this case s3a but anything in Provided storage would likely break here:
public ScanInfo(long blockId, File blockFile, File metaFile, FsVolumeSpi vol, FileRegion fileRegion, long length) { this.blockId = blockId; String condensedVolPath = (vol == null || vol.getBaseURI() == null) ? null : getCondensedPath(new File(vol.getBaseURI()).getAbsolutePath()); // <------- this.blockSuffix = blockFile == null ? null : getSuffix(blockFile, condensedVolPath); this.blockLength = length; if (metaFile == null) { this.metaSuffix = null; } else if (blockFile == null) { this.metaSuffix = getSuffix(metaFile, condensedVolPath); } else { this.metaSuffix = getSuffix(metaFile, condensedVolPath + blockSuffix); } this.volume = vol; this.fileRegion = fileRegion; }
Attachments
Attachments
Issue Links
- is depended upon by
-
HDFS-9810 Allow support for more than one block replica per datanode
- Open