2017-01-30 3 views
0

Ich habe diese Site https://blogs.msdn.microsoft.com/arsen/2016/08/05/accessing-azure-data-lake-store-using-webhdfs-with-oauth2-from-spark-2-0-that-is-running-locally/ verfolgt, um den ADLS-Speicher mit meiner Azure VM zu verbinden.Verbinden eines ADLS-Kontos mit Azure VM

  • Erstellt Azure VM und installiert in es meine Anwendung
  • Erstellt Azure Daten See Shop und Service pricipal

Hier mein Kern-site.xml ist: -

<configuration> 
    <property> 
     <name>dfs.webhdfs.oauth2.enabled</name> 
     <value>true</value> 
    </property> 
    <property> 
     <name>dfs.webhdfs.oauth2.access.token.provider</name> 
     <value>org.apache.hadoop.hdfs.web.oauth2.ConfRefreshTokenBasedAccessTokenProvider</value> 
    </property> 
    <property> 
     <name>dfs.webhdfs.oauth2.refresh.url</name> 
     <value>https://login.windows.net/tenaid-id-here/oauth2/token</value> 
    </property> 
    <property> 
     <name>dfs.webhdfs.oauth2.client.id</name> 
     <value>Client id</value> 
    </property> 
    <property> 
     <name>dfs.webhdfs.oauth2.refresh.token.expires.ms.since.epoch</name> 
     <value>0</value> 
    </property> 
    <property> 
     <name>dfs.webhdfs.oauth2.refresh.token</name> 
     <value>Refresh token</value> 
    </property> 
</configuration> 

I habe meine Anwendung in Azure VM installiert und erhalte den folgenden Fehler, wenn ich die Datei in meine Anwendung hochlade.

2017-01-27 12:54:25.963 GMT+0000 WARN [admin-1fd467a4c41f43fe9f30ab446a5c93ac-84-b6792518109848bead029c9144603d04-libraryService.importDataFiles] LibraryImpl - Failed to write data file partID: 0 at: library/51dc056c0a634beba243120501fe70d6/545ca95c2a894f948b1f5184b013a53e/5c68d893090f471d81f3cdfc810bc4f7/b6d5ceb64bfd4d65ba4ea24d24f99e90 
java.io.IOException: Mkdirs failed to create file:/clusters/myapp/library/51dc056c0a634beba243120501fe70d6/545ca95c2a894f948b1f5184b013a53e/5c68d893090f471d81f3cdfc810bc4f7/b6d5ceb64bfd4d65ba4ea24d24f99e90/data (exists=false, cwd=file:/home/palmtree/work/software/myapp-2.5-SNAPSHOT/myapp) 
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:450) 
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:435) 
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:909) 
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:890) 
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:787) 
    at parquet.hadoop.ParquetFileWriter.<init>(ParquetFileWriter.java:150) 
    at parquet.hadoop.ParquetWriter.<init>(ParquetWriter.java:176) 
    at parquet.avro.AvroParquetWriter.<init>(AvroParquetWriter.java:93) 
    at com.myapp.hadoop.common.PaxParquetWriterImpl.doWriteRow(PaxParquetWriterImpl.java:52) 
    at com.myapp.hadoop.common.PaxParquetWriterImpl.access$000(PaxParquetWriterImpl.java:19) 
    at com.myapp.hadoop.common.PaxParquetWriterImpl$1.run(PaxParquetWriterImpl.java:43) 
    at com.myapp.hadoop.common.PaxParquetWriterImpl$1.run(PaxParquetWriterImpl.java:40) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:422) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) 
    at com.myapp.hadoop.common.PaxParquetWriterImpl.writpeRow(PaxParquetWriterImpl.java:40) 
    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 com.myapp.hadoop.core.DistributionManager$$anon$10.invoke(DistributionManager.scala:313) 
    at com.sun.proxy.$Proxy56.writeRow(Unknown Source) 
    at com.myapp.library.stacks.DataFileWriter.write(DataFileWriter.java:49) 
    at com.myapp.library.LibraryImpl.pullImportData(LibraryImpl.java:747) 
    at com.myapp.library.LibraryImpl.importDataFile(LibraryImpl.java:631) 
    at com.myapp.frontend.server.LibraryAPI.importDataFile(LibraryAPI.java:269) 
    at com.myapp.frontend.server.LibraryWebSocketDelegate.importDataFile(LibraryWebSocketDelegate.java:189) 
    at com.myapp.frontend.server.LibraryWebSocketDelegate.importDataFiles(LibraryWebSocketDelegate.java:204) 
    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 com.myapp.frontend.util.PXWebSocketProtocolHandler$PXMethodHandler.call(PXWebSocketProtocolHandler.java:144) 
    at com.myapp.frontend.util.PXWebSocketEndpoint.performMethodCall(PXWebSocketEndpoint.java:284) 
    at com.myapp.frontend.util.PXWebSocketEndpoint.access$200(PXWebSocketEndpoint.java:47) 
    at com.myapp.frontend.util.PXWebSocketEndpoint$1.run(PXWebSocketEndpoint.java:169) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
