apache / druid

Apache Druid: a high performance real-time analytics database.
https://druid.apache.org/
Apache License 2.0
13.47k stars 3.7k forks source link

druid failed to start when including druid-ranger-security with hdfs as deep storage #11598

Closed 11noskcire closed 3 years ago

11noskcire commented 3 years ago

Druid Version

0.20.2

Description

Cluster size

nano-quickstart (i'm using this to see if the extension works or not before doing it on real cluster)

Steps to reproduce

As a side note i only included it in druid.extensions.loadList, not yet using it in authorization config

Error message

the error message is same on all druid services

2021-08-15T12:09:09,486 INFO [main] com.google.inject.Guice - An exception was caught and reported. Message: java.io.IOException: No FileSystem for scheme: hdfs
java.lang.RuntimeException: java.io.IOException: No FileSystem for scheme: hdfs
        at org.apache.druid.security.ranger.authorizer.RangerSecurityDruidModule.configure(RangerSecurityDruidModule.java:59) ~[?:?]
        at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340) ~[guice-4.1.0.jar:?]
        at com.google.inject.spi.Elements.getElements(Elements.java:110) ~[guice-4.1.0.jar:?]
        at com.google.inject.util.Modules$OverrideModule.configure(Modules.java:198) ~[guice-4.1.0.jar:?]
        at com.google.inject.AbstractModule.configure(AbstractModule.java:62) ~[guice-4.1.0.jar:?]
        at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340) ~[guice-4.1.0.jar:?]
        at com.google.inject.spi.Elements.getElements(Elements.java:110) ~[guice-4.1.0.jar:?]
        at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138) [guice-4.1.0.jar:?]
        at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104) [guice-4.1.0.jar:?]
        at com.google.inject.Guice.createInjector(Guice.java:99) [guice-4.1.0.jar:?]
        at com.google.inject.Guice.createInjector(Guice.java:73) [guice-4.1.0.jar:?]
        at com.google.inject.Guice.createInjector(Guice.java:62) [guice-4.1.0.jar:?]
        at org.apache.druid.initialization.Initialization.makeInjectorWithModules(Initialization.java:433) [druid-server-0.20.2.jar:0.20.2]
        at org.apache.druid.cli.GuiceRunnable.makeInjector(GuiceRunnable.java:69) [druid-services-0.20.2.jar:0.20.2]
        at org.apache.druid.cli.ServerRunnable.run(ServerRunnable.java:62) [druid-services-0.20.2.jar:0.20.2]
        at org.apache.druid.cli.Main.main(Main.java:113) [druid-services-0.20.2.jar:0.20.2]
Caused by: java.io.IOException: No FileSystem for scheme: hdfs
        at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2799) ~[?:?]
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2810) ~[?:?]
        at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:100) ~[?:?]
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2849) ~[?:?]
        at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2831) ~[?:?]
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:389) ~[?:?]
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:181) ~[?:?]
        at org.apache.druid.security.ranger.authorizer.RangerSecurityDruidModule.configure(RangerSecurityDruidModule.java:56) ~[?:?]
        ... 15 more
Exception in thread "main" java.lang.RuntimeException: com.google.inject.CreationException: Unable to create injector, see the following errors:

1) An exception was caught and reported. Message: java.io.IOException: No FileSystem for scheme: hdfs
  at com.google.inject.util.Modules$OverrideModule.configure(Modules.java:198)

1 error
        at org.apache.druid.cli.GuiceRunnable.makeInjector(GuiceRunnable.java:72)
        at org.apache.druid.cli.ServerRunnable.run(ServerRunnable.java:62)
        at org.apache.druid.cli.Main.main(Main.java:113)
Caused by: com.google.inject.CreationException: Unable to create injector, see the following errors:

1) An exception was caught and reported. Message: java.io.IOException: No FileSystem for scheme: hdfs
  at com.google.inject.util.Modules$OverrideModule.configure(Modules.java:198)

1 error
        at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:470)
        at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:155)
        at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107)
        at com.google.inject.Guice.createInjector(Guice.java:99)
        at com.google.inject.Guice.createInjector(Guice.java:73)
        at com.google.inject.Guice.createInjector(Guice.java:62)
        at org.apache.druid.initialization.Initialization.makeInjectorWithModules(Initialization.java:433)
        at org.apache.druid.cli.GuiceRunnable.makeInjector(GuiceRunnable.java:69)
        ... 2 more
Caused by: java.lang.RuntimeException: java.io.IOException: No FileSystem for scheme: hdfs
        at org.apache.druid.security.ranger.authorizer.RangerSecurityDruidModule.configure(RangerSecurityDruidModule.java:59)
        at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340)
        at com.google.inject.spi.Elements.getElements(Elements.java:110)
        at com.google.inject.util.Modules$OverrideModule.configure(Modules.java:198)
        at com.google.inject.AbstractModule.configure(AbstractModule.java:62)
        at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340)
        at com.google.inject.spi.Elements.getElements(Elements.java:110)
        at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138)
        at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
        ... 7 more
Caused by: java.io.IOException: No FileSystem for scheme: hdfs
        at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2799)
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2810)
        at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:100)
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2849)
        at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2831)
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:389)
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:181)
        at org.apache.druid.security.ranger.authorizer.RangerSecurityDruidModule.configure(RangerSecurityDruidModule.java:56)
        ... 15 more

Any debugging

I don't know if this is correct, but i searched the source code here which using module org.apache.hadoop.fs.FileSystem, which i found later in the pom.xml only include hadoop-common as dependency (according to this SO thread you must use hadoop-hdfs instead)

11noskcire commented 3 years ago

for now i solved it with manually copying the hadoop-hdfs-client.jar to druid-ranger-security extension folder

cp druid/extensions/druid-hdfs-storage/hadoop-hdfs-client-2.8.5.jar druid/extensions/druid-ranger-security/