2015-12-16 42 views
6

Stiamo provando a impostare Cloudera 5.5 dove HDFS lavorerà su s3 solo per il fatto che abbiamo già configurato le proprietà necessarie in Core- site.xmlSostituisci HDFS modulo disco locale a s3 ricevendo errore (org.apache.hadoop.service.AbstractService)

<property> 
    <name>fs.s3a.access.key</name> 
    <value>################</value> 
</property> 
<property> 
    <name>fs.s3a.secret.key</name> 
    <value>###############</value> 
</property> 
<property> 
    <name>fs.default.name</name> 
    <value>s3a://bucket_Name</value> 
</property> 
<property> 
    <name>fs.defaultFS</name> 
    <value>s3a://bucket_Name</value> 
</property> 

Dopo la sua creazione siamo stati in grado di sfogliare i file per secchio s3 dal comando

hadoop fs -ls/

e mostra i file disponibili solo su S3.

Ma quando iniziamo il server servizi filato JobHistory non viene avviato con l'errore qui sotto e sul lancio di posti di lavoro di maiale stiamo ottenendo lo stesso errore

PriviledgedActionException as:mapred (auth:SIMPLE) cause:org.apache.hadoop.fs.UnsupportedFileSystemException: No AbstractFileSystem for scheme: s3a 
ERROR org.apache.hadoop.mapreduce.v2.jobhistory.JobHistoryUtils 
Unable to create default file context [s3a://kyvosps] 
org.apache.hadoop.fs.UnsupportedFileSystemException: No AbstractFileSystem for scheme: s3a 
    at org.apache.hadoop.fs.AbstractFileSystem.createFileSystem(AbstractFileSystem.java:154) 
    at org.apache.hadoop.fs.AbstractFileSystem.get(AbstractFileSystem.java:242) 
    at org.apache.hadoop.fs.FileContext$2.run(FileContext.java:337) 
    at org.apache.hadoop.fs.FileContext$2.run(FileContext.java:334) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 

Su serching su internet abbiamo scoperto che abbiamo bisogno di impostare seguenti proprietà come bene nel core-site.xml

<property> 
    <name>fs.s3a.impl</name> 
    <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value> 
    <description>The implementation class of the S3A Filesystem</description> 
</property> 
<property> 
    <name>fs.AbstractFileSystem.s3a.impl</name> 
    <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value> 
    <description>The FileSystem for S3A Filesystem</description> 
</property> 

Dopo aver impostato le proprietà sopra stiamo ottenendo seguente errore

org.apache.hadoop.service.AbstractService 
Service org.apache.hadoop.mapreduce.v2.hs.HistoryFileManager failed in state INITED; cause: java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.fs.s3a.S3AFileSystem.<init>(java.net.URI, org.apache.hadoop.conf.Configuration) 
java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.fs.s3a.S3AFileSystem.<init>(java.net.URI, org.apache.hadoop.conf.Configuration) 
    at org.apache.hadoop.fs.AbstractFileSystem.newInstance(AbstractFileSystem.java:131) 
    at org.apache.hadoop.fs.AbstractFileSystem.createFileSystem(AbstractFileSystem.java:157) 
    at org.apache.hadoop.fs.AbstractFileSystem.get(AbstractFileSystem.java:242) 
    at org.apache.hadoop.fs.FileContext$2.run(FileContext.java:337) 
    at org.apache.hadoop.fs.FileContext$2.run(FileContext.java:334) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671) 
    at org.apache.hadoop.fs.FileContext.getAbstractFileSystem(FileContext.java:334) 
    at org.apache.hadoop.fs.FileContext.getFileContext(FileContext.java:451) 
    at org.apache.hadoop.fs.FileContext.getFileContext(FileContext.java:473) 
    at org.apache.hadoop.mapreduce.v2.jobhistory.JobHistoryUtils.getDefaultFileContext(JobHistoryUtils.java:247) 

I barattoli necessari per questo è a posto, ma ancora ricevendo l'errore qualsiasi aiuto sarà grande. Grazie in anticipo

Aggiornamento

ho cercato di rimuovere la proprietà fs.AbstractFileSystem.s3a.impl ma mi dà la stessa prima eccezione quello mi è stato sempre in precedenza, che è