2017-01-27 12:54:25.966 GMT+0000 WARN [admin-1fd467a4c41f43fe9f30ab446a5c93ac-84-b6792518109848bead029c9144603d04-libraryService.importDataFiles] LibraryImpl - Failed to import acquisition da73b76755c34c74a1643a324e41e156 
com.myapp.iface.service.RequestFailedException 
    at com.myapp.library.LibraryImpl.pullImportData(LibraryImpl.java:754) 
    at com.myapp.library.LibraryImpl.importDataFile(LibraryImpl.java:631) 
    at com.myapp.frontend.server.LibraryAPI.importDataFile(LibraryAPI.java:269) 
    at com.myapp.frontend.server.LibraryWebSocketDelegate.importDataFile(LibraryWebSocketDelegate.java:189) 
    at com.myapp.frontend.server.LibraryWebSocketDelegate.importDataFiles(LibraryWebSocketDelegate.java:204) 
    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 com.myapp.frontend.util.PXWebSocketProtocolHandler$PXMethodHandler.call(PXWebSocketProtocolHandler.java:144) 
    at com.myapp.frontend.util.PXWebSocketEndpoint.performMethodCall(PXWebSocketEndpoint.java:284) 
    at com.myapp.frontend.util.PXWebSocketEndpoint.access$200(PXWebSocketEndpoint.java:47) 
    at com.myapp.frontend.util.PXWebSocketEndpoint$1.run(PXWebSocketEndpoint.java:169) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

Bitte helfen, dieses

-Update zu lösen 1: -

