Ainda estamos surpresos com o número de clientes que nos procuram querendo migrar do HDFS para o armazenamento de objetos moderno, como o MinIO. A essa altura, pensávamos que todos haviam feito a transição, mas todas as semanas falamos com uma organização importante e altamente técnica que decidiu fazer a transição.
Muitas vezes, nessas discussões, há elementos da sua infraestrutura que pretendem manter após a migração. Existem estruturas e softwares que surgiram do ecossistema HDFS que contam com muita adesão dos desenvolvedores e ainda têm um lugar na pilha de dados moderna. Na verdade, sempre dissemos que muitas coisas boas surgiram do ecossistema HDFS. A questão fundamental está no armazenamento e na computação estreitamente acoplados, não necessariamente com as ferramentas e serviços que vieram da era do Big Data.
Esta postagem do blog se concentrará em como você pode fazer essa migração sem destruir e substituir ferramentas e serviços que têm valor. A realidade é que, se você não modernizar sua infraestrutura, não poderá fazer os avanços em IA/ML que sua organização exige, mas não precisará jogar tudo fora para chegar lá.
Já passamos por alguns
Nós de computação: o Kubernetes gerencia com eficiência contêineres Apache Spark e Apache Hive sem estado em nós de computação, garantindo utilização ideal de recursos e escalonamento dinâmico.
Camada de armazenamento: MinIO
Camada de acesso: todo o acesso ao armazenamento de objetos MinIO é unificado por meio da API S3, fornecendo uma interface perfeita para interagir com os dados armazenados.
Camada de segurança: a segurança dos dados é fundamental. MinIO criptografa todos os dados usando chaves por objeto, garantindo proteção robusta contra acesso não autorizado.
Gerenciamento de identidade: MinIO Enterprise integra-se totalmente com provedores de identidade como WSO2, Keycloak, Okta, Ping Identity para permitir a autenticação de aplicativos ou usuários.
Um substituto totalmente modernizado para o Hadoop que permite que sua organização mantenha o Hive, o YARN e qualquer outro produto de dados do ecossistema Hadoop que possa ser integrado ao armazenamento de objetos, que é quase tudo na pilha de dados moderna.
S3a é um endpoint essencial para aplicativos que buscam migrar do Hadoop, oferecendo compatibilidade com uma ampla variedade de aplicativos dentro do ecossistema Hadoop. Desde 2006, back-ends de armazenamento de objetos compatíveis com S3 foram perfeitamente integrados a diversas plataformas de dados no ecossistema Hadoop como recurso padrão. Esta integração remonta à incorporação de uma implementação de cliente S3 em tecnologias emergentes.
Em todas as plataformas relacionadas ao Hadoop, a adoção do módulo hadoop-aws
e aws-java-sdk-bundle
é uma prática padrão, garantindo suporte robusto para a API S3. Essa abordagem padronizada facilita a transição suave de aplicativos de back-ends de armazenamento HDFS e S3. Simplesmente especificando o protocolo apropriado, os desenvolvedores podem facilmente alternar aplicativos do Hadoop para o armazenamento de objetos moderno. O esquema de protocolo para S3 é indicado por s3a://, enquanto para HDFS é denotado como hdfs://.
É possível falar longamente sobre os benefícios da migração do Hadoop para o armazenamento de objetos moderno. Se você está lendo isso, já está ciente de que, sem a migração de plataformas legadas como o Hadoop, os avanços em IA e outros produtos de dados modernos provavelmente estarão fora de questão. A razão se resume ao desempenho e à escala.
Não há dúvida de que as cargas de trabalho modernas exigem um desempenho excepcional para competir com o volume de dados processados e a complexidade das tarefas exigidas atualmente. Quando o desempenho não é apenas uma questão de benchmarking de vaidade, mas um requisito difícil, o campo de candidatos a substitutos do Hadoop
O outro elemento que impulsiona as migrações é a escala nativa da nuvem. Quando o conceito de nuvem é menos uma localização física e mais uma
Parte integrante desse conceito são os benefícios econômicos decorrentes da liberação da dependência do fornecedor, o que permite que uma organização escolha as melhores opções para cargas de trabalho específicas. Sem falar na dispensa de manter três cópias separadas dos dados para protegê-los, coisa do passado com
Antes de mergulhar nas especificidades da nossa arquitetura, você precisará colocar alguns componentes em funcionamento. Para migrar do Hadoop, obviamente você precisará instalá-lo para começar. Se quiser simular essa experiência, você pode iniciar este tutorial configurando a distribuição Hortonworks do Hadoop aqui .
Caso contrário, você pode começar com as seguintes etapas de instalação:
Configurar o Ambari: próximo,
Instale o Apache Spark: Spark é essencial para processar dados em grande escala. Segue o
Instale o MinIO : Dependendo do seu ambiente, você pode escolher entre duas abordagens de instalação:
Depois de instalar esses elementos com êxito, você pode configurar o Spark e o Hive para usar MinIO em vez de HDFS. Navegue até a UI do Ambari http://<ambari-server>:8080/ e faça login usando as credenciais padrão: username: admin, password: admin
,
No Ambari, navegue até serviços, depois HDFS e depois até o painel Configurações como na imagem abaixo. Nesta seção, você está configurando o Ambari para usar S3a com MinIO em vez de HDFS.
Role para baixo e navegue até Custom core-site
. É aqui que você configurará o S3a.
sudo pip install yq alias kv-pairify='yq ".configuration[]" | jq ".[]" | jq -r ".name + \"=\" + .value"'
A partir daqui, sua configuração dependerá da sua infraestrutura. Porém, o que está abaixo pode representar uma maneira de core-site.xml
configurar S3a com MinIO rodando em 12 nós e 1,2TiB de memória.
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
Existem algumas otimizações que podem ser exploradas verificando a documentação sobre este padrão de migração
Reinicie tudo quando estiver satisfeito com a configuração.
Você também precisará navegar até o painel de configuração do Spark2.
Role para baixo até Custom spark-defaults
e adicione a seguinte propriedade para configurar com 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 tudo depois que as alterações de configuração forem aplicadas.
Navegue até o painel Hive para finalizar a configuração.
Role para baixo até Custom hive-site
e adicione a seguinte propriedade:
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
Você pode encontrar mais informações de configuração de ajuste fino
É isso, agora você pode testar sua integração.
Esta postagem do blog descreveu uma abordagem moderna para migrar do Hadoop sem a necessidade de revisar completamente os sistemas existentes. Ao aproveitar o Kubernetes para gerenciar o Apache Spark e o Apache Hive e integrar o MinIO para armazenamento de objetos com estado, as organizações podem obter uma arquitetura equilibrada que oferece suporte ao dimensionamento dinâmico e à utilização eficiente de recursos. Essa configuração não apenas retém, mas também aprimora os recursos dos seus ambientes de processamento de dados, tornando-os mais robustos e preparados para o futuro.
Com o MinIO, você se beneficia de uma solução de armazenamento que oferece alto desempenho em hardware comum, reduz custos por meio de codificação de eliminação (eliminando a redundância da replicação de dados do Hadoop) e contorna limitações como dependência de fornecedor e a necessidade de armazenamentos de metadados baseados em Cassandra. Essas vantagens são cruciais para organizações que buscam aproveitar cargas de trabalho avançadas de IA/ML sem descartar os elementos principais de seus sistemas de dados existentes.
Sinta-se à vontade para entrar em contato para discussões mais detalhadas ou orientações específicas sobre como você pode adaptar esta estratégia de migração para atender às necessidades exclusivas da sua organização. Seja através do e-mail [email protected] ou em nossa comunidade