Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

239
Views
Especifique las credenciales de AWS en hadoop

Quiero especificar AWS_SECRET_ACCESS_KEY y AWS_ACCESS_KEY_ID en tiempo de ejecución.

Ya intenté usar

 hadoop -Dfs.s3a.access.key=${AWS_ACESS_KEY_ID} -Dfs.s3a.secret.key=${AWS_SECRET_ACCESS_KEY} fs -ls s3a://my_bucket/

y

 export HADOOP_CLIENT_OPTS="-Dfs.s3a.access.key=${AWS_ACCESS_KEY_ID} -Dfs.s3a.secret.key=${AWS_SECRET_ACCESS_KEY}"

y

 export HADOOP_OPTS="-Dfs.s3a.access.key=${AWS_ACCESS_KEY_ID} -Dfs.s3a.secret.key=${AWS_SECRET_ACCESS_KEY}"

En los últimos dos ejemplos, traté de ejecutar con:

 hadoop fs -ls s3a://my-bucket/

En todos los casos obtuve:

 -ls: Fatal internal error com.amazonaws.AmazonClientException: Unable to load AWS credentials from any provider in the chain at com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:117) at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3521) at com.amazonaws.services.s3.AmazonS3Client.headBucket(AmazonS3Client.java:1031) at com.amazonaws.services.s3.AmazonS3Client.doesBucketExist(AmazonS3Client.java:994) at org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:297) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2669) at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94) at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703) at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373) at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295) at org.apache.hadoop.fs.shell.PathData.expandAsGlob(PathData.java:325) at org.apache.hadoop.fs.shell.Command.expandArgument(Command.java:235) at org.apache.hadoop.fs.shell.Command.expandArguments(Command.java:218) at org.apache.hadoop.fs.shell.Command.processRawArguments(Command.java:201) at org.apache.hadoop.fs.shell.Command.run(Command.java:165) at org.apache.hadoop.fs.FsShell.run(FsShell.java:287) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) at org.apache.hadoop.fs.FsShell.main(FsShell.java:340)

¿Qué estoy haciendo mal?

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Esta es una forma correcta de pasar las credenciales en tiempo de ejecución,

 hadoop fs -Dfs.s3a.access.key=${AWS_ACCESS_KEY_ID} -Dfs.s3a.secret.key=${AWS_SECRET_ACCESS_KEY} -ls s3a://my_bucket/

Su sintaxis necesita una pequeña corrección. Asegúrese de que no se pasen cadenas vacías como valores a estas propiedades. Haría que estas propiedades de tiempo de ejecución no fueran válidas y continuaría buscando las credenciales según la cadena de autenticación.

El cliente S3A sigue la siguiente cadena de autenticación:

  1. Si se proporcionaron detalles de inicio de sesión en el URI del sistema de archivos, se imprime una advertencia y luego se extraen el nombre de usuario y la contraseña para la clave y el secreto de AWS, respectivamente.
  2. Se fs.s3a.access.key y fs.s3a.secret.key en la configuración XML de Hadoop.
  3. Luego se buscan las variables de entorno de AWS.
  4. Se intenta consultar el servicio de metadatos de la instancia Amazon EC2 para recuperar las credenciales publicadas en las máquinas virtuales EC2.

Los otros métodos posibles para pasar las credenciales en tiempo de ejecución ( tenga en cuenta que no es seguro ni se recomienda proporcionarlas durante el tiempo de ejecución ),

1) Incrustarlos en la URI de S3

 hdfs dfs -ls s3a://AWS_ACCESS_KEY_ID:AWS_SECRET_ACCESS_KEY@my-bucket/

Si la clave secreta contiene algún símbolo + o / , escápelos con %2B y %2F respectivamente.

Nunca comparta la URL, los registros generados al usarla ni use un mecanismo de autenticación en línea de este tipo en producción.

2) export variables de entorno para la sesión

 export AWS_ACCESS_KEY_ID=<YOUR_AWS_ACCESS_KEY_ID> export AWS_SECRET_ACCESS_KEY=<YOUR_AWS_SECRET_ACCESS_KEY> hdfs dfs -ls s3a://my-bucket/
about 4 years ago · Santiago Trujillo Report

0

Creo que parte del problema es que, de manera confusa, a diferencia de las opciones JVM -D , el comando Hadoop -D espera un espacio entre -D y la clave, por ejemplo:

 hadoop fs -ls -D fs.s3a.access.key=AAIIED s3a://landsat-pds/

Sin embargo, aún evitaría hacer eso en la línea de comando, ya que cualquiera que pueda ejecutar un comando ps puede ver tus secretos.

Por lo general, los colocamos en core-site.xml cuando se ejecutan fuera de EC2; en EC2 se maneja mágicamente

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!