versucht, die folgenden Meine Anwendung auf Azure VM mit ADLS verbinden: -

  1. Added azure-data-lake-store-sdk in Lib

  2. Ich bin diesem Service-to-service authentication gefolgt, um Anwendung in Azure Active Directory zu erstellen.

  3. Ich habe auch die Azure AD-Anwendung dem Stammverzeichnis des ADLS-Kontos zugewiesen.

    Root directory -> /clusters/myapp

  4. Aktualisiert Kern-site.xml basierend auf den Werten von oben Dokumentation.

    <configuration> 
        <property> 
        <name>dfs.adls.home.hostname</name> 
        <value>dev.azuredatalakestore.net</value> 
        </property> 
        <property> 
        <name>dfs.adls.home.mountpoint</name> 
        <value>/clusters</value> 
        </property> 
    
        <property> 
        <name>fs.adl.impl</name> 
        <value>org.apache.hadoop.fs.adl.AdlFileSystem</value> 
        </property> 
    
        <property> 
        <name>fs.AbstractFileSystem.adl.impl</name> 
        <value>org.apache.hadoop.fs.adl.Adl</value> 
        </property> 
    
        <property> 
        <name>dfs.adls.oauth2.refresh.url</name> 
        <value>https://login.windows.net/[tenantId]/oauth2/token</value> 
        </property> 
    
        <property> 
        <name>dfs.adls.oauth2.client.id</name> 
        <value>[CLIENT ID]</value> 
        </property> 
    
        <property> 
        <name>dfs.adls.oauth2.credential</name> 
        <value>[CLIENT KEY]</value> 
        </property> 
    
        <property> 
        <name>dfs.adls.oauth2.access.token.provider.type</name> 
        <value>ClientCredential</value> 
        </property> 
    
        <property> 
        <name>fs.azure.io.copyblob.retry.max.retries</name> 
        <value>60</value> 
        </property> 
    
        <property> 
        <name>fs.azure.io.read.tolerate.concurrent.append</name> 
        <value>true</value> 
        </property> 
    
        <property> 
        <name>fs.defaultFS</name> 
        <value>adl://dev.azuredatalakestore.net</value> 
        <final>true</final> 
        </property> 
    
        <property> 
        <name>fs.trash.interval</name> 
        <value>360</value> 
        </property> 
    
    </configuration> 
    
  5. Ich erhalte Fehler folgende wenn ich meine Anwendung Server in VM starten: -

    2017-02-02 07:40:27.527 GMT+0000 INFO [main] DistributionManager - Looking for class loader for distroName=adl kerberized=false 
    2017-02-02 07:40:28.428 GMT+0000 ERROR [main] SimpleHdfsFileSystem - Failed to initialize HDFS file storage on null as hdfs root /myapp 
    org.apache.hadoop.security.AccessControlException: Unauthorized 
        at org.apache.hadoop.hdfs.web.WebHdfsFileSystem.validateResponse(WebHdfsFileSystem.java:347) 
        at org.apache.hadoop.hdfs.web.WebHdfsFileSystem.access$200(WebHdfsFileSystem.java:98) 
        at org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner.runWithRetry(WebHdfsFileSystem.java:623) 
        at org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner.access$100(WebHdfsFileSystem.java:472) 
        at org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner$1.run(WebHdfsFileSystem.java:502) 
        at java.security.AccessController.doPrivileged(Native Method) 
        at javax.security.auth.Subject.doAs(Subject.java:422) 
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) 
        at org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner.run(WebHdfsFileSystem.java:498) 
        at org.apache.hadoop.hdfs.web.WebHdfsFileSystem.mkdirs(WebHdfsFileSystem.java:919) 
        at org.apache.hadoop.fs.FileSystem.mkdirs(FileSystem.java:1877) 
        at com.myapp.hadoop.common.HdfsFileSystem$1.run(HdfsFileSystem.java:98) 
        at com.myapp.hadoop.common.HdfsFileSystem$1.run(HdfsFileSystem.java:91) 
        at java.security.AccessController.doPrivileged(Native Method) 
        at javax.security.auth.Subject.doAs(Subject.java:422) 
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) 
        at com.myapp.hadoop.common.HdfsFileSystem.__initialize(HdfsFileSystem.java:91) 
        at com.myapp.hadoop.common.SimpleHdfsFileSystem.initialize(SimpleHdfsFileSystem.java:40) 
        at com.myapp.hadoop.hdp2.HadoopDistributionImpl.initializeHdfs(HadoopDistributionImpl.java:63) 
        at com.myapp.hadoop.hdp2.UnsecureHadoopDistributionImpl.connectToFileSystem(UnsecureHadoopDistributionImpl.java:22) 
        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 com.myapp.hadoop.core.DistributionManager$$anon$1.invoke(DistributionManager.scala:135) 
        at com.sun.proxy.$Proxy22.connectToFileSystem(Unknown Source) 
        at com.myapp.library.LibraryStorageImpl.parseSimpleAuthFileSystem(LibraryStorageImpl.scala:126) 
        at com.myapp.library.LibraryStorageImpl.initializeStorageWithPrefix(LibraryStorageImpl.scala:64) 
        at com.myapp.library.LibraryStorageImpl.initialize(LibraryStorageImpl.scala:39) 
        at com.myapp.library.LibraryStorageImpl.initialize(LibraryStorageImpl.scala:33) 
        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.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1581) 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1522) 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:274) 
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1106) 
        at com.myapp.container.PxBeanContext.getBean(PxBeanContext.java:156) 
        at com.myapp.library.streaming.files.UploadFileServiceImpl.initialize(UploadFileServiceImpl.java:49) 
        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.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1581) 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1522) 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609) 
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) 
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469) 
        at com.myapp.container.PxBeanContext.startup(PxBeanContext.java:42) 
        at com.myapp.jetty.FrontendServer.main(FrontendServer.java:124) 
    2017-02-02 07:40:28.462 GMT+0000 WARN [main] server - HQ222113: On ManagementService stop, there are 1 unexpected registered MBeans: [core.acceptor.dc9ff2aa-e91a-11e6-9a51-09b76b4431e6] 
    2017-02-02 07:40:28.479 GMT+0000 INFO [main] server - HQ221002: HornetQ Server version 2.5.0.SNAPSHOT (Wild Hornet, 124) [7039110c-dd57-11e6-b90d-2bc6685808f5] stopped 
    2017-02-02 07:40:28.480 GMT+0000 ERROR [main] FrontendServer - Fatal error trying to start server 
    java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.myapp.library.streaming.files.UploadFileServiceImpl#0' defined in class path resource [system-config.xml]: Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.myapp.library.LibraryStorageImpl#0' defined in class path resource [system-config.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: org.apache.hadoop.security.AccessControlException: Unauthorized 
        at com.myapp.container.PxBeanContext.startup(PxBeanContext.java:44) 
        at com.myapp.jetty.FrontendServer.main(FrontendServer.java:124) 
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.myapp.library.streaming.files.UploadFileServiceImpl#0' defined in class path resource [system-config.xml]: Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.myapp.library.LibraryStorageImpl#0' defined in class path resource [system-config.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: org.apache.hadoop.security.AccessControlException: Unauthorized 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469) 
    at com.myapp.container.PxBeanContext.startup(PxBeanContext.java:42) 
    ... 1 more 
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.myapp.library.LibraryStorageImpl#0' defined in class path resource [system-config.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: org.apache.hadoop.security.AccessControlException: Unauthorized 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:274) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1106) 
    at com.myapp.container.PxBeanContext.getBean(PxBeanContext.java:156) 
    at com.myapp.library.streaming.files.UploadFileServiceImpl.initialize(UploadFileServiceImpl.java:49) 
    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.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1581) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1522) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
    ... 11 more 
    Caused by: java.lang.RuntimeException: org.apache.hadoop.security.AccessControlException: Unauthorized 
    at com.myapp.hadoop.common.SimpleHdfsFileSystem.initialize(SimpleHdfsFileSystem.java:45) 
    at com.myapp.hadoop.hdp2.HadoopDistributionImpl.initializeHdfs(HadoopDistributionImpl.java:63) 
    at com.myapp.hadoop.hdp2.UnsecureHadoopDistributionImpl.connectToFileSystem(UnsecureHadoopDistributionImpl.java:22) 
    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 com.myapp.hadoop.core.DistributionManager$$anon$1.invoke(DistributionManager.scala:135) 
    at com.sun.proxy.$Proxy22.connectToFileSystem(Unknown Source) 
    at com.myapp.library.LibraryStorageImpl.parseSimpleAuthFileSystem(LibraryStorageImpl.scala:126) 
    at com.myapp.library.LibraryStorageImpl.initializeStorageWithPrefix(LibraryStorageImpl.scala:64) 
    at com.myapp.library.LibraryStorageImpl.initialize(LibraryStorageImpl.scala:39) 
    at com.myapp.library.LibraryStorageImpl.initialize(LibraryStorageImpl.scala:33) 
    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.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1581) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1522) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
    ... 28 more 
    Caused by: org.apache.hadoop.security.AccessControlException: Unauthorized 
    at org.apache.hadoop.hdfs.web.WebHdfsFileSystem.validateResponse(WebHdfsFileSystem.java:347) 
    at org.apache.hadoop.hdfs.web.WebHdfsFileSystem.access$200(WebHdfsFileSystem.java:98) 
    at org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner.runWithRetry(WebHdfsFileSystem.java:623) 
    at org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner.access$100(WebHdfsFileSystem.java:472) 
    at org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner$1.run(WebHdfsFileSystem.java:502) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:422) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) 
    at org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner.run(WebHdfsFileSystem.java:498) 
    at org.apache.hadoop.hdfs.web.WebHdfsFileSystem.mkdirs(WebHdfsFileSystem.java:919) 
    at org.apache.hadoop.fs.FileSystem.mkdirs(FileSystem.java:1877) 
    at com.myapp.hadoop.common.HdfsFileSystem$1.run(HdfsFileSystem.java:98) 
    at com.myapp.hadoop.common.HdfsFileSystem$1.run(HdfsFileSystem.java:91) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:422) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) 
    at com.myapp.hadoop.common.HdfsFileSystem.__initialize(HdfsFileSystem.java:91) 
    at com.myapp.hadoop.common.SimpleHdfsFileSystem.initialize(SimpleHdfsFileSystem.java:40) 
    ... 47 more 
    

