Overview sobre o Apache Ozone

Anselmo Borges
Rescue Point
Published in
6 min readNov 13, 2020
Como estou estudando isso, acho que o post me ajuda a gravar

Iniciei os estudos sobre essa ferramenta que vai trazer uma velocidade absurda em termos de acesso a dados, armazenamento e a possibilidade de trabalhar com arquivos pequenos e grandes que é o problema do HDFS atual. Esse post é um resumo do que estou entendendo sobre a ferramenta com base na documentação e testes.

Apache Ozone

O vídeo abaixo é uma material de apoio desse post assim como esse post é material de apoio desse vídeo, tem gente que prefere lá, tem gente que prefere aqui, o esquema é agradar todo mundo, rs.

Acho que de uns 5 anos pra cá tem se falado muito de Hadoop, que basicamente é um sistema de arquivos interligado em cluster que faz uso do MapReduce/Yarn para a leitura rápida em grandes arquivos e com crescimento escalável. Esse modelo foi visto como uma inovação em termos de dados e revolucionou métodos de consultas em larga escala em que ambientes Data WareHouse e Teradata dominavam.

Pois bem, foram sentidas algumas dificuldades de lá pra cá. A principal delas é: Eu não tenho só arquivos grandes pra consulta, o que faço com os pequenos já que o HDFS não trabalha bem com eles?

Vários modelos de arquitetura usando outras ferramentas para esse gap foram criados para dar um jeito nesse problema, mas o Apache Ozone vem como um cara que pode substituir ou somar no HDFS atual fazendo os 2 cenários (arquivos grandes e pequenos).

O que é o Apache Ozone?

O Apache Ozone segue a mesma linha do Hadoop convencional de armazenamento de arquivos escalável em cluster com a diferença de poder atuar dentro de um ambiente de Container como Docker ou Kubernetes resolver exatamente esse problema de arquivos de tamanhos variados.

Integrações

Ué mas o que eu já tenho de legado no HDFS como Jobs Spark, databases no Hive, também trabalha no Ozone?

Zuera, eu sei responder sim… Pesquisei… rs

Então, aparentemente todos eles tem suporte para o Apache Ozone também então basta apontar sua external table do Hive para o diretório do Ozone ou seu rdd do spark para um arquivo parquet do Ozone e eles funcionam desde que use as bibliotecas de conexão.

Outros pontos do Ozone são:

  • Interface via linha de comando igual o HDFS
  • Biblioteca de comunicação e API
  • Suporte ao S3 da Amazon
  • Controle de acesso via tickets do kerberos assim como o HDFS

A organização do sistema de arquivos do Ozone é feita da seguinte forma:

Organização bem parecida com o S3 com excessão dos volumes

O esquema de arquivos aqui é um pouco diferente do HDFS, somente os administradores tem privilégios de criar o volumes e a partir dele é criada a estrutura independente de outros volumes, no HDFS você teria o / e a partir dele se cria tudo, imagine que cada volume começa na raiz de seu nome, ou seja, /volume1 por exemplo.

Vamos falar sobre a arquitetura

Como funciona a arquitetura do Ozone? É um pouco diferente da arquitetura do Hadoop, o gerenciamento do cluster é separado entre o gerenciamento de namespaces e gerenciamento de bloco, o que ajuda ele a escalar da melhor forma.

A separação desses gerenciamentos seria a seguinte:

  • Ozone Manager (OM): Gerencia os namespaces, quando você quer gravar um arquivo no Ozone é feita uma solicitação para o OM e ele te dá um bloco que pega no SCM e ai sim as gravações são feitas nos datanodes que ele determina. A leitura é feita de forma parecida, a requisição é feita para o OM que pede qual o bloco pro SCM e os datanodes retornam a informação.
  • Storage Container Manager (SCM): Ele gerencia o bloco das informações nos datanodes, sempre tem qualquer mudança possível cadastrada. Tem uma comunicação direta com OM que é a camada anterior. Todas as informação das listas são armazenadas em um banco nativo dele chamado rockDB.
  • RECON Server: Trata-se da interface de administração e monitoração dos serviços do Ozone.
  • Containers: Antes do dado ser gravado efetivamente ele é gerenciado na camada de containers com blocos de 5GB. Eles são gerenciados pelo SCM pois o SCM não tem acesso ao bloco final e sim a informação que o container gera do bloco. Quando a busca é feita pelo SCM ele tem 2 informações, o Container.id (Qual dos containers de 5Gb essa informação está) e o Local.id, dentro do container de 5GB qual sua posição). Essa camada de container é um dos grandes trunfos do Ozone perto do HDFS, peguei um exemplo da própria documentação do Ozone, suponhamos que tenho armazenado no datanode 196 TB, que estão quebrados em 40 mil containers de 5GB, a busca é muito mais rápida, cerca de 40x mais rápida do que um HDFS convencional e a busca é no nível de bloco. Imagina quantos blocos tenho num container de 5GB, agora multiplica por 40000.
  • Datanodes: Onde é armazenado o dado efetivamente, podem haver vários datanodes, o SCM quando vai escolher em quais datanodes ele vai gravar o dado, eles são divididos entre primário e secundários, sendo o node primário a gravação efetiva do dado e os secundários (no caso mais 2 dependendo da replicação configurada). Esse processo de replicação para os datanodes secundários é feita pelo Ratis.
  • Ratis: O recurso usado para realizar a replicação dos dados entre os datanodes. O Ratis trata-se de uma solução de replicação que é um dos projetos da Apache, o Apache RATIS (http://ratis.incubator.apache.org/)
  • Ozone CLI: A ferramenta via linha de comando para gerenciamento dos dados dentro do Ozone.
  • S3 Gateway: Ferramenta nativa do Ozone que através do AWS CLI configurado no servidor monta um bucket s3 na estrutura de buckets de um volume

Segue um desenho de como é dividida essa arquitetura:

Arquitetura do Apache Ozone

Tem muito mais informação e uma documentação bem completa no próprio site do Apache Ozone nesse Link

Tem o Docker na maquina? Quer fazer um teste?

Bom, eu sugiro um pequeno Hands-on pra ver como ele funciona, vamos subir em docker tudo como se fosse um single node e todos esses recursos citados estivessem na mesma maquina.

Com o Docker instalado, rode o comando abaixo no prompt de comando do seu sistema operacional (não manja de Docker? Dá uma olhada nesse vídeo aqui)

docker run -p 9878:9878 -p 9786:9876 -p 9888:9888 -p 9891:9891 apache/ozone

Foram liberadas uma serie de portas para acesso via navegador e via bash:

  • 9878: Pagina do S3 Gateway ou o comando pra se configurar
  • 9786: Pagina de configurações do cluster Ozone como um todo
  • 9888: Pagina de console do Ozone em si (mostra dados, volumes e não as configurações do cluster)
  • 9891: Porta onde está o server para as requisições HTTP sobre o Ozone.

Feito isso os serviços iniciados (monitorar no log), basta acessar via navegador usando o localhost como endereço já que o Docker mapeia na sua maquina. A exibição é parecida com essa abaixo:

Console do Apache Ozone na porta 9888

Bom, vai dando uma xeretada enquanto elaboro um novo post. No próximo pretendo mostrar o funcionamento, salvar uns arquivos e montar um bucket S3 para testar.

Aguardo vocês no próximo!
Anselmo Borges/Rescue Point

--

--

Anselmo Borges
Rescue Point

Bigdata Engineer, Cloud Architect, Nerd, Alcoholic, Brazilian Jiujitsu Black belt and hide and seek World champion.