/ / Hadoop KMS con keystore HDFS: nessun file system per lo schema "hdfs" - hadoop, crittografia, hdfs, keystore

Hadoop KMS con keystore HDFS: No FileSystem per schema "hdfs" - hadoop, crittografia, hdfs, keystore

Ho cercato di configurare i km di Hadoop per utilizzare hdfs come provider principale. Seguo i documenti di Hadoop per quella materia e ho aggiunto il seguente campo al mio kms-site.xml:

  <property>
<name>hadoop.kms.key.provider.uri</name>
<value>jceks://hdfs@nn1.example.com/kms/test.jceks</value>
<description>
URI of the backing KeyProvider for the KMS.
</description>
</property>

Tale percorso esiste in hdfs e mi aspetto che i km creino il file test.jceks per il suo keystore. Tuttavia, i km non sono stati avviati a causa di questo errore:

ERROR: Hadoop KMS could not be started

REASON: org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "hdfs"

Stacktrace:
---------------------------------------------------
org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "hdfs"
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3220)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3240)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:121)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3291)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3259)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:470)
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:356)
at org.apache.hadoop.crypto.key.JavaKeyStoreProvider.<init>(JavaKeyStoreProvider.java:132)
at org.apache.hadoop.crypto.key.JavaKeyStoreProvider.<init>(JavaKeyStoreProvider.java:88)
at org.apache.hadoop.crypto.key.JavaKeyStoreProvider$Factory.createProvider(JavaKeyStoreProvider.java:660)
at org.apache.hadoop.crypto.key.KeyProviderFactory.get(KeyProviderFactory.java:96)
at org.apache.hadoop.crypto.key.kms.server.KMSWebApp.contextInitialized(KMSWebApp.java:187)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4276)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4779)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:803)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:780)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1080)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1003)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:507)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1322)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:325)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1069)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:761)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

Per quello che sono riuscito a capire, sembrache questo errore è dovuto al fatto che non esiste un FileSystem implementato per HDFS. Ho cercato questo errore, ma si riferisce sempre alla mancanza di vasetti per il client hdfs durante l'aggiornamento, cosa che non ho fatto (è una nuova installazione). Sto usando Hadoop 2.7.2

Grazie per l'aiuto!

risposte:

0 per risposta № 1

Ho posto la stessa domanda nel tracker dei problemi di Jira di Hadoop Qui. Come utente Wei-Chiu Chuang sottolineato, avere il keystore in HDFS non è uncaso d'uso valido. KMS non può utilizzare HDFS come archivio di backup poiché ogni accesso ai file client HDFS passerebbe attraverso un ciclo di NomeNodo HDFS -> KMS -> NomeNodo HDFS -> KMS ....

Pertanto, solo il KMS basato su file può utilizzare i file del keystore sul file system locale.