folgende Gläser Mit in meinem Projekt: -

azure-data-lake-store-sdk-2.1.4.jar 
commons-cli-1.2.jar 
commons-configuration-1.6.jar 
hadoop-auth-2.7.1.jar 
hadoop-azure-datalake-3.0.0-alpha1.jar 
hadoop-common-2.5-SNAPSHOT.jar 
hadoop-common-2.7.1.jar 
hadoop-hdfs-2.7.3.jar 
hadoop-hdp2-2.5-SNAPSHOT.jar 

Klärungen: -

  1. Meine Absicht ist, Meine Anwendung auf Azure VM mit DataLake Store ohne Notwendigkeit von HDInsight Cluster zu verbinden. Ist das möglich ? Wenn ja, welche Schritte muss ich befolgen? Welche Konfiguration muss in core-site.xml vorhanden sein?

  2. Dateivorschau nicht mit Access Fehlern in ADLS

  3. Anmeldung des HDInsight Cluster, die an die Daten See Shop zugeordnet ist ssh-Befehl - ssh [user] @ [cluster2] zu.net

  4. Kopieren einer Datei mit dem Cluster des wget-Befehl - wget http://www.sample-videos.com/csv/Sample-Spreadsheet-10-rows.csv
  5. einen neuen Ordner in Ihrem Datum See Store-Account erstellen
  6. nun eine Datei mit PUT-Befehl lädt hdfs dfs -Setzen Probe-Tabellenform 10-rows.csv adl: //dev2.azuredatalakestore.net/new
  7. Ansicht der Datei im Azure Portal