org.apache.hadoop.security.UserGroupInformation 
PriviledgedActionException as:mapred (auth:SIMPLE) cause:org.apache.hadoop.fs.UnsupportedFileSystemException: No AbstractFileSystem for scheme: s3a 
ERROR org.apache.hadoop.mapreduce.v2.jobhistory.JobHistoryUtils 
Unable to create default file context [s3a://bucket_name] 
org.apache.hadoop.fs.UnsupportedFileSystemException: No AbstractFileSystem for scheme: s3a 
    at org.apache.hadoop.fs.AbstractFileSystem.createFileSystem(AbstractFileSystem.java:154) 
    at org.apache.hadoop.fs.AbstractFileSystem.get(AbstractFileSystem.java:242) 
    at org.apache.hadoop.fs.FileContext$2.run(FileContext.java:337) 
    at org.apache.hadoop.fs.FileContext$2.run(FileContext.java:334) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671) 
    at org.apache.hadoop.fs.FileContext.getAbstractFileSystem(FileContext.java:334) 
    at org.apache.hadoop.fs.FileContext.getFileContext(FileContext.java:451) 
    at org.apache.hadoop.fs.FileContext.getFileContext(FileContext.java:473) 
+0

Qual è la posizione dei file jar? Sono nella stessa posizione su tutti i nodi? –

+0

@DurgaViswanathGadiraju La posizione è "/opt/cloudera/parcels/CDH-5.5.0-1.cdh5.5.0.p0.8/lib/hadoop" e sì sono nella stessa posizione su tutti i nodi –

risposta

4

Il problema non riguarda la posizione dei barattoli.

Il problema è con l'impostazione:

<property> 
    <name>fs.AbstractFileSystem.s3a.impl</name> 
    <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value> 
    <description>The FileSystem for S3A Filesystem</description> 
</property> 

Questa impostazione non è necessaria. A causa di questa impostazione, si è alla ricerca di seguente costruttore in S3AFileSystem di classe e non c'è tale costruttore:

S3AFileSystem(URI theUri, Configuration conf); 

seguente eccezione dice chiaramente che non è in grado di trovare un costruttore per S3AFileSystem con URI e Configuration parametri.

java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.fs.s3a.S3AFileSystem.<init>(java.net.URI, org.apache.hadoop.conf.Configuration) 

Per risolvere questo problema, rimuovere fs.AbstractFileSystem.s3a.impl impostazione da core-site.xml. Avere solo l'impostazione fs.s3a.impl in core-site.xml dovrebbe risolvere il tuo problema.

EDIT: org.apache.hadoop.fs.s3a.S3AFileSystem solo implementa FileSystem.

Quindi, non è possibile impostare il valore di fs.AbstractFileSystem.s3a.impl-org.apache.hadoop.fs.s3a.S3AFileSystem, poiché org.apache.hadoop.fs.s3a.S3AFileSystem non implementa AbstractFileSystem.

Sto usando Hadoop 2.7.0 e in questa versione s3A non è esposto come AbstractFileSystem.

C'è il biglietto JIRA: https://issues.apache.org/jira/browse/HADOOP-11262 per implementare lo stesso e la correzione è disponibile in Hadoop 2.8.0.

Supponendo, il vostro vaso ha esposto s3A come AbstractFileSystem, è necessario impostare quanto segue per fs.AbstractFileSystem.s3a.impl:

<property> 
    <name>fs.AbstractFileSystem.s3a.impl</name> 
    <value>org.apache.hadoop.fs.s3a.S3A</value> 
</property> 

che risolverà il tuo problema.

+0

Ho provato anche quello questo mi dà errore "PriviledgedActionException as: mapred (auth: SEMPLE) causa: org.apache.hadoop.fs.UnsupportedFileSystemException: No AbstractFileSystem per schema: s3a" A causa di questo solo ho aggiunto la proprietà nel core-stie.xml aggiornerò la mia domanda anche –

+0

Puoi dirmi, da dove stai raccogliendo il vaso per il file system S3a? Quindi, posso sicuramente risolvere il tuo problema. Stavo guardando l'implementazione qui: https://github.com/Aloisius/hadoop-s3a, che implementa semplicemente FileSystem. –

+0

jar è nella posizione di default del cloudera che è "/opt/cloudera/parcels/CDH-5.5.0-1.cdh5.5.0.p0.8/lib/hadoop" il nome del jar è hadoop-aws-2.6.0 -cdh5.5.0.jar –