Prévia do material em texto
1 Arquiteturas de hardware/software de big data Arquiteturas de hardware/software de big data 2 Arquiteturas de hardware/ software de big data Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: Exemplificar arquiteturas de hardware para big data. Ilustrar arquiteturas de software para big data. Configurar um ambiente de programação para big data. Introdução Big data é um termo genérico para as estratégias e tecnologias não tradicionais necessárias para reunir, organizar, processar e coletar insights de grandes conjuntos de dados. Embora o problema de trabalhar com dados — que ultrapassa o poder de computação ou do armazenamento em um único computador — não seja novo, a difusão, a escala e o valor desse tipo de computação aumentaram muito nos últimos anos. Apesar de as abordagens de implementação serem diferentes, existem alguns pontos em comum nas estratégias e no software. Mesmo que as etapas que você verá possam não ser verdadeiras em todos os casos de uso, iremos tratar de nomenclaturas e termos comuns amplamente usados em se tratando de big data. Portanto, neste capítulo, você estudará sobre big data em um nível de fundamentação em arquitetura de hardware e software em servidores para lidar com grandes conjuntos de dados, partindo de conceitos comuns em pesquisas sobre o assunto, mas também examinando em alto nível alguns dos processos e tecnologias atualmente em uso nesse ambiente de big data. 3 Arquiteturas de hardware/software de big data 1 Arquitetura de hardware em big data Um dos primeiros passos para lidar com big data é, sem dúvidas, o planejamento. Por mais que tenhamos vivido tempos em que lidar com dados não era algo tão complexo, na atualidade, isso tem se tornado um desafio contínuo. Mas não por acaso, afinal, os computadores e os servidores de dados que temos não foram criados no princípio da popularização da computação para lidar com grande volume de dados. Com um projeto bem feito, deve ser levado em consideração que tipo de dado, com que frequência e em quais condições os dados se encontram. Todo um processo de ETL (Extração, Transformação e Carga, do inglês, Extract, Transform, Load) deve ser planejado e o armazenamento dos dados deve estar à altura do que poderá ser exigido dele. Depois que os dados estiverem disponíveis, o sistema poderá começar a processar os dados para exibir informações reais. A camada de computação é talvez a parte mais diversa do sistema, pois os requisitos e a melhor abordagem podem variar de maneira significativa, dependendo do tipo de informação que se queira extrair dos dados. Estes são frequentemente processados, repetidamente e iterativamente por uma única ferramenta ou usando várias ferramentas para apresentar diferentes tipos de insights. Os requisitos básicos para trabalhar com big data são os mesmos para trabalhar com conjuntos de dados de qualquer tamanho. No entanto, a escala massiva, a velocidade de ingestão e processamento e as características dos dados que devem ser tratados em cada etapa do processo apresentam novos desafios significativos ao projetar soluções. O objetivo da maioria dos sistemas de big data é apresentar informações e conexões de grandes volumes de dados heterogêneos que não seriam possíveis usando-se métodos convencionais. Para isso, são utilizadas técnicas específicas, como a computação em cluster. Computação em cluster A computação em cluster é a prática de agrupar os recursos de várias máquinas e gerenciar os seus recursos coletivos para concluir tarefas. Os clusters de computadores exigem uma camada de gerenciamento de cluster, que lida com a comunicação entre os nodos individuais e coordena a atribuição do trabalho. Devido às características de big data, computadores individuais geralmente são inadequados para lidar com os dados de forma satisfatória. Arquiteturas de hardware/software de big data 4 Para atender melhor às altas necessidades computacionais de armazenamento e big data, os clusters de computadores são mais adequados. Segundo Sharda, Delen e Turban (2019), um clustering de big data combina os recursos de muitas máquinas menores, buscando fornecer vários benefícios, como os listados a seguir. Pool de recursos: combinar o espaço de armazenamento disponível para armazenar dados é um benefício claro, mas o conjunto de CPU e memória também é extremamente importante. O processamento de grandes conjuntos de dados requer grandes quantidades de todos esses três recursos. Alta disponibilidade: os clusters podem fornecer níveis variados de tolerância a falhas e garantias de disponibilidade para impedir que falhas de hardware ou software afetem o acesso a dados e processamentos. Isso se torna cada vez mais importante à medida que continuamos enfatizando a importância da análise em tempo real. Escalabilidade fácil: os clusters facilitam o dimensionamento horizontal adicionando máquinas ao grupo. Isso significa que o sistema pode reagir a alterações nos requisitos de recursos sem expandir os recursos físicos em uma máquina. A formulação física de clusters depende apenas que os computadores que comporão o conjunto de clustering “falem a mesma língua”. Ou seja, é preciso que haja uma configuração padrão entre as máquinas, como um mesmo sistema base, que permita que haja um padrão entre todos os computadores em rede. A Figura 1 representa a ideia de clusterização, com computadores interligados dividindo entre si a carga de trabalho de suas tarefas. 5 Arquiteturas de hardware/software de big data Um cluster pode partir da união de simples computadores, como apresentado na Figura 1. Mas, geralmente, são formados por servidores, máquinas com arquitetura física diferente, algumas vezes mais compacta, permitindo que vários deles sejam armazenados em um mesmo rack, por exemplo. Segundo West, Dean e Andrews (2019), um rack serve para otimizar o uso de salas em datacenters, por permitir que possamos empilhar equipamentos com o espaço e ventilação adequados, além de facilitar o acesso aos dispositivos que estão instalados no rack. Eles podem ser abertos, para facilitar o acesso, ou fechados para aumentar a proteção física. Dentre os equipamentos que podemos colocar em um rack, estão os servidores e equipamentos de rede, como roteadores, switches, patch-panels, entre outros. A Figura 2 apresenta um exemplo de um datacenter com racks contendo diversos equipamentos. Um cluster de computadores atua como uma base com a qual outros softwares interagem para processar os dados. As máquinas envolvidas no cluster também costumam estar envolvidas no gerenciamento de um sistema de armazenamento distribuído. Arquiteturas de hardware/software de big data 6 Morais et al. (2018) apresentam o cluster de computadores como alternativa ao processamento convencional de dados, sendo baseado nos conceitos de computação paralela e distribuído por meio do uso de computadores de baixo um custo. A ideia de cluster é dividir cada tarefa em subtarefas, que serão executadas paralelamente em diversos computadores. Mas, ainda segundo Morais et al. (2018), essa tarefa não é trivial, pois acaba exigindo um dimensionamento exato das subtarefas, além de ter a necessidade de tratar o balanceamento de carga e o escalonamento das tarefas; tudo isso com o objetivo de utilizar os recursos computacionais de maneira plena. O uso de clusters requer uma solução para gerenciar a associação aos nós, coordenar o compartilhamento de recursos e agendar o trabalho real em nós individuais. A associação ao cluster e a alocação de recursos podem ser gerenciadas por software, como o YARN do Hadoop (que significa Yet Another Resource Negotiator, em inglês, ou algo como outro negociador de recursos) ou também o Apache Mesos. O Apache Mesos foi desenvolvido utilizando-se os mesmos princípios que o kernel Linux, apenasem um nível diferente de abstração. O kernel do Mesos é executado em todas as máquinas e fornece aplicativos (p. ex., Hadoop, Spark, Kafka, Elasticsearch) com APIs para gerenciamento e agendamento de recursos em todo o datacenter e ambientes em nuvem. Como fazer o projeto de hardware para big data? Devido à alta velocidade em que o hardware evolui, não é possível fixar os valores de memória, disco e CPU que seriam os mais adequados para a implantação de um sistema de big data. Qualquer informação relacionada a requisito básico de infraestrutura para big data que estimássemos aqui, estaria defasado no próximo ano. Diversos fatores devem ser levados em consideração, ao planejarmos o hardware a ser utilizado em soluções para big data: • Quais são as restrições financeiras que devem ser observadas: isso impacta em toda o projeto da arquitetura. 7 Arquiteturas de hardware/software de big data • Quais os tipos de dados a serem armazenados: formato dos dados, tamanho médio, dados estáticos ou dados de stream, etc. • Por quanto tempo esses dados ficarão disponíveis: quando conseguimos delimitar um tempo em que o dado não será mais útil, podemos economizar espaço em disco ao agendar deleções periódicas. • Que tipo de análise será feita nestes dados: por exemplo, o uso de redes neurais, uma técnica de aprendizado de máquina, impacta em alto consumo de CPU ou GPU. • Quais sistemas e frameworks serão utilizados: cada sistema que compõe um ecossistema de big data tem seus próprios requisitos, que muitas vezes precisarão ser somados para chegarmos a uma configuração ideal. • Estratégia de replicação: quantas réplicas eu preciso dos meus dados? Quanto mais réplicas, mais disco (HD) será consumido. • A instalação será on-premise (local) ou em cloud (na nuvem): quando a instalação é local, trazemos para nós toda a responsabilidade em relação a projeto, configuração e manutenção do hardware, mas por outro lado não há o custo do serviço. Já em ambientes da nuvem, esse trabalho é terceirizado, com um custo que pode ser fixo ou variável ao mês. Para a simulação do desempenho de hardware e software de um ambiente de big data, você pode utilizar um benchmark. Um benchmark é um sistema que possibilita a geração dos dados e análise de desempenho do sistema como um todo. Existem alguns benchmarks específicos para big data, que você pode utilizar para testar seu ambiente, como o GridMix (http://hadoop.apache.org/docs/r1.2.1/gridmix.html), desenvolvido pela apache e específico para clusters Hadoop, e o HiBench (https://github.com/Intel-bigdata/HiBench), uma suíte de micro- benchmark,, com workloads para Hadoop, Spark Streaming, Storm, Flink, entre outros. 2 Arquitetura de software para big data A arquitetura de software é composta por todos os sistemas, bibliotecas e frameworks que são utilizados para compor o ecossistema. Uma tarefa importante de quem lida com big data é a inserção ou a ingestão de dados nos sistemas de armazenamento. Essa inserção é o processo de pegar dados brutos e adicioná-los ao sistema. A complexidade dessa operação depende muito do formato e da qualidade das fontes de dados e da distância que os dados estão do estado desejado antes do processamento. Geralmente, quando falamos de grandes conjuntos de dados e big data, estamos falando de dados heterogêneos, ou seja, que são em formatos e tamanhos variados, como imagens, vídeos, áudios, textos, entre outros. De acordo com Castro et al. (2016), as ferramentas Sqoop, Flume e Kafka fazem parte do ecossistema Hadoop, da fundação Apache, em processos que Arquiteturas de hardware/software de big data 8 incluem a inserção de dados, assim como acompanhamento de logs e fila de processos de big data. Tecnologias como o Apache Sqoop podem pegar dados existentes de bancos de dados relacionais e adicioná-los a um sistema de big data. Da mesma forma, o Apache Flume é um projeto criado para agregar e importar logs de aplicativos e servidores. Sistemas de captura de stream, como o Apache Kafka, também podem ser usados como uma interface entre vários geradores de dados e um sistema de big data. Outras estruturas de ingestão podem ajudar a agregar e normalizar a saída dessas ferramentas no final do pipeline de ingestão. Durante o processo de ingestão, geralmente ocorre algum nível de análise, classificação e rotulagem dos dados. Às vezes, esse processo é chamado de ETL (que significa, em português, extração, transformação e carga) (Figura 3). Embora esse termo se refira convencionalmente a processos de data warehouse, alguns dos mesmos conceitos se aplicam aos dados que entram no sistema de big data. As operações típicas podem incluir modificar os dados recebidos para formatá-los, categorizar e rotular dados, filtrar dados desnecessários ou incorretos, ou validar potencialmente a conformidade com certos requisitos. Como mostrado na Figura 3, o processo de ETL é um ciclo que passa por três etapas. Na etapa de extração é onde se obtém os dados, em seu formato original e bruto. Para que ele se adapte à arquitetura de big data que será utilizada, os dados serão transformados em uma segunda etapa, sendo tratados quanto ao seu formato. Após os devidos ajustes e padronizações dos dados, 9 Arquiteturas de hardware/software de big data eles serão carregados ou inseridos dentro de uma base de dados que, nesse caso, pode ser em ambiente distribuído e clusterizado. Os processos de ingestão normalmente entregam os dados aos componentes que gerenciam o armazenamento, para que possam ser mantidos no disco de maneira confiável. Embora isso pareça uma operação simples, o volume de dados recebidos, os requisitos de disponibilidade e a camada de computação distribuída tornam necessários os sistemas de armazenamento mais complexos. Isso geralmente significa utilizar um sistema de arquivos distribuído para armazenamento de dados brutos. Soluções como o sistema de arquivos HDFS (Hadoop Distributed File System ou sistema de arquivos distribuídos Hadoop), parte integrante do Apache Hadoop, permitem que grandes quantidades de dados sejam gravadas em vários nodos no cluster. Utilizar esse sistema de arquivos garante que os dados possam ser acessados por recursos de computação, carregados na memória RAM do cluster para operações em cache. Os dados também podem ser importados para outros sistemas distribuídos para um acesso mais estruturado. Bancos de dados distribuídos, especialmente os NoSQL, são adequados para essa função, porque geralmente são projetados com as mesmas considerações de tolerância a falhas e permitem manipular dados heterogêneos. Existem tipos diferentes de bancos de dados distribuídos, de acordo com o seu tipo de dado, e dependendo de como você deseja organizar e apresentar os dados. Para saber mais sobre algumas das opções e para qual finalidade elas servem melhor, basta realizar uma pesquisa sobre um comparativo entre os bancos de dados tradicionais (modelo relacional) e os não relacionais (NoSQL). 3 Utilizando o ambiente de big data A melhoria do desempenho do acesso a arquivos é um grande desafio nos serviços em nuvem em tempo real. O sistema distribuído é um conjunto de diferentes computadores que, interligados por meio de uma rede, apresentam- se ao usuário como um sistema único e com coerência (TANENBAUM; BOS, 2016). Trabalhar com arquivos distribuídos requer uma estrutura bem preparada para isso. É preciso analisar as pré-condições para lidar com esse problema, considerando os aspectos de requisitos, hardware, software e os ambientes de rede para aplicações em nuvem. Antes de mais nada, a análise dos tipos diferentes de arquivos envolvidos faz toda a diferença na escolha da Arquiteturas de hardware/software de big data 10 técnica ou ferramenta ideal. A seguir, vamos analisar algumas das opções de utilização de sistemas e ecossistemas para o processamento de big data, dando maiorenfoque ao Apache Hadoop, por ser a ferramenta mais utilizada para big data atualmente. É possível criar instâncias de uso de projetos com o Apache Hadoop em nuvem, em serviços gratuitos ou pagos. A Cloudera disponibiliza um cluster virtualizado que você pode usar para aprender mais sobre clusters baseados em Hadoop, tendo já instaladas e configuradas diversas aplicações, e também um tutorial que leva o passo a passo na execução de algumas tarefas para entender o ambiente. Você pode fazer o download de forma gratuita, para testar e entender melhor como funciona um ecossistema de big data. Há também a possibilidade de utilizar containers, do tipo Docker, que se encontram disponíveis na internet para download gratuito. Um container reúne uma aplicação de maneira compacta, criando um ambiente à parte do sistema operacional da máquina local, pronto para ser baixado ou enviado para um ambiente, seja local ou externo. Ecossistema Hadoop O Hadoop é um sistema tão poderoso que acabou sendo adotado como base e padrão para diversas outras tecnologias. Dentro do ecossistema do Hadoop existem diferentes ferramentas, cada uma com um modelo de operação. Em um projeto de implementação de sistema de controle e gerenciamento de arquivos distribuídos, ao descrever o design e a implementação de um novo sistema distribuído em camadas, podemos nos basear nos modelos: HDFS, para armazenar grandes conjuntos de dados de maneira distribuída, em conjunto com o MapReduce, que tem por responsabilidade o processamento distribuído (GOLDMAN et al., 2012, documento on-line). O Hadoop nasceu com base na leitura de um projeto lançado pela empresa Google, em 2003, chamado GFS (Google File System), cujo objetivo era aprimorar o mecanismo 11 Arquiteturas de hardware/software de big data de busca da empresa, com a capacidade de gerenciar e processar os enormes volumes de dados da Google. Logo, podemos dizer que essa estrutura poderosa do Hadoop foi criada justamente para atender à demanda crescente de processar grandes volumes de dados em um mundo cada dia mais conectado e gerando quantidade de dados nunca imaginada. Dentro da plataforma Hadoop existe o HDFS, o qual é empregado no uso de caches em uma biblioteca cliente e em vários serviços de cache. Os serviços de cache são projetados com três camadas de acesso: um cache na memória, uma captura instantânea do disco local e a exibição real do disco, fornecido pelo HDFS (MORAIS et al., 2018). Os arquivos carregados do HDFS são armazenados em cache na memória compartilhada, que pode ser acessada diretamente por uma biblioteca e um sistema cliente. Dentro do uso de HDFS é comum o processamento em lote. Este processamento é um método de computação em um grande conjunto de dados. O processo envolve dividir o trabalho em partes menores, agendar cada peça em uma máquina individual, reorganizar os dados com base nos resultados intermediários e, em seguida, calcular e montar o resultado final. Essas etapas geralmente são chamadas individualmente de divisão, mapeamento, reprodução aleatória, redução e montagem ou, coletivamente, como um algoritmo de redução de mapa distribuído (RAMAKRISHNAN; GEHRKE, 2011). Essa também é a estratégia usada pelo MapReduce, do Apache Hadoop. O processamento em lote é mais útil ao lidar com conjuntos de dados muito grandes, pois exigem mais poder computacional. Hadoop MapReduce é, portanto, um framework, uma técnica ou paradigma de programação que permite que usuários criem programas e aplicações divididos em componentes, podendo, assim, permitir que os dados sejam processados paralelamente (SHARDA; DELEN; TURBAN, 2019). Com essa divisão modular, a aplicação passa a funcionar estando em cluster, com duas subdivisões de código: Map e Reduce. A função chamada map() executa uma filtragem e classificação dos dados. Essa etapa tem a responsabilidade de realizar o processo de um ou mais blocos de dados, produzindo resultados comumente chamados de resultados intermediários. Em geral, a tarefa de mapeamento é processada em paralelo, desde que as operações de mapeamento sejam independentes entre si. A tarefa Reduce é executada por meio da função reduce(). Esta função é a responsável pela consolidação dos resultados produzidos por meio de cada uma das tarefas Map e entra em ação logo após a etapa de tarefa Map. Arquiteturas de hardware/software de big data 12 Tudo isso é realizado em nível de programação. Ao instalar o HDFS, uma biblioteca com a tarefa MapReduce está disponível, podendo ser usada em linguagens como Java, Python, R e Scala. Assim, em alto nível, o programador pode definir de onde vêm os dados, em que quantidade serão processados e posteriormente carregados para um ambiente de armazenamento de dados (de preferência um sistema de armazenamento distribuído e preparado para o universo big data). Além do HDFS edo MapReduce, o Hadoop conta com mais dois componentes básicos: o Common, que e o conjunto de bibliotecas utilizada no sistema, e o YARN, que é o gerenciador de recursos do sistema. O ecossistema Hadoop é um sistema complexo que permite o acoplamento de diversos outros sistemas com funções variadas. Ele foi projetado para a expansão de servidores únicos para milhares de máquinas, cada uma oferecendo computação e armazenamento local. Em vez de confiar no hardware para oferecer alta disponibilidade, a própria biblioteca foi projetada para detectar e manipular falhas na camada de aplicativos, oferecendo um serviço altamente disponível em cima de um cluster de computadores, cada um dos quais pode estar sujeito a falhas, sendo estas verificadas e tratadas em tempo oportuno. Utilizando HDFS Ao utilizar um sistema de arquivos distribuídos com Hadoop, vários aplicativos integrados a uma biblioteca cliente podem acessar um serviço de cache simultaneamente. Os serviços de cache são organizados no estilo Ponto a Ponto (P2P), usando uma tabela hash distribuída. Cada arquivo em cache é dividido em blocos a fim de melhorar a robustez e aliviar a carga de trabalho. Resultados experimentais mostram que o novo sistema de cache pode armazenar arquivos com uma ampla variedade de tamanhos e tem desempenho excelente de acesso aos arquivos, trabalhando com taxa de retorno em milissegundos para ambientes altamente simultâneos. Dentro do contexto do HDFS, existem elementos que tornam a estrutura útil para diversas aplicações. Com o uso dessa arquitetura, a arquitetura HDFS tem alguns elementos, como o NameNode, que é o nó central que serve de referência para as aplicações de clientes solicitantes, e os DataNodes, os nós que armazenam os blocos de dados. A ilustração da arquitetura HDFS é estruturada conforme a apresentada na Figura 4. 13 Arquiteturas de hardware/software de big data Box Exemplo – Como funciona a arquitetura de hardware e software do Apache Hadoop: Um cluster para big data é formado por nodos, cada um com diferentes atribuições. Em uma configuração padrão, temos um nodo mestre associado a n nodos trabalhadores. No Hadoop o nodo mestre é o NameNode, e os trabalhadores são os DataNodes • NameNode: normalmente executa em um computador dedicado a este serviço. Armazena informações sobre o cluster e suas configurações, como quais são os DataNodes ativos, além de informações sobre o sistema de arquivos, como a lista de blocos de dados e em quais DataNodes eles estão. É o ponto central do cluster Hadoop, que mantém as informações para a interligação entre todos os nodos. • DataNodes: são executados em todas as outras máquinas do cluster – normalmente um DataNode em cada computador (embora seja possível – mas não comum – haver mais de um DataNode por computador. Armazenam os blocos de dados, e disponibilizam o serviço de leitura e escrita para os clientes do Arquiteturas de hardware/software de big data 14 sistema, e também criam, deletam e replicam os blocos de dados,seguindo as ordens do NameNode. Quanto ao armazenamento, distribuição e particionamento, em um cluster Hadoop, o NameNode é responsável por: • operações como abrir, fechar e renomear os arquivos e diretórios; • receber as requisições de armazenamentos de dados, e então: o particionar cada arquivo a ser armazenado em um ou mais blocos, de tamanho padrão igual a 128MB; o distribuir cada bloco para um ou mais DataNodes, de acordo com o fator de replicação pré-configurado (usualmente igual a três); A vantagem de termos os dados particionados e replicados no cluster é relacionada ao processamento paralelo e distribuído. Os dados são processados localmente, nos DataNodes em que se localizam, e isso permite que mais trabalhos sejam executados concomitantemente, nos diversos DataNodes, aproveitando o poder de processamento disponível no cluster, e consequentemente impactando no desempenho. Quanto ao sistema operacional, usualmente executam sobre GNU/Linux, todavia, como o Hadoop é desenvolvido em linguagem de programação Java, qualquer máquina que suporte Java poderia ser utilizada. Quanto à rede, ao trabalharmos com diferentes computadores, é importante ter atenção ao planejamento e à qualidade da infraestrutura, para tratar e reduzir problemas como a latência ou mesmo falhas. Quando há uma queda em algum setor da rede, alguns DataNodes podem perder a conexão com o NameNode. O NameNode recebe periodicamente heartbeats de cada DataNode, que são avisos de que estão ativos e sem falha. Caso não receba o aviso, após um tempo o NameNode vai entender que os blocos que estão nestes nodos inacessíveis terão que ser replicados novamente. Se essa replicação ocorrer, e os nodos que antes estavam inacessíveis se tornarem novamente visíveis na rede, o NameNode dará início ao processo de formatação dos nodos que haviam falhado. Esse processo é conhecido como “STONITH” (Shoot The Other Node In The Head), e serve para manter a consistência dos blocos e da replicação dentro do cluster. 15 Arquiteturas de hardware/software de big data O Hadoop foi projetado partindo do pressuposto que a falha do hardware onde estão os arquivos e os dados é uma regra e não uma exceção. Mais cedo ou mais tarde, todo hardware apresenta falhas e o sistema deve ser robusto e capaz o suficiente para lidar com as falhas de hardware que venham a acontecer. Com a sua estrutura em condições ideais, o uso do HDFS em ambiente preparado é um eficaz método de processamento e consulta a dados em arquivos em tempo real. Com a proposta de unificar dados e articular processos com arquivos, o HDFS é uma ótima solução, visto que unifica a visão de arquivos de diferentes formatos e vindos de fontes distintas. Outras componentes relacionados ao ecossistema do Hadoop Outros sistemas que fazem parte do ecossistema Hadoop realizam funções complementares entre si. O Apache Spark oferece maneiras diferentes de obter processamento em tempo real ou quase em tempo real. Existem trade- off s com cada uma dessas tecnologias, que podem afetar qual abordagem é melhor para qualquer problema individual. Em geral, o processamento em tempo real é mais adequado para analisar blocos menores de dados que estão mudando ou sendo adicionados rapidamente ao sistema. Outras ferramentas frequentemente se conectam às estruturas acima e fornecem interfaces adicionais para interagir com as camadas subjacentes. Por exemplo, o Apache Hive fornece uma interface de data warehouse para o Hadoop, o Apache Pig fornece uma interface de consulta de alto nível (SHARDA; DELEN; TURBAN, 2019), enquanto as interações semelhantes a SQL com dados podem ser alcançadas com projetos como Apache Drill, Apache Impala e Presto (CURSOS de Apache Drill..., 2020). Para o aprendizado de máquina (machine learning), projetos como Apache Mahout, Hadoop Submarine e MLlib podem ser úteis (USE o Apache Spark..., 2019). Para a programação de análise direta com amplo suporte no ecossistema de big data, as linguagens R, Python e suas respectivas bibliotecas são escolhas muito recorrentes (RAYTHZ, 2018). Cassandra, HBase, Hive são aplicações que podem ser utilizados junto à camada de armazenamento de dados do ecossistema Hadoop. Armazenando dados no ecossistema Hadoop A implementação da arquitetura de big data traz muitos desafios. As informações dependem de dados estáticos armazenados centralmente. Para o armazenamento de dados, o ecossistema Apache Hadoop disponibiliza opções Arquiteturas de hardware/software de big data 16 como as soluções HBase e Hive, além de outras soluções de fora do ecossistema Hadoop, que também se conectam a essa plataforma. A seguir, vamos detalhar um pouco mais sobre as três principais. Cassandra: banco de dados NoSQL baseado no Bigtable da Google, no modelo orientado a colunas (ou família de colunas). Foi criado originalmente pela equipe de desenvolvedores do Facebook, posteriormente passou a ser open-source e mantido pela fundação Apache (LEITE; BONOMO, 2016). HBase: banco de dados orientado a colunas baseado no Bigtable. Foi criado especificamente para o ecossistema Hadoop e é otimizado para trabalhar com a tarefa MapReduce em seu contexto (BRAHIM; CAMPOS, 2019). Hive: software de data warehouse dentro do ecossistema Hadoop. Ele não é um banco de dados propriamente dito, mas uma central de armazenamento de dados capaz de lidar com milhares de requisições ao mesmo tempo, além de oferecer uma interface de consulta de dados semelhante ao que se tem em bancos de dados relacionais, inclusive com sua versão da linguagem SQL, chamada de HiveQL (SHARDA; DELEN; TURBAN, 2019). Podemos concluir que o uso do ecossistema Hadoop é de fundamental importância para projetos maiores e mais complexos, visto que o ecossistema criado pela fundação Apache não apresenta apenas uma ferramenta, mas um conjunto delas, em que é possível criar um ambiente propício para lidar com grandes volumes de dados. Finalizando, podemos dizer que big data é um assunto amplo e em rápida evolução. Embora não seja adequado para todos os tipos de computação, muitas organizações estão recorrendo a big data para certos tipos de cargas de trabalho e utilizando isso para complementar as suas ferramentas de análises e relatórios aprofundados de negócios. Os sistemas de big data são adequados de maneira única à superfície de padrões difíceis de detectar e à percepção de comportamentos impossíveis de serem encontrados por meios convencionais. Ao implementar corretamente sistemas que lidam com big data, as organizações podem obter um valor incrível a partir dos dados que já estão disponíveis. 17 Arquiteturas de hardware/software de big data BORTHAKUR, D. HDFS architecture guide. c2008. Disponível em: https://hadoop.apache. org/docs/r1.2.1/hdfs_design.pdf. Acesso em: 15 mar. 2020. BRAHIM, P. L. G.; CAMPOS, V. V. S. Soluções de modelagem de dados para Big Data Warehouse utilizando o Apache Hive e o software Pentaho. 2019. Trabalho de Conclusão de Curso (Bacharelado em Ciência da Computação) — Universidade Estadual de Londrina, Londrina, Pr, 2019. Disponível em: http://www.uel.br/cce/dc/wp-content/uploads/ ProjetoTCC- Pedro_Luiz_Garbim_Brahim.pdf. Acesso em: 15 mar. 2020. CASTRO, M. O. et al. Avaliação dos Brokers Kafka e Apache Flume no contexto de Big Data. In: ENCONTRO ANUAL DE TECNOLOGIA DA INFORMAÇÃO, 7., 2016, Frederico Westphalen; SIMPÓSIO DE TECNOLOGIA DA INFORMAÇÃO DA REGIÃO NOROESTE DO RS, 7., 2016, Frederico Westphalen. Anais [...]. Frederico Westphalen, RS: IFFar/ UFSM, 2016. Disponível em: http://eati.info/eati/2016/assets/anais/anais.pdf. Acesso em: 15 mar. 2020. CURSOS de Apache Drill Query Optimization. Disponível em: https://www.nobleprog. com.br/cc/apachedrillqueryoptim?participants=1&how=public. Acesso em: 15 mar. 2020. GOLDMAN, A. et al. Apache Hadoop: conceitos teóricos e práticos, evolução e novas possibilidades. In: CONGRESSO DA SOCIEDADEBRASILEIRA DE COMPUTAÇÃO, 32., Curitiba. Anais [...]. Curitiba, PR: UFPR, 2012. Disponível em: http://www2.sbc.org.br/ csbc2012/anais_csbc/eventos/jai/artigos/JAI%20- %20Cap%203%20Apache%20Hadoop%20conceitos%20teoricos%20e%20praticos,%20ev olucao%20e%20novas%20 possibilidades.pdf. Acesso em: 15 mar. 2020. LEITE, H. P.; BONOMO, I. S. Análise comparativa de projeto e administração de banco de dados entre os SGBDs Cassandra e MySQL. 2016. 61 p. Trabalho de Conclusão de Curso (Bacharelado em Ciência da Computação) — Universidade de Brasília, Brasília, DF, 2016. Disponível em: http://www.bdm.unb.br/bitstream/10483/15681/1/2016_HermanoPortellaLeite_IgorDa SilvaBonomo_tcc.pdf. Acesso em: 15 mar. 2020. MORAIS, I. S. et al. Introdução a Big Data e Internet das Coisas (IoT). Porto Alegre: SAGAH, 2018. RAMAKRISHNAN, R.; GEHRKE, J. Sistemas de gerenciamento de banco de dados. 3. ed. Porto Alegre: AMGH, 2011. RAYTHZ, N. Python vs R. 2018. Disponível em: https://imasters.com.br/data/python-vs-r. Acesso em: 15 mar. 2020. SHARDA, R.; DELEN, D.; TURBAN, E. Business intelligence e análise de dados para gestão do negócio. 4. ed. Porto Alegre: Bookman, 2019. TANENBAUM, A. S.; BOS, H. Sistemas operacionais modernos. 4. ed. São Paulo: Pearson Education do Brasil, 2016. Arquiteturas de hardware/software de big data 18 USE o Apache Spark MLlib para criar um aplicativo de aprendizado de máquina e analisar um conjunto de dados. 2019. Disponível em: https://docs.microsoft.com/ pt- br/azure/hdinsight/spark/apache-spark-machine-learning-mllib-ipython. Acesso em: 15 mar. 2020. West, J., Dean, T., & Andrews, J. (2019). Network+ guide to networks. 8ª edição. Cengage Learning. Os links para sites da web fornecidos neste capítulo foram todos testados, e seu funcionamento foi comprovado no momento da publicação do material. No entanto, a rede é extremamente dinâmica; suas páginas estão constantemente mudando de local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade sobre qualidade, precisão ou integralidade das informações referidas em tais links. Introdução 1 Arquitetura de hardware em big data Computação em cluster 2 Arquitetura de software para big data 3 Utilizando o ambiente de big data Ecossistema Hadoop Utilizando HDFS Outras componentes relacionados ao ecossistema do Hadoop Armazenando dados no ecossistema Hadoop