Tatsächliches Ergebnis: die Datei wird hochgeladen und zeigt in dem Azure-Portal. Aber, Dateivorschau ist kaputt und ich sehe den untenstehenden Fehler

AccessControlException 
OPEN failed with error 0x83090aa2 (Forbidden. ACL verification failed. Either the resource does not exist or the user is not authorized to perform the requested operation.). [4f97235c-0852-44c8-a8d4-cbe190ffdb34] 

Wie Sie dieses Problem lösen?

+0

Hey Karan, kannst du mir sagen, wie du RefreshToken generiert hast. Ich bin in diesem Teil getroffen, mit einem Fehler endet: ls: Fehler beim Abrufen von Zugriffs-Token –

+0

@KiranKrishnaInnamuri Siehe https://blogs.msdn.microsoft.com/arsen/2016/08/05/accessing-azure-data- see-store-using-webhdfs-mit-oauth2-from-spark-2-0-das-läuft-lokal/ – karan

+0

@kaaran was hast du mit curl oder postman? –

Antwort

1

Erstens empfehlen wir nicht, dass Sie den Pfad sweebhdfs verwenden. Wie in Arsens Blog erwähnt, ist der Adl-Client viel leistungsfähiger. Hier sind Richtungen für die Konfiguration des ADL-Dateisystem:
Hadoop Azure Data Lake Support

Für Ihre spezifischen Fehler, es sieht aus wie die mkdir auf das lokale Dateisystem aufgerufen wird, wie sie in der gezeigt „file:“ in der Ausgabe des Befehls mkdir.

Um den Fehler zu beheben, befolgen Sie die Schritte in Arsen's Blog. Nach der Konfiguration Befehl ausführen hdfs auf dem swebhdfs Pfad wie

bin\hadoop> fs -ls swebhdfs://avdatalake2.azuredatalakestore.net:443/ 

Eine weitere Sache: Seit diesem Blog-Posting, jetzt Azure Daten See volle Unterstützung für die Java SDK hat. Hier ist ein Artikel, der beschreibt, wie das Java SDK verwenden grundlegende Dateioperationen auszuführen:

Get started with Azure Data Lake Store using Java

- Cathy

+0

Bitte schauen Sie sich meine aktualisierte Frage an. – karan

1

Der einfachste Weg, um ADLS zu verbinden ist das Java SDK zu verwenden, dass Cathy erwähnt in ihrer Antwort.

Get started with Azure Data Lake Store using Java

In Ihrem Beispiel, warum versuchen Sie von Ihrem Azure VM mit dem Datum See Store mit dem Hadoop-Client zu verbinden? Die Verwendung des Hadoop-Clients ist ein komplizierterer Weg, um das scheinbar einfache Szenario der Verbindung von Ihrer App auf einer Azure-VM mit ADLS zu erreichen.

Der Hadoop-Client ist in der Regel das, was Benutzer tun, um vorhandene Hadoop-Cluster mit ADLS zu verbinden. Ich habe das Gefühl, dass das nicht das ist, was du versuchst. Lassen Sie uns wissen, ob dies nicht der Fall ist.