Todavía estamos sorprendidos por la cantidad de clientes que acuden a nosotros para migrar de HDFS al almacenamiento de objetos moderno como MinIO. A estas alturas pensábamos que todos habían hecho la transición, pero cada semana hablamos con una organización importante y altamente técnica que ha decidido hacer la transición.
Muy a menudo, en esas discusiones, hay elementos de su infraestructura que desean mantener después de su migración. Hay marcos y software que surgieron del ecosistema HDFS que cuentan con una gran aceptación por parte de los desarrolladores y aún tienen un lugar en la pila de datos moderna. De hecho, a menudo hemos dicho que han surgido muchas cosas buenas del ecosistema HDFS. El problema fundamental es la estrecha relación entre el almacenamiento y la computación, no necesariamente con las herramientas y servicios que surgieron de la era del Big Data.
Esta publicación de blog se centrará en cómo realizar esa migración sin eliminar ni reemplazar herramientas y servicios que tienen valor. La realidad es que si no moderniza su infraestructura, no podrá lograr los avances en IA/ML que su organización requiere, pero no tiene que desperdiciar todo para llegar allí.
Ya hemos pasado por algunos
Nodos de cómputo: Kubernetes administra de manera eficiente contenedores Apache Spark y Apache Hive sin estado en nodos de cómputo, lo que garantiza una utilización óptima de los recursos y un escalado dinámico.
Capa de almacenamiento: MinIO
Capa de acceso: todo el acceso al almacenamiento de objetos MinIO está unificado a través de la API de S3, lo que proporciona una interfaz perfecta para interactuar con los datos almacenados.
Capa de seguridad: la seguridad de los datos es primordial. MinIO cifra todos los datos utilizando claves por objeto, lo que garantiza una protección sólida contra el acceso no autorizado.
Gestión de identidad: MinIO Enterprise se integra completamente con proveedores de identidad como WSO2, Keycloak, Okta, Ping Identity para permitir que las aplicaciones o los usuarios se autentiquen.
Un reemplazo completamente modernizado para Hadoop que le permite a su organización conservar Hive, YARN y cualquier otro producto de datos del ecosistema Hadoop que pueda integrarse con el almacenamiento de objetos, que es casi todo en la pila de datos moderna.
S3a es un punto final esencial para las aplicaciones que buscan abandonar Hadoop y ofrece compatibilidad con una amplia gama de aplicaciones dentro del ecosistema Hadoop. Desde 2006, los backends de almacenamiento de objetos compatibles con S3 se han integrado perfectamente en numerosas plataformas de datos dentro del ecosistema Hadoop como característica predeterminada. Esta integración se remonta a la incorporación de una implementación de cliente S3 en tecnologías emergentes.
En todas las plataformas relacionadas con Hadoop, la adopción del módulo hadoop-aws
y aws-java-sdk-bundle
es una práctica estándar, lo que garantiza un soporte sólido para la API S3. Este enfoque estandarizado facilita la transición fluida de aplicaciones desde backends de almacenamiento HDFS y S3. Simplemente especificando el protocolo apropiado, los desarrolladores pueden cambiar sin esfuerzo aplicaciones de Hadoop al almacenamiento de objetos moderno. El esquema de protocolo para S3 se indica como s3a://, mientras que para HDFS se indica como hdfs://.
Es posible hablar extensamente sobre los beneficios de migrar de Hadoop al almacenamiento de objetos moderno. Si está leyendo esto, ya es consciente de que sin la migración de plataformas heredadas como Hadoop, los avances en IA y otros productos de datos modernos probablemente quedarán fuera de la mesa. La razón se reduce al rendimiento y la escala.
No hay absolutamente ninguna duda de que las cargas de trabajo modernas requieren un rendimiento excepcional para competir con el volumen de datos que se procesan y la complejidad de las tareas que ahora se requieren. Cuando el rendimiento no se trata sólo de una evaluación comparativa vanidosa, sino de un requisito estricto, el campo de contendientes para los reemplazos de Hadoop
El otro elemento que impulsa las migraciones es la escala nativa de la nube. Cuando el concepto de nube es menos una ubicación física y más una
Parte integrante de este concepto son los beneficios económicos que se obtienen al liberarse del bloqueo del proveedor, lo que permite a una organización elegir las mejores opciones para cargas de trabajo específicas. Sin mencionar que la liberación de mantener tres copias separadas de los datos para protegerlos es cosa del pasado con
Antes de profundizar en los detalles de nuestra arquitectura, necesitará tener algunos componentes en funcionamiento. Para migrar fuera de Hadoop, obviamente deberá haberlo instalado para empezar. Si desea simular esta experiencia, puede comenzar este tutorial configurando la distribución Hortonworks de Hadoop aquí .
De lo contrario, puede comenzar con los siguientes pasos de instalación:
Configurar Ambari: A continuación,
Instale Apache Spark: Spark es esencial para procesar datos a gran escala. Siga el
Instale MinIO : Dependiendo de su entorno, puede elegir entre dos enfoques de instalación:
Después de instalar con éxito estos elementos, puede configurar Spark y Hive para usar MinIO en lugar de HDFS. Navegue a la interfaz de usuario de Ambari http://<ambari-server>:8080/ e inicie sesión con las credenciales predeterminadas: username: admin, password: admin
,
En Ambari, navegue hasta servicios, luego HDFS y luego hasta el panel Configuraciones como se muestra en la captura de pantalla siguiente. En esta sección, configurará Ambari para usar S3a con MinIO en lugar de HDFS.
Desplácese hacia abajo y navegue hasta Custom core-site
. Aquí es donde configurará S3a.
sudo pip install yq alias kv-pairify='yq ".configuration[]" | jq ".[]" | jq -r ".name + \"=\" + .value"'
A partir de aquí, tu configuración dependerá de tu infraestructura. Pero lo siguiente podría representar una forma para que core-site.xml
configure S3a con MinIO ejecutándose en 12 nodos y 1,2 TiB de memoria.
cat ${HADOOP_CONF_DIR}/core-site.xml | kv-pairify | grep "mapred" mapred.maxthreads.generate.mapoutput=2 # Num threads to write map outputs mapred.maxthreads.partition.closer=0 # Asynchronous map flushers mapreduce.fileoutputcommitter.algorithm.version=2 # Use the latest committer version mapreduce.job.reduce.slowstart.completedmaps=0.99 # 99% map, then reduce mapreduce.reduce.shuffle.input.buffer.percent=0.9 # Min % buffer in RAM mapreduce.reduce.shuffle.merge.percent=0.9 # Minimum % merges in RAM mapreduce.reduce.speculative=false # Disable speculation for reducing mapreduce.task.io.sort.factor=999 # Threshold before writing to drive mapreduce.task.sort.spill.percent=0.9 # Minimum % before spilling to drive
Hay bastantes optimizaciones que se pueden explorar consultando la documentación sobre este patrón de migración.
Reinicie todo cuando esté satisfecho con la configuración.
También deberás navegar hasta el panel de configuración de Spark2.
Desplácese hacia abajo hasta Custom spark-defaults
y agregue la siguiente propiedad para configurar con MinIO:
spark.hadoop.fs.s3a.access.key minio spark.hadoop.fs.s3a.secret.key minio123 spark.hadoop.fs.s3a.path.style.access true spark.hadoop.fs.s3a.block.size 512M spark.hadoop.fs.s3a.buffer.dir ${hadoop.tmp.dir}/s3a spark.hadoop.fs.s3a.committer.magic.enabled false spark.hadoop.fs.s3a.committer.name directory spark.hadoop.fs.s3a.committer.staging.abort.pending.uploads true spark.hadoop.fs.s3a.committer.staging.conflict-mode append spark.hadoop.fs.s3a.committer.staging.tmp.path /tmp/staging spark.hadoop.fs.s3a.committer.staging.unique-filenames true spark.hadoop.fs.s3a.committer.threads 2048 # number of threads writing to MinIO spark.hadoop.fs.s3a.connection.establish.timeout 5000 spark.hadoop.fs.s3a.connection.maximum 8192 # maximum number of concurrent conns spark.hadoop.fs.s3a.connection.ssl.enabled false spark.hadoop.fs.s3a.connection.timeout 200000 spark.hadoop.fs.s3a.endpoint http://minio:9000 spark.hadoop.fs.s3a.fast.upload.active.blocks 2048 # number of parallel uploads spark.hadoop.fs.s3a.fast.upload.buffer disk # use disk as the buffer for uploads spark.hadoop.fs.s3a.fast.upload true # turn on fast upload mode spark.hadoop.fs.s3a.impl org.apache.hadoop.spark.hadoop.fs.s3a.S3AFileSystem spark.hadoop.fs.s3a.max.total.tasks 2048 # maximum number of parallel tasks spark.hadoop.fs.s3a.multipart.size 512M # size of each multipart chunk spark.hadoop.fs.s3a.multipart.threshold 512M # size before using multipart uploads spark.hadoop.fs.s3a.socket.recv.buffer 65536 # read socket buffer hint spark.hadoop.fs.s3a.socket.send.buffer 65536 # write socket buffer hint spark.hadoop.fs.s3a.threads.max 2048 # maximum number of threads for S3A
Reinicie todo después de que se hayan aplicado los cambios de configuración.
Navegue hasta el panel de Hive para finalizar la configuración.
Desplácese hacia abajo hasta Custom hive-site
y agregue la siguiente propiedad:
hive.blobstore.use.blobstore.as.scratchdir=true hive.exec.input.listing.max.threads=50 hive.load.dynamic.partitions.thread=25 hive.metastore.fshandler.threads=50 hive.mv.files.threads=40 mapreduce.input.fileinputformat.list-status.num-threads=50
Puede encontrar más información de configuración de ajuste
Eso es todo, ahora puedes probar tu integración.
Esta publicación de blog describe un enfoque moderno para migrar desde Hadoop sin la necesidad de revisar completamente sus sistemas existentes. Al aprovechar Kubernetes para administrar Apache Spark y Apache Hive, e integrar MinIO para el almacenamiento de objetos con estado, las organizaciones pueden lograr una arquitectura equilibrada que admita el escalamiento dinámico y la utilización eficiente de los recursos. Esta configuración no sólo conserva sino que mejora las capacidades de sus entornos de procesamiento de datos, haciéndolos más sólidos y preparados para el futuro.
Con MinIO, usted se beneficia de una solución de almacenamiento que ofrece alto rendimiento en hardware básico, reduce los costos mediante la codificación de borrado (eliminando la redundancia de la replicación de datos de Hadoop) y evita limitaciones como la dependencia de proveedores y la necesidad de almacenes de metadatos basados en Cassandra. Estas ventajas son cruciales para las organizaciones que buscan aprovechar cargas de trabajo avanzadas de IA/ML sin descartar los elementos centrales de sus sistemas de datos existentes.
No dude en comunicarse para obtener discusiones más detalladas u orientación específica sobre cómo puede adaptar esta estrategia de migración para satisfacer las necesidades únicas de su organización. Ya sea por correo electrónico a [email protected] o en nuestra comunidad