cluster aws amazon-s3 hadoop hive hdfs emr

amazon-s3 - aws - cluster emr



¿Cómo copio archivos de S3 a Amazon EMR HDFS? (3)

Ahora Amazon tiene un contenedor implementado sobre distcp, a saber: s3distcp .

S3DistCp es una extensión de DistCp que está optimizada para trabajar con Amazon Web Services (AWS), particularmente Amazon Simple Storage Service (Amazon S3). Utiliza S3DistCp agregándolo como un paso en un flujo de trabajo. Con S3DistCp, puede copiar de manera eficiente grandes cantidades de datos de Amazon S3 a HDFS, donde se pueden procesar siguiendo los pasos posteriores en el flujo de trabajo de Amazon Elastic MapReduce (Amazon EMR). También puede usar S3DistCp para copiar datos entre los depósitos de Amazon S3 o desde HDFS a Amazon S3

Ejemplo Copie los archivos de registro de Amazon S3 a HDFS

El siguiente ejemplo ilustra cómo copiar archivos de registro almacenados en un depósito de Amazon S3 en HDFS. En este ejemplo, la opción --srcPattern se usa para limitar los datos copiados a los registros de daemon.

elastic-mapreduce --jobflow j-3GY8JC4179IOJ --jar / s3://us-east-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar / --args ''--src,s3://myawsbucket/logs/j-3GY8JC4179IOJ/node/,/ --dest,hdfs:///output,/ --srcPattern,.*daemons.*-hadoop-.*''

Estoy ejecutando colmenas sobre EMR, y necesito copiar algunos archivos en todas las instancias de EMR.

Una forma que entiendo es simplemente copiar archivos al sistema de archivos local en cada nodo, el otro es copiar los archivos al HDFS; sin embargo, no he encontrado una forma simple de copiar stright de S3 a HDFS.

¿Cuál es la mejor manera de hacerlo?


Tenga en cuenta que, según Amazon, en http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/FileSystemConfig.html "Amazon Elastic MapReduce - Configuración del sistema de archivos", S3 Block FileSystem está en desuso y su prefijo URI ahora es s3bfs: // y específicamente desaconsejan su uso, ya que "puede desencadenar una condición de carrera que podría hacer que falle el flujo de trabajo".

Según la misma página, HDFS ahora es un sistema de archivos de "primera clase" en S3, aunque es efímero (desaparece cuando finaliza el trabajo de Hadoop).


la mejor forma de hacerlo es usar el comando distcp de Hadoop. Ejemplo (en uno de los nodos del clúster):

% ${HADOOP_HOME}/bin/hadoop distcp s3n://mybucket/myfile /root/myfile

Esto copiaría un archivo llamado myfile de un depósito S3 llamado mybucket a /root/myfile en HDFS. Tenga en cuenta que este ejemplo asume que está utilizando el sistema de archivos S3 en modo "nativo"; esto significa que Hadoop ve cada objeto en S3 como un archivo. Si usa S3 en modo bloque, reemplazará s3n por s3 en el ejemplo anterior. Para obtener más información sobre las diferencias entre S3 nativo y el modo de bloque, así como una explicación del ejemplo anterior, consulte http://wiki.apache.org/hadoop/AmazonS3 .

Descubrí que distcp es una herramienta muy poderosa. Además de poder usarlo para copiar una gran cantidad de archivos dentro y fuera de S3, también puede realizar copias rápidas de clúster a clúster con grandes conjuntos de datos. En lugar de empujar todos los datos a través de un solo nodo, distcp utiliza múltiples nodos en paralelo para realizar la transferencia. Esto hace que distcp sea considerablemente más rápido cuando se transfieren grandes cantidades de datos, en comparación con la alternativa de copiar todo en el sistema de archivos local como intermediario.