·

Cursos Gerais ·

Outros

Send your question to AI and receive an answer instantly

Ask Question

Preview text

Frameworks Para Big Data Prezado estudante Estamos começando uma unidade desta disciplina Os textos que a compõem foram organizados com cuidado e atenção para que você tenha contato com um conteúdo completo e atualizado tanto quanto possível Leia com dedicação realize as atividades e tire suas dúvidas com os tutores Dessa forma você com certeza alcançará os objetivos propostos para essa disciplina Objetivo Geral Estudar sobre os principais frameworks para Big Data unidade 2 Parte 1 Introdução a Hadoop O conteúdo deste livro é disponibilizado por SAGAH unidade 2 62 TÓPICOS ESPECIAIS EM ADS Introdução ao Hadoop Objetivos de aprendizagem Ao final deste texto você deve apresentar os seguintes aprendizados Descrever o Hadoop e sua utilização Resumir as características do Hadoop Analisar o Map Reduce Introdução As pessoas ao redor do mundo geram diariamente grandes volumes de dados alguns estruturados e outros não Esses dados são uma va liosa fonte de informações mas analisálos eficientemente ainda é um desafio pois os mecanismos tradicionais de gerenciamento de dados não disponibilizam o suporte adequado para a realização dessa tarefa O Apache Hadoop é um framework para o armazenamento e proces samento de Big Data Ele possui ferramentas para armazenar e recuperar grandes volumes de dados distribuídos e para realizar o processamento distribuído garantindo escalabilidade e disponibilidade e possibilitando a ex tração de conhecimento útil a partir de análises e cruzamentos desses dados Grandes corporações já utilizam o Hadoop e o consideram uma fer ramenta eficaz e que traz bons resultados Portanto é um recurso que precisa ser conhecido pelos profissionais da área de computação Neste capítulo você vai conhecer os fundamentos do Apache Ha doop identificando seus componentes características vantagens e apli cações Além disso você verá como o MapReduce que é responsável pelo processamento distribuído é utilizado com o Hadoop Hadoop Armazenar manipular e analisar dados são tarefas convencionais para siste mas computacionais mas tomam outra dimensão quando o volume de dados alcança a dimensão de petabytes diários Esses dados são gerados por sistemas C16IntroducaoHadoopindd 1 10012019 103917 Frameworks para Big Data UNIDADE 2 Introdução a Hadoop PARTE 1 63 corporativos serviços sistemas web mídias sociais comércio eletrônico etc Todos são potencialmente valiosos e há muito interesse em extrações de informações que podem ser obtidas a partir de análises e cruzamentos desses dados Boa parte deles não está armazenada de forma estruturada e têm os mais diversos formatos e estruturas que muitas vezes não são compatíveis O alto valor agregado da empresa Google não se deve apenas ao seu potente algoritmo de busca na web ou a suas inúmeras ferramentas mas também à enorme quantidade de informações que mantém sobre seus usuários e buscas realizadas na web A análise desses dados permite identificar padrões de comportamentos e correlações entre perfis de usuários e isso é extremamente útil Portanto essas informações não são valiosas apenas para a Google já que também podem ser comercializadas O termo Big Data não se refere apenas ao volume de dados mas também à sua diversidade de formatos estruturados ou não à variedade de fontes e à velocidade para processálo Já as aplicações Big Data são soluções compu tacionais que possibilitam a análise de grandes bases de dados processando algoritmos que permitam identificar correlações entre os dados para mapear padrões e comportamentos conhecidos ou inéditos A partir disso tornase possível criar estratégias ou disponibilizar produtos e serviços Essas aplicações têm seu poder de processamento limitado pelo poder compu tacional das máquinas atuais pois podem utilizar horas ou muitos dias para obter os resultados desejados Mesmo a evolução contínua dos recursos computacionais é insuficiente para atender ao crescimento da complexidade desse tipo de aplicação Como alternativa ao processamento convencional temse a computação paralela e distribuída que pode ser realizada por meio de clusters grades de computadores a um custo relativamente baixo A ideia básica é dividir cada tarefa em subtarefas que serão executadas paralelamente em diversos computa dores Porém essa tarefa não é trivial pois exige o adequado dimensionamento das subtarefas além de ser necessário tratar questões como o balanceamento de carga e escalonamento das tarefas visando maximizar a utilização dos recursos computacionais e garantindo alternativas de recuperação em situações de falha de computadores que estão alocados para realizar o processamento Para atender a esse tipo de demanda é que foi projetado o Apache Hadoop um framework que promove um processamento muito mais rápido que outras Introdução ao Hadoop 2 C16IntroducaoHadoopindd 2 10012019 103917 64 TÓPICOS ESPECIAIS EM ADS tecnologias e que simplifica o trabalho com sistemas distribuídos tornando transparentes diversas funções tais como a disponibilidade dos nós do cluster escalabilidade da aplicação integridade dos dados e recuperação em caso de falhas Além disso ele possui um sistema de licenciamento flexível que torna possíveis modificações e redistribuição do programafonte Isso permitiu o surgimento de inúmeras implementações derivadas dele com novas funcionalidades ou que se especializam em algum nicho de mercado além de agregar serviços aos que desejam utilizar seus recursos Amazon Web Service Cloudera Hortonworks KarmaSphere Pentaho e Tresada são exemplos de empresas que customizaram o Apache Hadoop e oferecem serviços de implantação suporte e treinamento Quando se precisa de alto desempenho em processamento de grande volume de dados o Apache Hadoop é indicado como uma das melhores ferramentas Veja a seguir alguns benefícios que a sua utilização apresenta Código aberto o projeto Apache Hadoop possui uma comunidade composta por desenvolvedores independentes e empresas engajadas no desenvolvimento de suas funcionalidades melhorias contínuas além de cuidarem de sua documentação É uma comunidade ágil que rapidamente resolve falhas que são encontradas e que disponibiliza continuamente novos recursos Baixo custo ao optar pela utilização do Hadoop você já economiza por não ser necessário adquirir licenças software livre Além disso pela sua forma de processamento é possível utilizar computadores e redes convencionais para realizar o processamento dos dados não sendo necessário fazer investimento em hardwares específicos Por fim temse a possibilidade de alugar os serviços em nuvem como a Amazon Elastic MapReduce EMR em que se pode alugar um conjunto de máquinas virtuais ou pagar pelo tempo de processamento Robustez o Hadoop oferece estratégias automáticas para garantir o pro cessamento em caso de falhas em computadores alocados para o proces samento garantindo sua continuidade Para isso ele realiza replicação de dados armazenamento de metadados e de informações de processamento 3 Introdução ao Hadoop C16IntroducaoHadoopindd 3 10012019 103917 Frameworks para Big Data UNIDADE 2 Introdução a Hadoop PARTE 1 65 Escalabilidade para o Hadoop é relativamente simples aumentar a quantidade de máquinas a serem utilizadas no processamento Isso é feito com pequenas alterações em um arquivo de configuração e não exige a reescrita do códigofonte Os ajustes ficam limitados ao espaço em disco e à capacidade de processamento dos computadores alocados Simplicidade ao usar o Hadoop as operações são especificadas por funções de mapeamento Map e de junção Reduce Assim é possível manter o foco na abstração do problema e sua resolução pelo modelo de programação MapReduce Dessa forma não é necessário se preocupar com a computação paralela balanceamento de carga tolerância a falhas e escalonamento Um software que possui código aberto deve garantir quatro liberdades aos seus usuários liberdade de execução o programa pode ser executado com qualquer propósito liberdade de análise o programa pode ser livremente estudado para que seja entendido o seu funcionamento e projetadas adaptações liberdade de redistribuição o programa pode ser copiado e redistribuído tanto em sua versão original quanto na adaptada liberdade de modificação o programa pode ser modificado e as modificações podem ser distribuídas de modo que toda a comunidade tenha acesso e possa se beneficiar O Apache Hadoop é um framework que ainda está amadurecendo e está em constante evolução de modo que ainda existem características que podem ser melhoradas Uma fragilidade dele é o uso de um único nó mestre pois essa cen tralidade pode limitar a escalabilidade ou tornarse crítica em caso de falha Outra questão frágil é a dificuldade em gerenciar os dados resultantes do processamento paralelo pois sua depuração é morosa e complexa em algumas situações Há situações em que o Hadoop não é a alternativa adequada como as apresentadasa seguir Problemas não paralelizáveis ou com grande dependência entre os dados para que se possa obter um bom resultado com o Hadoop deve ser possível distribuir os dados e paralelizar seu processamento mas há situações em que isso não é possível Processamento de arquivos pequenos o Hadoop foi desenvolvimento para trabalhar com grandes volumes de dados e o processamento adicional que realiza é pequeno nessas situações Porém se os dados Introdução ao Hadoop 4 C16IntroducaoHadoopindd 4 10012019 103917 66 TÓPICOS ESPECIAIS EM ADS são poucos o custo adicionado pela divisão e junção de tarefas comu nicação rotinas e processamento pode ser proporcionalmente grande Problemas com muito processamento em poucos dados o foco do Hadoop é trabalhar com simplicidade de modo que o ideal é trabalhar com funções que possam ter sua complexidade reduzida e subtarefas cada vez mais simples Porém isso nem sempre é possível então pro blemas que possuam regras complexas eou com fluxo de execução extenso não são adequados ao uso do Hadoop Componentes do Hadoop O trabalho do Hadoop utiliza cinco processos NameNode DataNode Seconda ryNameNode JobTracker e TaskTracker NameNode DataNode SecondaryNa meNode são integrantes do modelo de programação MapReduce Já JobTracker e TaskTracker fazem parte do sistema de arquivo HDFS Os componentes Name Node JobTracker e SecondaryNameNode são únicos para toda a aplicação por outro lado DataNode e JobTracker são instanciados para cada computador alocado NameNode localizase no nó mestre juntamente ao JobTracker e é responsável pelo gerenciamento dos arquivos utilizados pelo HDFS Hadoop Distributed File System Ele mantém seus dados em memória por questões de performance pois frequentemente precisa mapear a localização de arquivos dividilos em blocos encaminhandoos aos nós escravos além de gerenciar os metadados e réplicas dos arquivos DataNode localizase nos nós são os dados que são distribuídos e replicados Cada DataNode reportase ao NameNode indicando quais blocos guarda e as atualizações realizadas neles JobTracker controla o plano de execução das tarefas do MapReduce designa quais nós serão utilizados no processamento e os monitora TaskTracker executa uma tarefa Map ou uma tarefa Reduce que lhe for designada Cada TaskTracker executa em uma máquina virtual e podese ter várias máquinas virtuais em um único computador físico utilizando melhor os seus recursos SecondaryNameNode auxilia o NameNode e é a alternativa para recuperação em caso de falha Ele verifica os pontos de checagem checkpointing para garantir a sua recuperação 5 Introdução ao Hadoop C16IntroducaoHadoopindd 5 10012019 103917 Frameworks para Big Data UNIDADE 2 Introdução a Hadoop PARTE 1 67 Na Figura 1 você pode ver os processos da arquitetura Hadoop e suas ligações O primeiro é a aplicação que contém o NameNode o JobTracker e possivelmente o SecondaryNameNode Já o segundo representa cada ins tância ou seja cada nó e contém TaskTracker e um DataNode vinculados respectivamente ao JobTracker e ao NameNode do nó mestre A aplicação se conecta ao nó mestre e inicia a sua execução A partir disso o JobTracker gera o plano de execução e determina a quantidade e quais nós escravos processarão os dados Em paralelo o NameNode armazena e gerencia as informações dos arquivos Nos nós escravos o TaskTracker executa as tarefas a ele atribuídas Map ou Reduce e o DataNode gerencia os blocos de arquivos Eles também se comunicam com o nó mestre Em paralelo o SecondaryNameNode registra checkpoints do log do NameNode Figura 1 Componentes do Hadoop Fonte Adaptada de Dean e Ghemawat 2004 Execução do Hadoop O Hadoop foi construído para trabalhar com um conjunto de máquinas mas permite outras formas de execução modo local standalone mode modo pseudodistribuído pseudodistributed mode e modo completamente distribu ído fully distributed mode A especifi cação do modo de execução é defi nida na confi guração dos arquivos coresitexml hdfssitexml e mapredsitexml Introdução ao Hadoop 6 C16IntroducaoHadoopindd 6 10012019 103918 68 TÓPICOS ESPECIAIS EM ADS Modo local é o modo padrão assim os parâmetros dos arquivos de configuração já estarão prontos É recomendado utilizar esse modo nas fases iniciais do desenvolvimento quando se tem mais erros e são necessários muitos testes Nesse modo todo o processamento da aplicação é executado apenas na máquina local Modo pseudodistribuído nesse modo a aplicação é processada em modo local que será um cluster de uma máquina só Esse modo permite a sua simulação pois utiliza todos os processos de uma execução pa ralela efetiva Figuras 2 e 3 Além dessas configurações é necessário indicar a localização do SecondaryNameNode e dos nós escravos Essa localização é dada pelo endereço de rede ou pelo apelido desses recursos nos respectivos arquivos masters e slaves No modo pseudodistribuído é simulada uma execução distribuída dessa forma para esse modo esses locais serão sempre os mesmos Figura 2 Configuração do arquivo coresitexml no modo pseudodistribuído Figura 3 Configuração do arquivo hdfssitexml no modo pseudodistribuído 7 Introdução ao Hadoop C16IntroducaoHadoopindd 7 10012019 103918 Frameworks para Big Data UNIDADE 2 Introdução a Hadoop PARTE 1 69 Modo completamente distribuído utiliza um cluster de computador real Nessa opção é necessário definir os parâmetros específicos e a localização do SecondaryNameNode e dos nós escravos Também é necessário indicar quais máquinas irão efetivamente executar cada componente indicando o seu endereço IP HDFS O Hadoop Distributed File System é o sistema de arquivos distribuídos do Ha doop que possui um conjunto de funções como armazenamento organização nomeação recuperação compartilhamento proteção e permissão de acesso aos arquivos Além de prover funções tradicionais de gerenciamento de arquivos precisa prover a distribuição dos dados de forma transparente garantindo efi ci ência e escalabilidade Tudo isso deve ser transparente e não exigir conhecimento adicional para operálo Um sistema de arquivos distribuído deve garantir Segurança garantir o acesso às informações cuidando do controle de privacidade e gerenciando as permissões de acesso Tolerância a falhas garantir a disponibilidade do sistema em casos de falhas Integridade controlar as modificações realizadas conforme permissões Consistência garantir que o dado visto seja o mesmo para todos Desempenho o desempenho do sistema de arquivos distribuído deve ser alto Existem muitas implementações de sistemas de arquivos distribuídos algumas co merciais e outras de software livre tais como GNU Cluster File System GlusterFS da empresa Red Hat Moose File System MooseFS desenvolvido pela Gemius SA Lustre originário da Carnegie Mellon University atualmente é mantido pela Sun Microsystems CODA também desenvolvido na Carnegie Mellon University General Parallel File System GPFS e OpenAFS da IBM esse último derivado do Andrew File System AFS que também foi desenvolvido na Carnegie Mellon University e os mais conhecidos Network File System NFS e Google File System GFS Introdução ao Hadoop 8 C16IntroducaoHadoopindd 8 10012019 103918 70 TÓPICOS ESPECIAIS EM ADS O HDFS é integrado ao framework do Hadoop teve forte inspiração no GFS da Google mas se diferencia por ser de código aberto e implementado na linguagem Java O HDFS também oferece suporte ao armazenamento e ao processamento de grandes volumes de dados em agrupamentos de computadores heterogêneos O número de máquinas utilizadas em um HDFS é uma grandeza diretamente proporcional à probabilidade de uma dessas máquinas vir a falhar ou seja quanto mais máquinas maior a chance de acontecer algum erro em uma delas Comandos HDFS Para iniciar os trabalhos em um aglomerado Hadoop é necessário formatar o HDFS no intuito de preparálo para receber os dados de sua aplicação Essa ação pode ser realizada por meio do comando hadoop namenode format executado na máquina em que se encontra o NameNode Embora possa ser manipulada por diversas interfaces uma das formas comumente utilizada para manipular o HDFS é por linha de comando Nessa interface é possível realizar várias operações como leitura escrita exclusão listagem criação de diretório etc com comandos similares aos do Linux mas iniciados pelo prefi xo hadoop fs A sintaxe dos comandos segue a seguinte estrutura hadoop fs comando argumentos A listagem a explicação e os argumentos válidos para todos os comandos do HDFS podem ser consultados executando o seguinte comando hadoop fs help Antes de iniciar uma aplicação Hadoop no modo pseudodistribuído ou completamente distribuído é necessário que os dados que serão utilizados já estejam armazenados no HDFS Dessa forma o usuário precisa copiar os arquivos de dados da sua máquina local para o HDFS No exemplo a seguir está explicitado o comando para carregar no HDFS o arquivo meuarquivotxt hadoop fs put meuarquivotxt userhadoopuser Nesse exemplo foi utilizado o comando put e informados como parâmetros o nome do arquivo e o diretório userhadoopuser para o qual ele será adicionado Por padrão o HDFS possui um diretório com o nome do usuário dentro do diretório user Nesse exemplo o usuário é o hadoopuser Se o usuário desejar criar outros diretórios o comando que realiza essa ação é o mkdir conforme exemplo a seguir em que será criado o diretório arquivoshadoop hadoop fs mkdir arquivoshadoop 9 Introdução ao Hadoop C16IntroducaoHadoopindd 9 10012019 103918 Frameworks para Big Data UNIDADE 2 Introdução a Hadoop PARTE 1 71 Nesse caso não foi mencionado o caminho completo do local no qual o diretório deverá ser criado assim quando essa informação for omitida o arquivo será armazenado no diretório padrão userhadoopuser Portanto o caminho completo para acesso dos arquivos inseridos no diretório arqui voshadoop será userhadoopuserarquivoshadoop Para listar todos os arquivos e diretórios contidos no diretório raiz que no caso é userhadoopuser executamos o seguinte comando hadoop fs ls Para listar arquivos diretórios e os subdiretórios devese acrescentar o comando de recursividade como no exemplo a seguir hadoop fs lsr A partir do momento em que os arquivos estão armazenados no HDFS já são passíveis de serem submetidos ao processamento de uma aplicação Hadoop Se após a execução for necessário copiar novamente os arquivos ao sistema local isso poderá ser feito pelo comando get conforme o seguinte exemplo hadoop fs get meuarquivotxt localfile Nesse exemplo após o comando como primeiro argumento deve ser passado o nome do arquivo que se deseja copiar do HDFS com o seu respectivo caminho O segundo parâmetro é o diretório local no qual se deseja colocar o arquivo copiado Como é possível ver a interface de linha de comando pode ser utilizada sem muita dificuldade principalmente para os conhecedores de Linux Entre tanto caso essa interface não seja adequada o usuário pode optar por outras alternativas providas pelo HDFS podendo até mesmo usar a API Java para realizar essa manipulação Perceba que em nenhum momento falamos de comandos específicos para um sistema de arquivos distribuídos como para tratar tolerância a falhas balanceamento de carga e disponibilidade pois são todas ações tratadas pelo próprio arcabouço Divisão em blocos Grandes arquivos não podem ser armazenados em um único disco e por isso precisam ser divididos e distribuídos em um cluster de computadores Essa questão estrutural relativa à distribuição dos arquivos é feita de forma implícita Introdução ao Hadoop 10 C16IntroducaoHadoopindd 10 10012019 103918 72 TÓPICOS ESPECIAIS EM ADS devendo apenas o desenvolvedor apontar corretamente os parâmetros de con fi guração O HDFS adota a estratégia de que antes de armazenar os arquivos esses sejam submetidos a um procedimento de divisão em uma sequência de blocos de tamanho fi xo O tamanho padrão defi nido no framework é 64 Mb mas ele pode ser alterado Somente depois de dividido é que esses arquivos são distribuídos para os diversos nós escravos Arquitetura O HDFS possui uma arquitetura mestreescravo no lado mestre tem uma ins tância do NameNode e em cada escravo uma instância do DataNode É possível ter centenas ou milhares de máquinas escravas O NameNode é o componente central do HDFS assim é recomendável ser implantado em um nó exclusivo e preferencialmente o nó com melhor desempenho Para desempenhar seu papel de gerenciar todos os blocos de arquivos o NameNode possui duas estruturas de dados importantes o FsImage e o EditLog O primeiro arquivo é o respon sável por armazenar informações estruturais dos blocos como o mapeamento e namespaces dos diretórios e arquivos e a localização das réplicas desses arquivos O segundo EditLog é um arquivo de log responsável por armazenar todas as alterações ocorridas nos metadados dos arquivos Ao iniciar uma instância do NameNode suas tarefas iniciais são realizar a leitura do último FsImage e aplicar as alterações contidas no EditLog Ter minada essa operação o estado do HDFS é atualizado e o arquivo de log é esvaziado para manter apenas as novas alterações Esse procedimento ocorre somente quando o NameNode é iniciado e por tal motivo passado muito tempo de sua execução o EditLog tende a ficar muito extenso e pode afetar o desempenho do sistema ou ainda acarretar muitas operações na próxima inicialização do NameNode Para que isso não ocorra existe um componente assistente ao NameNode chamado SecondaryNameNode Mesmo não sendo exatamente um backup do NameNode no caso de que esse venha a ser interrompido uma solução é tornar o SecondaryNameNode o NameNode primário como uma forma de prevenção de interrupção do sistema O SecondaryNameNode tem como principal função realizar a junção entre o FsImage e EditLog criando pontos de checagem de modo a limpar o arquivo de log Essa operação é feita em intervalos de tempo definidos na configuração do sistema Dessa forma como o SecondaryNameNode não é atualizado em tempo real esse atraso poderia ocasionar a perda de dados Enquanto o nó mestre é o responsável por armazenar os metadados dos arquivos os nós escravos são os responsáveis pelo armazenamento físico dos 11 Introdução ao Hadoop C16IntroducaoHadoopindd 11 10012019 103918 Frameworks para Big Data UNIDADE 2 Introdução a Hadoop PARTE 1 73 dados São nesses escravos que temos os DataNodes Em uma aplicação Hadoop cada nó escravo contém um DataNode que trabalha com um TaskTracker o primeiro é para armazenamento e o segundo para processamento dos dados A primeira comunicação entre o mestre e o escravo ocorre quando o Da taNode é registrado no NameNode que pode ocorrer no momento da inicia lização ou quando esse for reinicializado Todo esse procedimento de registro é armazenado no arquivo FsImage do NameNode Após essa interação o DataNode precisa ainda periodicamente comunicarse com o NameNode enviando informações estatísticas dos blocos que está armazenando bem como informações de suas alterações locais São nesses momentos de interação que se torna possível ao NameNode definir quais nós deverão armazenar quais blocos Se o NameNode não conseguir receber informações do DataNode é solicitado que esse DataNode seja novamente registrado Replicação de dados Além de dividir os arquivos em blocos o HDFS ainda replica esses blocos na tentativa de aumentar a segurança Por padrão um bloco do HDFS possui três réplicas alocadas em diferentes nós e essa quantidade pode ser confi gurada Ainda existe uma recomendação por questão de confi abilidade e desempenho de alocar duas réplicas no mesmo armário mas em nós distintos e a outra réplica em um armário diferente Como tipicamente a velocidade de comunicação entre máquinas de um mesmo rack é maior que em racks diferentes por questão de desempenho no momento de selecionar uma réplica para ser substituída em um processo o HDFS dá preferência à réplica pertencente ao mesmo rack O maior benefício com a replicação é a obtenção de maior tolerância a falhas e confi abilidade dos dados pois no caso de um nó escravo vir a falhar o processamento passará a ser feito por outra máquina que contenha a réplica desse bloco sem haver a necessidade de transferência de dados e a interrupção da exe cução da aplicação Tudo isso é feito de forma transparente pois o Hadoop oferece mecanismos para reiniciar o processamento sem que os demais nós percebam a falha ocorrida No contexto de uma falha ocorrerá uma diminuição da quantidade de réplicas de um bloco Então para retomar Introdução ao Hadoop 12 C16IntroducaoHadoopindd 12 10012019 103918 74 TÓPICOS ESPECIAIS EM ADS a sua margem de confi abilidade o NameNode consulta os metadados sobre os DataNodes falhos e reinicia o processo de replicação em outros DataNodes para garantir o seu fator mínimo Hadoop MapReduce O paradigma de programação MapReduce implementado pelo Hadoop se inspira em duas funções simples Map e Reduce presentes em diversas linguagens de programação funcionais Uma das primeiras linguagens a implementar os con ceitos dessas funções foi LISP Essas funções podem ser facilmente explicadas de acordo com suas implementações originais conforme mostram os exemplos a seguir em que serão usados pseudocódigos para ilustrar tais funções A função Map recebe uma lista como entrada e aplicando uma função dada gera uma nova lista como saída Um exemplo simples é aplicar um fator multiplicador a uma lista por exemplo dobrando o valor de cada elemento map1234 x2 2468 Nesse exemplo para a lista de entrada 1234 foi aplicado o fator mul tiplicador 2 gerando a lista 2468 Veja que a função é aplicada a todos os elementos da lista de entrada Logo cada iteração na lista de entrada vai gerar um elemento da lista de saída A função de mapeamento no exemplo dado poderia chamarse dobro A chamada com a função dobro pode ser expressa como map1234 dobro 2468 A função Reduce similarmente à função Map vai receber como entrada uma lista e em geral aplicará uma função para que a entrada seja reduzida a um único valor na saída Algumas funções do tipo Reduce mais comuns seriam mínimo máximo e média Aplicando essas funções ao exemplo temos as seguintes saídas reduce2468 mínimo 2 reduce2468 máximo 8 reduce2468 média 5 13 Introdução ao Hadoop C16IntroducaoHadoopindd 13 10012019 103918 Frameworks para Big Data UNIDADE 2 Introdução a Hadoop PARTE 1 75 No paradigma MapReduce as funções Map e Reduce são utilizadas em con junto e normalmente as saídas produzidas pela execução das funções Map são utilizadas como entrada para as funções Reduce Associando as funções dos exem plos apresentados podese expressar o seguinte conjunto de funções aninhadas reducemap1234 dobro mínimo 2 reducemap1234 dobro máximo 8 reducemap1234 dobro média 5 Google MapReduce O paradigma de programação MapReduce demonstrou ser adequado para trabalhar com problemas que podem ser particionados ou fragmentados em subproblemas Isso porque se pode aplicar separadamente as funções Map e Reduce a um conjunto de dados Se os dados forem sufi cientemente grandes podem ainda ser particionados para a execução de diversas funções Map ao mesmo tempo em paralelo Essas características despertaram a atenção ao paradigma que entrou em evidência novamente quando foi implementado pela Google utilizando os conceitos de programação paralela e distribuída As funções Map e Reduce deixaram de ser restritas ao paradigma de programação funcional sendo disponibilizadas em bibliotecas Java C e Python O MapReduce foi introduzido na computação paralela e distribuída Isso foi feito pela explícita retroalimentação dos resultados da função Map como entrada para a função Reduce conforme os exemplos anteriores A abordagem permite que os dados distribuídos ao longo dos nós de um aglomerado sejam utilizados nas funções Map e Reduce quando necessário No Google MapReduce Figura 4 é aplicada uma função Map em um conjunto de valores e utilizada a sua saída para aplicar a função Reduce gerando a saída final Essa abordagem adota o princípio de abstrair toda a complexidade da paralelização por meio das funções Map e Reduce A ideia simples dessas funções é eficaz para a resolução de problemas para programação paralela uma vez que tanto Map quanto Reduce são funções sem estado associado e portanto facilmente paralelizáveis Introdução ao Hadoop 14 C16IntroducaoHadoopindd 14 10012019 103919 76 TÓPICOS ESPECIAIS EM ADS Figura 4 Modelo MapReduce implementado pela Google Fonte Adaptada de Dean e Ghemawat 2004 O Hadoop MapReduce pode ser visto como um paradigma de programação que expressa computação distribuída como uma sequência de operações distri buídas em conjuntos de dados Para tal a base de uma aplicação MapReduce consiste em dividir e processar esses dados com o uso das funções Map e Reduce As funções Map utilizam os blocos dos arquivos armazenados com entrada Os blocos podem ser processados em paralelo em diversas máquinas do aglomerado Como saída as funções Map produzem normalmente pares chavevalor As funções Reduce são responsáveis por fornecer o resultado final da execução de uma aplicação juntando os resultados produzidos por funções Map Essa composição denota claramente como o Apache Hadoop tomou proveito das melhores características do Google MapReduce Quando aplicado ao ambiente distribuído como em um cluster de com putadores o Hadoop MapReduce executa um conjunto de funções Map e Reduce definidas pelo usuário Essas funções são denominadas tarefa pelo Hadoop A computação é distribuída e controlada pelo arcabouço que utiliza o seu sistema de arquivos HDFS e os protocolos de comunicação e troca de mensagens para executar uma aplicação MapReduce O processamento tem três fases uma fase inicial de mapeamento em que são executadas diversas tarefas Map uma fase intermediária na qual os dados são recolhidos das 15 Introdução ao Hadoop C16IntroducaoHadoopindd 15 10012019 103919 Frameworks para Big Data UNIDADE 2 Introdução a Hadoop PARTE 1 77 funções Map agrupados e disponibilizados para as tarefas de Reduce e uma fase de redução em que são executadas diversas tarefas Reduce para agrupar os valores comuns e gerar a saída da aplicação Os dados utilizados na fase de mapeamento em geral devem estar armaze nados no HDFS Dessa forma os arquivos contendo os dados serão divididos em um número de blocos e armazenados no sistema de arquivos Cada um desses blocos é atribuído a uma tarefa Map A distribuição das tarefas Map é feita por um escalonador que escolhe quais máquinas executarão as tarefas Isso permite que o Hadoop consiga utilizar praticamente todos os nós do aglo merado para realizar o processamento Ao criar uma função Map o usuário deve declarar quais dados contidos nas entradas serão utilizados como chaves e valores Ao ser executada cada tarefa Map processa pares de chavevalor Após o processamento a tarefa produz um conjunto intermediário de pares chavevalor De maneira mais genérica para cada par de chavevalor k1 v1 a tarefa Map invoca um processamento definido pelo usuário que transforma a entrada em um par chavevalor diferente k2 v2 Após a execução das tarefas Map os conjuntos que possuem a mesma chave poderão ser agrupados em uma lista A geração dessa lista ocorre com a execução de uma função de combinação opcional que agrupa os elementos para que a fase intermediária seja realizada de maneira mais eficiente De maneira genérica temos mapk1v1 listk2v2 I Após o término das execuções das tarefas de Map o arcabouço executa uma fase intermediária denominada Shuffle que agrupa os dados intermediários pela chave e produz um conjunto de tuplas k2 listv2 Assim todos os valores associados a uma determinada chave serão agrupados em uma lista Após essa fase intermediária o arcabouço também se encarrega de dividir e replicar os conjuntos de tuplas para as tarefas Reduce que serão executadas A fase de Shuffle é a que mais realiza troca de dados ES pois os dados de diversos nós são transferidos entre si para a realização das tarefas de Reduce Na fase de redução cada tarefa consome o conjunto de tuplas k2 listav2 atribuído a ele Para cada tupla uma função definida pelo usuário é chamada e transformada em uma saída formada por uma lista de pares chavevalor k3 v3 Novamente o arcabouço se encarrega de distribuir as tarefas e fragmentos pelos nós do aglomerado Esse conjunto de ações também pode ser expresso da seguinte forma reducek2listv2 listk3v3 II Introdução ao Hadoop 16 C16IntroducaoHadoopindd 16 10012019 103919 78 TÓPICOS ESPECIAIS EM ADS DEAN J GHEMAWAT S MapReduce Simplified Data Processing on Large Clusters OSDI 2004 Disponível em httpsstaticgoogleusercontentcommediaresearchgoogle comptBRarchivemapreduceosdi04pdf Acesso em 22 dez 2018 Leituras recomendadas AMARAL F Introdução à Ciência de Dados mineração de dados e big data Rio de Janeiro Alta Books 2016 HEKIMA O Guia Definitivo de Big Data para Iniciantes 2017 Disponível em http wwwmettodocombrebooksOguiadefinitivodeBigDataparainiciantes pdf Acesso em 22 dez 2018 HURWITZ J et al Big Data Para Leigos Rio de Janeiro Alta Books 2015 PRAJAPATI V Big Data Analytics with R and Hadoop Birmingham Packt Publishing 2013 TAURION C Big Data Rio de janeiro Brasport 2013 WHITE T Hadoop The Definitive Guide Sebastopol OReilly 2009 Disponível em httpbarbieutaedujliResourcesMapReduceHadoopHadoop20The20 Definitive20Guidepdf Acesso em 22 dez 2018 17 Introdução ao Hadoop C16IntroducaoHadoopindd 17 10012019 103919 ENCERRA AQUI O TRECHO DO LIVRO DISPONIBILIZADO PELA SAGAH PARA ESTA PARTE DA UNIDADE PREZADO ESTUDANTE Parte 2 Aplicações Simples Utilizando Frameworks de Big Data O conteúdo deste livro é disponibilizado por SAGAH unidade 2 80 TÓPICOS ESPECIAIS EM ADS Aplicações simples utilizando frameworks de big data Objetivos de aprendizagem Ao final deste texto você deve apresentar os seguintes aprendizados Explicar como funciona o MapReduce Aplicar no Hadoop uma aplicação que utiliza MapReduce Executar no Spark uma aplicação que utiliza MapReduce Introdução O termo big data é cada vez mais utilizado tanto por profissionais de TI quanto por empresários alguns buscando especialização em áreas mais avançadas em tecnologia e outros buscando obter vantagens competitivas para suas empresas com a ajuda de profissionais de TI por poderem oferecer possibilidade de diminuição de custos mais informa ção e conhecimento adequado para uma melhor tomada de decisão aumento na lucratividade e possibilidade de crescimento do negócio ou em alguns casos por serem os profissionais que podem garantir a sobrevivência da empresa Nesse contexto o termo é utilizado para representar uma quantidade de dados tão grande a ponto de tornar o seu processamento inviável em métodos tradicionais de processamento de dados o que gerou interesse da comunidade em contribuir com a manutenção e a evolução dos frameworks de big data sendo os principais deles de código livre e com apoio de grandes empresas que acabam por utilizálos no dia a dia dos seus negócios Neste capítulo você vai conhecer aplicações simples utilizando fra meworks de big data por meio de conceitos do MapReduce e de um exemplo de aplicação de contagem de palavras que utiliza o MapReduce tanto no Apache Hadoop quanto no Apache Spark Frameworks para Big Data UNIDADE 2 Aplicações Simples Utilizando Frameworks de Big Data PARTE 2 81 1 Funcionamento do MapReduce Conforme apresentado no artigo da Google por Dean e Ghemawat 2004 o MapReduce é um modelo de programação e implementação associada a esse modelo que permite o processamento e a geração de grandes conjuntos de dados Nele os usuários especifi cam uma função de mapeamento para processar um par chavevalor o que gera um conjunto de pares chavevalor intermediários e uma função de redução para mesclar os valores intermediários associados à mesma chave intermediária Além disso muitas das tarefas do mundo real são expressáveis nesse modelo Segundo a The Apache Software Foundation 2019 o MapReduce é um framework de software para a fácil escrita de aplicações que processam uma vasta quantidade de dados em paralelo com conjuntos que podem chegar a vários terabytes em clusters que podem chegar a milhares de nós compostos por máquinas comuns de maneira confiável e com tolerância a falhas Conforme pode ser observado na Figura 1 no processamento paralelo e distribuído tradicional antes da existência do MapReduce o conjunto de dados era dividido em partes menores ou blocos para que fossem armazena dos em máquinas diferentes Em seguida era realizada a busca de alguma característica em cada parte armazenada por meio do comando grep que permite realizar a busca de palavras em vários arquivos diferentes de forma que cada uma retorna seus próprios resultados nas máquinas correspondentes para que todos sejam concatenados por meio do comando cat que pode ser utilizado para a criação de arquivo concatenação e apre sentação de conteúdo na tela e assim gerar como resultado final o conjunto dos resultados Figura 1 Processamento paralelo e distribuído anterior à existência do MapReduce Fonte Adaptada de Kiran 2020 Big Data Resultados grep grep cat grep grep Resultados Todos os resultados Resultados Resultados Dados divididos Dados divididos Dados divididos Dados divididos Aplicações simples utilizando frameworks de big data 2 82 TÓPICOS ESPECIAIS EM ADS Os principais desafios associados a essa abordagem que precisam ser cuidados individualmente têm relação com problemas em caminhos críticos quando uma das máquinas atrasa a tarefa e gera atraso em todo o processamento problemas de confiabilidade causados pelo desafio de gerenciamento de uma máquina que falha durante a execução de uma tarefa problemas de divisão de tarefas que possam gerar sobrecarga ou subutilização das máquinas problemas de falha de um nó que podem impossibilitar a geração do resultado final bem como desafios de agregação para que os dados possam ser concatenados para gerar o resultado final Com o MapReduce esses desafios são superados tendo em vista que ele per mite computação paralela e distribuída sem a necessidade de cuidar de problemas como confiabilidade tolerância a falhas e demais problemas citados anteriormente o que gera flexibilidade aos desenvolvedores para criarem as aplicações de big data focando apenas na abstração do problema que a aplicação se propõe a resolver sem a preocupação com o paralelismo ou a distribuição dos dados De acordo com a The Apache Software Foundation 2019 no MapReduce um Job divide o conjunto de dados em partes menores independentes que são processadas por tarefas de mapeamento e executadas paralelamente Nessa fase são produzidos pares com chavevalor Em seguida acontece a classificação das saídas das tarefas de mapeamento apresentadas como funções Map que são inseridas nas tarefas de redução descritas como funções Reduce que agregam os pares em um conjunto menor de chavevalor para gerar o resultado final Esse processo pode ser observado na Figura 2 Figura 2 Processamento paralelo e distribuído com o MapReduce Fonte Sharda Delen e Turban 2019 p 453 3 Aplicações simples utilizando frameworks de big data Frameworks para Big Data UNIDADE 2 Aplicações Simples Utilizando Frameworks de Big Data PARTE 2 83 No Hadoop geralmente os dados de entrada e as saídas são armazenados em um sistema de arquivos mesmo que venham a ser reprocessados poste riormente Todavia no Spark os dados podem ser mantidos em memória para os casos de processamento iterativo Em ambos os casos o framework fica responsável pelo agendamento e monitoramento das tarefas bem como pelas novas tentativas de execução das tarefas que falharem Interfaces para utilização do Hadoop MapReduce Como observado na Figura 2 as duas das principais interfaces tipicamente implementadas para utilizar o MapReduce são as interfaces Mapper e Redu cer que disponibilizam os métodos map e reduce Outras interfaces que fazem parte do conjunto das principais interfaces são Counter Job Partitioner InputFormat e OutputFormat Segundo Coulouris et al 2013 a função map é responsável por receber um conjunto de pares chavevalor como entrada e produzir um conjunto de pares chavevalor intermediários como saída No caso de contagem de palavras em um texto com diversas linhas e várias palavras em cada linha é essa função que irá separar cada palavra do texto e irá atribuir um valor para uma delas gerando os pares chavevalor intermediários Em se tratando da classe Reducer os valores intermediários de saída da função map são classificados utilizando o valor da chave de forma que todos os resultados intermediários fiquem ordenados pela chave intermediária e que sejam decompostos em grupos para que sejam passados como entrada para instâncias da classe Reducer Dessa forma a função reduce tem como responsabilidade realizar o processamento dessa entrada para produzir uma lista de valores para cada um dos grupos de forma que fiquem prontos para serem combinados em um índice completo No caso da classe Partitioner esta controla a divisão das chaves da saída do mapeamento intermediário chaves ou seu subconjunto que são uti lizadas para derivar a partição bem como definir para qual tarefa de redução a chave intermediária é enviada para redução O número total de partições é o mesmo de tarefas de redução No entanto no caso da classe Job esta representa o trabalho do MapRe duce Por meio da sua interface o usuário descreve o trabalho do MapReduce que deve ser executado no Hadoop e é com essa classe que normalmente são especificadas as implementações das classes Mapper Reducer Parti tioner InputFormat e OutputFormat Aplicações simples utilizando frameworks de big data 4 84 TÓPICOS ESPECIAIS EM ADS Como o MapReduce opera exclusivamente com pares chavevalor as classes chave e valor precisam ser serializáveis e por consequência implementar a interface Writable Além disso as classes chave precisam implementar a interface WritableComparable para facilitar a sua classificação Conceito do contador de palavras com MapReduce Antes da apresentação de implementação com o MapReduce no Hadoop e no Spark é importante entender o domínio do problema que será abordado Neste caso será um contador que separa cada uma das palavras de um arquivo texto e informa o número de ocorrências para cada uma delas ao longo do arquivo Com isso será possível visualizar o funcionamento do MapReduce por meio de um exemplo que será implementado nos próxi mos tópicos a partir de um arquivo de entrada que contém as seguintes palavras ciência computação dados computação dados nuvem ciência dados dados Como é possível observar na Figura 3 no primeiro passo o arquivo é divido em três partes sendo a primeira ciência computação dados a se gunda computação dados nuvem e a terceira ciência dados dados Nesta fase são formadas as primeiras saídas intermediárias de chavevalor ou C1 V1 No segundo momento é realizado o mapeamento das palavras no qual acontece a separação delas e é atribuído o valor 1 para cada uma formando a segunda saída intermediária de chavevalor ou C2 V2 Em seguida acontece a combinação das palavras adicionando o valor 1 na lista de valores para cada chave Na sequência acontece a redução que soma o valor 1 da lista para gerar a saída final e por consequência o último par chavevalor ou C3 V3 Figura 3 Processamento do exemplo do contador de palavras com o MapReduce Fonte Adaptada de Kiran 2020 5 Aplicações simples utilizando frameworks de big data Frameworks para Big Data UNIDADE 2 Aplicações Simples Utilizando Frameworks de Big Data PARTE 2 85 Com isso os tipos de entradas e saídas de cada etapa de uma tarefa no MapReduce podem ser observados no seguinte esquema C1 V1 mapeamento C2 V2 combinação C2 V2 redução C3 V3 Veja a seguir a implementação do exemplo do contador de palavras uti lizando o Hadoop MapReduce em Java 2 Aplicação com o Hadoop MapReduce De acordo com a The Apache Software Foundation 2019 na documentação do framework Hadoop para que seja possível rodar as aplicações com o Hadoop MapReduce é necessário que o Hadoop esteja instalado confi gurado e rodando seja por meio da confi guração em um único nó normalmente utilizado para questões de aprendizado ou por meio da confi guração para clusters que possibilita trabalhar com clusters grandes e distribuídos Para programar a aplicação do contador de palavras no Hadoop é necessário criar três classes a de mapeamento MeuMap a de redução MeuReduce e a principal ContadorPalavras que contém as duas primeiras além do método main que configura o Job informando as classes MeuMap e Meu Reduce e chama a função de execução da aplicação Para que seja possível utilizar as classes e realizar as chamadas dos métodos de cada uma delas é necessário escrever as devidas importações como no trecho de código a seguir package comsagahexemplohaddop nome do pacote do arquivo no seu projeto import javaioIOException import javautilStringTokenizer import orgapachehadoopioIntWritable import orgapachehadoopioLongWritable import orgapachehadoopioText import orgapachehadoopmapreduceMapper import orgapachehadoopmapreduceReducer import orgapachehadoopconfConfiguration import orgapachehadoopmapreduceJob import orgapachehadoopmapreducelibinputTextInputFormat Aplicações simples utilizando frameworks de big data 6 86 TÓPICOS ESPECIAIS EM ADS import orgapachehadoopmapreduceliboutputTextOutputFormat import orgapachehadoopmapreducelibinputFileInputFormat import orgapachehadoopmapreduceliboutputFileOutputFormat import orgapachehadoopfsPath A primeira é a classe MeuMap que realiza o mapeamento e herda da classe Mapper conforme é possível observar no código da classe a seguir public static class MeuMap extends MapperLongWritableText TextIntWritable public void mapLongWritable chave Text valor Context contexto throws IOExceptionInterruptedException String linha valortoString StringTokenizer tokenizer new StringTokenizerlinha while tokenizerhasMoreTokens valorsettokenizernextToken contextowritevalor new IntWritable1 Neste código a variável linha recebe o valor do parâmetro valor do método map convertido para String para então ser dividido pelo StringTokenizer em palavras que serão armazenadas na variável tokenizer Dessa forma é possível executar um loop que verifica se a variável tokenizer contém mais palavras e caso contenha realizar a atribuição da palavra para a variável valor e escrever no contexto o valor dela e o número 1 No trecho de código a seguir pode ser observada a segunda classe que realiza a redução e herda da classe Reducer public static class MeuReduce extends ReducerTextIntWritab leTextIntWritable public void reduceText chave IterableIntWritable valores Context contexto throws IOExceptionInterruptedEx ception int soma0 forIntWritable valor valores somavalorget 7 Aplicações simples utilizando frameworks de big data Frameworks para Big Data UNIDADE 2 Aplicações Simples Utilizando Frameworks de Big Data PARTE 2 87 contextowritechave new IntWritablesoma Esta classe inicia a variável soma com o valor 0 para então executar o loop que soma cada valor do vetor valores na variável soma Quando o loop termina é escrito no contexto o valor da variável chave e a soma dos valores da chave A terceira classe que engloba as duas anteriores e contém o método main para executar o código delas pode ser observada a seguir public class ContadorPalavras public static class MeuMap extends MapperLongWritableT extTextIntWritable public static class MeuReduce extends ReducerTextIntWr itableTextIntWritable public static void mainString args throws Exception Configuration configuracao new Configuration Job job new JobconfiguracaoMeu Contador de Palavras jobsetJarByClassContadorPalavrasclass jobsetMapperClassMeuMapclass jobsetReducerClassMeuReduceclass jobsetOutputKeyClassTextclass jobsetOutputValueClassIntWritableclass jobsetInputFormatClassTextInputFormatclass jobsetOutputFormatClassTextOutputFormatclass Path caminhoSaida new Pathargs1 FileInputFormataddInputPathjob new Pathargs0 FileOutputFormatsetOutputPathjob new Pathargs1 outputPathgetFileSystemconfiguracao deletecaminhoSaida SystemexitjobwaitForCompletiontrue 0 1 Aplicações simples utilizando frameworks de big data 8 88 TÓPICOS ESPECIAIS EM ADS Neste trecho os códigos das classes MeuMap e MeuReduce são omitidos por já terem sido apresentados separadamente Por conter o método main é a classe ContadorPalavras que será chamada para executar a aplicação Nesse método são criadas as variáveis de configuração do Job e em seguida ele é executado No Job são informadas as classes para gerar o arquivo executável ou jar bem como a classe de mapeamento de redução de saída da chave e do valor e do formato de saída e de entrada Como no comando de execução da aplicação são passados os parâmetros que informam qual é o arquivo de entrada e de saída respectivamente a vari ável caminhoSaida recebe o caminho do segundo parâmetro Em seguida são adicionados os caminhos de entrada e saída na variável job por meio das funções addInputPath e setOutputPath respectivamente e em seguida é realizada a configuração para que a saída seja removida do HDFS automaticamente para que não seja necessário removêla explicitamente Em seguida o Job é executado pela função waitForCompletion que representa a conclusão quando retorna 1 fechando o sistema Para executar essa aplicação no Hadoop é necessário rodar o comando informando o nome do arquivo executável criado com a extensão jar no momento da compilação do código o nome da classe que foi criada e que contém o método main bem como o caminho dos arquivos de entrada e saída neste caso localizados na pasta amostra conforme pode ser observado a seguir hadoop jar exemplohadoopmapreducejar ContadorPalavras amostrainput amostraoutput 3 Aplicação com o MapReduce no Spark Neste exemplo o projeto utiliza o Maven para adicionar as dependências portanto não é necessário instalar e confi gurar o Apache Spark Entretanto é necessário localizar e abrir o arquivo pomxml do projeto e adicionar a dependência do Spark com o seguinte trecho de código dependency groupIdorgapachesparkgroupId artifactIdsparkcore211artifactId version140version dependency 9 Aplicações simples utilizando frameworks de big data Frameworks para Big Data UNIDADE 2 Aplicações Simples Utilizando Frameworks de Big Data PARTE 2 89 Além da dependência é necessário adicionar a classe ContadorPalavras juntamente com o seu caminho no projeto dentro das tags mainClass mainClass do mesmo arquivo conforme apresentado a seguir mainClasscomsagahexemplospark ContadorPalavrasmainClass No caso da criação da aplicação que utiliza o mapeamento e a redução com o Spark é necessário criar apenas a classe principal ContadorPalavras que contém o método contaPalavras e o método main para chamar a execução do primeiro método conforme pode ser observado no código a seguir package comsagahexemplospark import orgapachesparkSparkConf import orgapachesparkapijavaJavaPairRDD import orgapachesparkapijavaJavaRDD import orgapachesparkapijavaJavaSparkContext import scalaTuple2 import javautilArrays public class ContadorPalavras private static void contaPalavrasString nomeArquivo SparkConf configuracao new SparkConfsetMasterlocal setAppNameMeu Contador de Palavras JavaSparkContext contexto new JavaSparkContextconfiguracao JavaRDDString arquivoEntrada contexto textFilenomeArquivo JavaRDDString palavrasArquivo arquivoEntrada flatMapconteudo ArraysasListconteudosplit JavaPairRDD dadosContados palavrasArquivomapToPairt new Tuple2t 1reduceByKeyx y int x int y dadosContadossaveAsTextFileDadosContados Aplicações simples utilizando frameworks de big data 10 90 TÓPICOS ESPECIAIS EM ADS public static void mainString args contaPalavrasargs0 Neste código é possível observar a configuração do Spark no qual o nó mestre é definido como local e o nome da aplicação como Meu Contador de Palavras Em seguida é declarada a variável contexto do tipo JavaSparkContex e instanciada a partir da con figuração anterior A variável arquivoEntrada declarada com o tipo JavaRDD é instanciada a partir do comando textFile do contexto e a variável palavrasArquivo recebe as palavras contidas no arquivo de entrada a partir da função flatMap que recebe o conteúdo com as palavras separadas por espaço em branco Em seguida são realizadas as operações de transformação do Spark em que são realizados o mapeamento das palavras por meio do método mapToPair e a redução do resultado do mapeamento por meio da função reduceByKey armazenando o resultado final na variável dadosContados do tipo JavaPairRDD A variável dadosContados é utilizada então para salvar o arquivo de texto do diretório informado a partir do método saveAsTextFile que é uma das operações de ação do framework Para executar a aplicação no Spark é necessário rodar o comando que tem como parâmetros a classe ContadorPalavras com seu caminho no projeto e o arquivo de entrada como pode ser observado a seguir mvn execjava DexecmainClasscomsagahexemplosparkConta dorPalavras Dexecargsinputtxt 11 Aplicações simples utilizando frameworks de big data Frameworks para Big Data UNIDADE 2 Aplicações Simples Utilizando Frameworks de Big Data PARTE 2 91 No Spark as linguagens de programação mais utilizadas são Python Scala e Java Veja no trecho de código a seguir retirado do GitHub oficial do Spark um exemplo em Python por meio do pyspark para o caso de uso de contagem de palavras GITHUB 2018 documento online from future import printfunction import sys from operator import add from pysparksql import SparkSession if name main if lensysargv 2 printUsage wordcount file filesysstderr sysexit1 spark SparkSession builder appNamePythonWordCount getOrCreate lines sparkreadtextsysargv1rddmaplambda r r0 counts linesflatMaplambda x xsplit maplambda x x 1 reduceByKeyadd output countscollect for word count in output prints i word count sparkstop Dessa forma a partir do entendimento do funcionamento do MapReduce e das funções de mapeamento e redução que fazem parte do conjunto mí nimo de funções de uma aplicação que utiliza o MapReduce bem como do exemplo de uma aplicação MapReduce para a contagem de palavras de um Aplicações simples utilizando frameworks de big data 12 92 TÓPICOS ESPECIAIS EM ADS conjunto de dados tanto no Hadoop quanto no Spark é possível dar início ao desenvolvimento de outras aplicações que utilizam o framework de forma a praticar os conceitos e aprofundar os conhecimentos que são cada dia mais valorizados pelo mercado COULOURIS G et al Sistemas distribuídos 5 ed Porto Alegre Bookman 2013 DEAN J GHEMAWAT S MapReduce simplified data processing on large clusters In OPERATING SYSTEMS DESIGN E IMPLEMENTATION 6 2004 San Francisco Proceedings San Francisco ACM 2004 p 113 Disponível em httpsstaticgoogleusercontent commediaresearchgooglecomptBRarchivemapreduceosdi04pdf Acesso em 21 mar 2020 GITHUB ApacheSpark GitHub s l 8 mar 2018 Disponível em httpsgithubcom apachesparkblobmasterexamplessrcmainpythonwordcountpy Acesso em 22 mar 2020 KIRAN R MapReduce tutorial fundamentals of MapReduce with MapReduce example Edureka s l 11 fev 2020 Disponível em httpswwwedurekacoblogmapreduce tutorial Acesso em 22 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 THE APACHE SOFTWARE FOUNDATION MapReduce tutorial Apache Hadoop s l 2019 Disponível em httpshadoopapacheorgdocsstablehadoopmapreduceclient hadoopmapreduceclientcoreMapReduceTutorialhtml Acesso em 21 mar 2020 Os links para sites da web fornecidos neste livro foram todos testados e seu funciona mento 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 13 Aplicações simples utilizando frameworks de big data Frameworks para Big Data UNIDADE 2 Aplicações Simples Utilizando Frameworks de Big Data PARTE 2 93 ENCERRA AQUI O TRECHO DO LIVRO DISPONIBILIZADO PELA SAGAH PARA ESTA PARTE DA UNIDADE PREZADO ESTUDANTE Parte 3 Overview de Frameworks de Stream de Big Data O conteúdo deste livro é disponibilizado por SAGAH unidade 2 96 TÓPICOS ESPECIAIS EM ADS Overview de frameworks de stream de big data Objetivos de aprendizagem Ao final deste texto você deve apresentar os seguintes aprendizados Descrever o Spark Streaming Comparar tecnologias utilizadas para stream de big data Esquematizar a ingestão de um stream de dados Introdução Existem cenários com características específicas de streaming de big data como no caso de uma instituição financeira que rastreia em tempo real as mudanças de mercado para ajustar as operações das carteiras de investimento com base em limites máximos e mínimos ou no caso de soluções de Internet das Coisas que crescem a cada dia e sensores de monitoramento que fazem o envio constante das suas leituras para uma ou mais estações Para lidar com esses cenários é necessário utilizar tecnologias que possam tratar séries temporais e realizar o processamento à medida que os dados chegam ao invés de esperar o final da mensagem para realizar o processamento pois nesses casos as mensagens não contêm um sinal de fim de arquivo por serem um fluxo constante de dados que em teoria não tem fim Neste capítulo você vai conhecer uma visão geral de frameworks de stream de big data saber mais sobre o Spark Streaming por meio da descrição de suas características e da comparação com outras tecnologias utilizadas para stream de big data bem como pela ingestão de um stream de dados simples Frameworks para Big Data UNIDADE 2 Overview de Frameworks de Stream de Big Data PARTE 3 97 1 Conhecendo o Spark Streaming De acordo com a documentação do Apache Spark Streaming o framework torna simples o desenvolvimento de aplicações em stream de dados de alta taxa de transferência de forma que as aplicações sejam escaláveis e tolerantes a falhas sem que haja a necessidade de escrita de código extra para esses fi ns A simplicidade se dá por conta dos operadores de alto nível contidos em sua API integrada para o processamento dos fl uxos de dados o que permite que o desenvolvedor crie serviços de stream de dados da mesma forma que cria serviços para lotes de dados No entanto a tolerância a falhas se dá pela sua recuperação de trabalho perdido e das janelas deslizantes De acordo com Dayananda 2019 Spark Streaming tem como principais recursos a escalabilidade pois pode ser facilmente escalonado para centenas de nós a velocidade por atingir baixa latência ou processar em tempo real em certos casos a tolerância a falhas a sua integração entre processamento de fluxos de dados e de lotes e a sua disponibilidade para a realização de análise de negócios pois pode ser utilizado para rastrear comportamentos que podem ser utilizados estrategicamente para a tomada de decisão das empresas Como o Spark Streaming roda em cima da API principal do Spark ele permite a combinação de operações em fluxos ativos de dados com dados em lotes e buscas interativas bem como o reúso de código de streaming para processamento em lote unindo os fluxos com dados históricos o que possibilita a criação de aplicações interativas além das aplicações de análise Os dados das aplicações que tratam esses fluxos podem ser ingeridos por diversas fontes distintas como plataformas de código aberto e proprietário como o Apache Kafka o Apache Flume e o Amazon Kinesis ou de sockets TCP Esses dados podem ser processados com algoritmos complexos por meio das funções de alto nível como map reduce join e window Os dados resultantes desse processamento podem ser armazenados em bancos de dados e sistemas de arquivos como o HDFS ou o Hadoop Distributed File System bem como podem ser enviados para dashboards conhecidos como painéis de controle Também é possível executar algoritmos de aprendizagem de máquina e de processamento gráfico nos fluxos de dados Internamente o Spark Streaming recebe um fluxo de dados de entrada em tempo real e divide esses dados em lotes em intervalos de tempo predefinido Esses lotes são chamados de microlotes e são processados pelo motor do Spark o que resulta em um fluxo final também composto por um conjunto de lotes conforme apresentado na Figura 1 Overview de frameworks de stream de big data 2 98 TÓPICOS ESPECIAIS EM ADS Figura 1 Funcionamento interno do Apache Spark Streaming Fonte Adaptada de Apache Spark 201 De acordo com Penchikala 2016 após a divisão dos dados em microlotes eles são tratados como RDDs acrônimo para Resilient Distributed Datasets que são coleções de elementos O autor também afirma que a decisão do intervalo de tempo a ser utilizado é de extrema importância para o projeto e deve ser baseado no caso de uso que se quer analisar bem como nos requisitos de processamento de dados Caso o tempo seja muito baixo os microlotes não irão conter dados sufi cientes para que os resultados da análise sejam significativos e caso seja muito alto podem faltar recursos para o processamento dos microlotes Fluxos discretizados DStreams O Spark Streaming fornece uma abstração de alto nível que representa um fl uxo contínuo de dados chamado DStream acrônimo para fl uxo discretizado do inglês discretized stream Internamente um DStream é representado por uma série contínua ou sequência de RDDs que é a abstração do Spark para um conjunto de dados distribuído e imutável e contém os dados de um intervalo de tempo conforme pode ser observado na Figura 2 Figura 2 RDDs no DStream com dados de determinado intervalo de tempo Fonte Adaptada de Apache Spark 201 Além disso cada operação que acontece em um DStream é convertida em operações nos RDDs que seguem como no caso de um fluxo de entrada que chega na forma de linhas e é convertido para palavras no qual a operação 3 Overview de frameworks de stream de big data Frameworks para Big Data UNIDADE 2 Overview de Frameworks de Stream de Big Data PARTE 3 99 flatMap é executada em cada um dos RDDs nas linhas do stream discreti zado para gerar os RDDs das palavras de saída DStream A Figura 3 apresenta um exemplo que mostra o fluxo de uma aplicação usando Spark que conta o número de palavras dos textos recebidos de um servidor de dados que escuta de um socket TCP Figura 3 Replicação da operação flatMap nos RDDs subjacentes do DStream Fonte Adaptada de Apache Spark 201 Neste caso as operações do DStream ocultam grande parte desses detalhes de replicação das operações para outros RDDs e disponibilizam uma API de alto nível para os desenvolvedores tendo em vista que as transformações subjacentes nos RDDs são executadas pelo motor do Apache Spark Esse fluxo contínuo de dados representado pelo Spark Streaming como DStream pode ser o fluxo de dados de entrada que é recebido da fonte ou o fluxo de dados processados de saída que é gerado pela transformação do fluxo de entrada Quando se trata de um fluxo de entrada o DStream diz respeito aos dados de entrada recebidos por meio das fontes de stream que podem ser criadas a partir de operações de alto nível em outros DStreams além das outras fontes citadas anteriormente como das plataformas como Kafka Flume e Kineses Além disso todo DStream de entrada é associado a um objeto do tipo Receiver que recebe os dados da fonte e os armazena na memória do Spark para o processamento conforme pode ser observado na Figura 4 Overview de frameworks de stream de big data 4 100 TÓPICOS ESPECIAIS EM ADS Figura 4 DStream de entrada com o objeto do tipo Receiver para receber os dados Fonte Adaptada de Dayananda 2019 O DStream suporta diversas das transformações normalmente permitidas nos RDDs do Spark como map flatMap filter reduce join transform e updateStateByKey e assim como no caso dos RDDs as transformações permitem que os dados do DStream de entrada sejam modificados Em se tratando do DStream de saída que representa o fluxo de dados processados são as operações de saída que permitem que os dados sejam enviados para sistemas externos como bancos de dados e sistemas de ar quivos e assim como no caso dos RDDs são essas operações que acionam a execução de todas as transformações no DStream que não são executadas imediatamente quando chamadas 2 Spark Streaming e outros frameworks Além do Spark Streaming existem outros frameworks que permitem tratar fl uxos contínuos de dados como o Structured Streaming do Spark o Kinesis Streams da Amazon o Flink o Storm o Kafka e o Samza todos da Apache Neste capítulo o framework Apache Spark Streaming será comparado com o Spark Structured Streaming o Apache Flink e o Apache Storm Spark Streaming e Spark Structured Streaming O Spark é uma ferramenta muito popular por conta do seu processamento rápido e distribuído sem sobrecarga de entrada e saída com tolerância a falhas entre outras qualidades Voltado para soluções de big data ele permite o processamento de vastas quantidades de dados bem como trabalhar com processamento de 5 Overview de frameworks de stream de big data Frameworks para Big Data UNIDADE 2 Overview de Frameworks de Stream de Big Data PARTE 3 101 fl uxos contínuos de dados em tempo real Para lidar com esses fl uxos de dados o Spark disponibiliza duas ferramentas uma é o Spark Streaming apresentado anteriormente neste capítulo e a outra é o Structured Streaming De acordo com Saxena 2019 o Spark Structured Streaming surgiu com a versão 2 do Spark como mais uma forma de lidar com fluxos contínuos de dados e foi construído na biblioteca Spark SQL Baseado nas APIs Dataframe e Dataset ele torna fácil a execução de consultas SQL com a API Dataframe e operações com a API Dataset nos fluxos de dados Uma das diferenças entre eles é a forma como tratam os fluxos de dados em tempo real Enquanto o Spark Streaming utiliza o conceito de divisão em microlotes e cada lote pertence a um lote do DStream representado por dife rentes RDDs o Structured Streaming processa cada linha do fluxo de dados e o resultado é a atualização de uma tabela de resultados Além disso com o Structured Streaming é possível que a tabela resultante seja composta por uma atualização dos dados apenas novos resultados ou todos os resultados dependendo do modo das operações utilizadas A segunda diferença tem relação com as diferentes APIs de cada um dos modelos Enquanto o Spark Streaming utiliza a API DStream que internamente funciona com RDDS o Structured Streaming utiliza APIs Dataframe e Dataset Dessa forma conforme apresentado por diversos autores os Dataframes são mais otimizados quando se trata de processamento além de oferecerem mais opções de agregação e outras operações com funções suportadas no Spark Outra diferença diz respeito à forma de processamento de dados com base no horário exato do acontecimento do evento No Spark Streaming o controle do tempo só tem relação com o momento em que o dado é ingerido pelo Spark quando os dados são colocados em um lote atual mesmo que o evento tenha acontecido mais cedo e pertença ao lote anterior o que pode ser considerado como perda de dados e gerar informações menos precisas Todavia no caso do Structured Streaming um dos principais recursos introduzidos é o tratamento de dados atrasados com base no horário do acon tecimento do evento de forma que o registro de data e hora do acontecimento do evento no mundo real é inserido na tabela de resultados fornecendo uma maneira diferente de processar os dados se comparado ao Spark Streaming Em se tratando de tolerância a falhas em ambos os frameworks é utilizado o conceito de ponto de controle para guardar o progresso de um trabalho pois para que uma aplicação seja tolerante a falhas ela precisa ter capacidade de reiniciar a partir do ponto de falha de forma a evitar perda de dados no caso de retomar em um ponto posterior ou a duplicação de dados no caso de retomar em um ponto anterior Overview de frameworks de stream de big data 6 102 TÓPICOS ESPECIAIS EM ADS A diferença entre eles é que o Structured Streaming utiliza duas condições para se recuperar de qualquer erro além do ponto de controle tendo em vista que essa abordagem ainda permite perda de dados A primeira é que a fonte de dados deve ser repetível e a segunda é que as áreas de destino das operações nos fluxos de dados devem suportar operações idempotentes para que os dados possam ser reprocessados em caso de falhas Spark Streaming Apache Flink e Apache Storm Assim como o Spark Streaming o Apache Flink e o Apache Storm são pro jetados para tratar os dados em memória e processálos em tempo real sem necessariamente persistirem os dados em outros tipos de armazenamento apesar de ser possível graválos em bancos de dados e sistemas de arquivos pois o propósito dos frameworks de streaming é processar os dados em tempo real à medida que eles chegam A grande diferença entre eles é que o Flink e o Storm são baseados em uma arquitetura diferente do Spark Streaming pois foram criados do zero com o propósito de trabalhar com um motor nativo para streaming enquanto o Spark contém um motor baseado no conceito de tratamento de stream de dados com microlotes Os modelos nativos de tratamento de streaming foram projetados especi ficamente para resolver os desafios de aplicações que exigem processamento em tempo real baseado em recebimento de eventos no qual o fluxo de dados é obtido das fontes ao longo do tempo e é processado individualmente à medida que é recebido o que ajuda a manter um menor tempo de espera antes que o dado entre no sistema Como resultado esse tipo de arquitetura tem uma menor latência se comparada ao modelo orientado a microlotes do Spark Streaming Em relação à tolerância a falhas como visto anteriormente o Spark Stre aming utiliza o conceito de gerenciamento de estado por ponto de verificação para replicar continuamente o estado para outros nós para que quando a falha aconteça o dado possa ser extraído do outro nó e o processamento seja reiniciado o que é um processo mais custoso em motores de stream nativos no sentido de recursos pois é aplicado a cada nível de registro De acordo com Gorasiya 2019 apesar de esse controle ser mais custoso o Flink também utiliza pontos de verificação para a sua recuperação de falhas No entanto o Storm não fornece gerenciamento de estados o que força o reinício do processo inteiro em diferentes nós gerando assim a garantia de processamento ao menos uma vez diferentemente dos dois anteriores que têm a garantia de processamento de exatamente uma vez 7 Overview de frameworks de stream de big data Frameworks para Big Data UNIDADE 2 Overview de Frameworks de Stream de Big Data PARTE 3 103 A diferença entre a gestão de estados do Spark Streaming e do Flink é que no Spark ela está associada com os RDDs e envolve a atualização de cada lote mesmo que o estado não seja alterado tornandoo extremamente ineficiente se comparado ao Flink No caso do Flink tem suporte eficiente para integrar o gerenciamento de estado com a ajuda de um sistema de arquivos distribuídos de forma a manter o controle do estado por meio de um retrato fiel da situação em determinado momento Para Gorasiya 2019 outra diferença é em relação à escalabilidade pois no Spark as soluções escalam automaticamente enquanto no Flink e no Storm esse processo é manual Além disso o Spark tem uma ampla comunidade que trabalha dá suporte e discute sobre a tecnologia enquanto no Flink a comu nidade ainda está em crescimento e no Storm a comunidade de colaboradores é pequena se comparada aos dois anteriores Segundo Prakash 2018 o Storm é o projeto de código aberto mais antigo para trabalhar com streaming e um dos mais maduros e confiáveis Excelente para trabalhar com casos de uso que não sejam complexos ele tem latência muito baixa e alta taxa de transferência Entretanto tem desvantagens como o fato de não controlar estados controle de garantia de processamento de ao menos uma vez e não tem funcionalidades avançadas como o processamento de evento baseado no horário do acontecimento agregação separação em janelas sessões entre outros O autor afirma que as principais vantagens do Spark Streaming são que ele suporta arquitetura Lambda que é disponibilizada gratuitamente com o Spark tem alta taxa de transferência tolerância a falhas por padrão por conta da sua natureza de microlotes além de ter simplicidade no uso de APIs de alto nível uma comunidade grande e melhorias agressivas no framework Suas principais desvantagens dizem respeito a não ser nativamente criado para streaming e não é adequado para alguns casos de requisitos de baixa latência se comparado a outros frameworks Em se tratando do Flink é o líder em inovação quando se trata de framework de streaming de código aberto Foi o primeiro projeto nativo para streaming com funcionalidades avançadas como processamento de evento com horário do acontecimento separação em janelas entre outros Ele tem baixa latência com alta taxa de entrega que pode ser configurada de acordo com os requisitos da aplicação Entretanto suas desvantagens dizem respeito à sua popularidade se dar apenas em aplicações de streaming e à sua falta de adoção inicial o que o colocou mais tarde na competição contra outros frameworks tendo uma comunidade menor do que o Spark Overview de frameworks de stream de big data 8 104 TÓPICOS ESPECIAIS EM ADS 3 Ingestão de dados com o Spark Streaming em Java Para que seja possível entender como funciona a ingestão de dados em uma aplicação com o Spark Streaming será apresentado um caso de uso em Java de uma aplicação simples para contagem de palavras nos dados de texto recebidos de um servidor por meio da escuta de um socket TCP que neste caso vai ser exemplifi cado pelo endereço localhost e porta 9999 Adição do Spark Streaming ao projeto Assim como no caso do Spark o Spark Streaming está disponível no repo sitório central do Maven Para tanto é necessário criar um projeto Maven e adicionar o trecho de código a seguir como dependência no arquivo pomxml sem esquecer de verifi car as versões disponíveis no repositório do Maven no momento que estiver trabalhando com o projeto dependency groupIdorgapachesparkgroupId artifactIdsparkstreaming212artifactId version245version dependency Para a ingestão de dados de fontes que não estão presentes na API principal do Spark Streaming como o Kafka o Flume e o Kineses também é possível adicionar suas respectivas dependências no arquivo pomxml por meio dos artefatos sparkstreamingkafka010212 sparkstreaming flume212 ou sparkstreamingkinesisasl212 e suas versões correspondentes que têm o número final correspondente à versão do exemplo mas que irão evoluir e devem ser buscadas para que a versão utilizada seja atualizada no momento da criação do projeto para que não se utilize uma versão defasada e com menos recursos Etapas para criar um programa com Spark Streaming Uma vez que o Spark Streaming foi instalado na máquina ou adicionado ao projeto Maven é necessário seguir alguns passos para criar uma aplicação que 9 Overview de frameworks de stream de big data Frameworks para Big Data UNIDADE 2 Overview de Frameworks de Stream de Big Data PARTE 3 105 utilize stream de dados sendo o primeiro deles a defi nição das importações conforme no trecho a seguir import orgapachespark import orgapachesparkapijavafunction import orgapachesparkstreaming import orgapachesparkstreamingapijava import scalaTuple2 Com as devidas importações que serão apresentadas no código de exemplo inicialmente é necessário criar o objeto do tipo SparkConf especificando o local de execução e o número de threads que irão executar o processamento bem como o nome da aplicação como no trecho de código a seguir que utilizada o ambiente local SparkConf configuracao new SparkConfsetMasterlocal2 setAppNameContaPalavras Em seguida é criado o objeto do tipo JavaStreamingContext para receber a configuração do objeto SparkConf como parâmetro e o intervalo de tempo de cada lote Esse objeto é o ponto de entrada para todas as funcio nalidades de streaming e no caso de uso do exemplo foi configurado em 1 segundo conforme pode ser observado no seguinte trecho de código JavaStreamingContext jssc new JavaStreamingContextconfiguracao Durationsseconds1 A partir deste objeto de contexto é possível criar o DStream de entrada a partir do objeto do tipo JavaReceiverInputDStream Como neste exemplo a conexão é feita com um socket TCP o método chamado é o socketTextStream que recebe como parâmetro o endereço IP do servidor e a porta como apresentado no trecho de código a seguir JavaReceiverInputDStreamString linhas jsscsocketTextStreamlocalhost 9999 Overview de frameworks de stream de big data 10 106 TÓPICOS ESPECIAIS EM ADS A variável linhas do tipo DStream representa o fluxo de dados que será recebido do servidor onde cada entrada vinda do servidor representa uma linha do texto como um todo Para que essa linha seja processada e seja realizada a sua separação em palavras com o espaço em branco sendo o separador entre elas é necessário utilizar a operação flatMap que recebe uma lista como parâmetro que deve ser separada na variável x por meio dos métodos split e iterator para que então cada uma das palavras possa ser atribuída à variável palavras do tipo DStream conforme é possível observar no seguinte trecho de código JavaDStreamString palavras linhasflatMapx ArraysasListxsplit iterator Para a realização da contagem de palavras é utilizada a operação mapToPair no DStream palavras e no seu resultado que também é uma variável do tipo DStream de nome pares é realizada a operação reduceByKey Após isso o resultado é armazenado no DStream palavrasContadas que recebe a operação print para que seus valores sejam escritos no terminal à medida que são processados O trecho do código pode ser visto a seguir JavaPairDStreamString Integer pares palavrasmapToPairs new Tuple2s 1 JavaPairDStreamString Integer palavrasContadas paresreduceByKeyi1 i2 i1 i2 palavrasContadasprint Com o código escrito até agora foi realizada a configuração do que de verá ser executado pelo Spark Streaming sem que aconteça algum tipo de processamento até que a operação de chamada de início aconteça explicita mente por meio da função start do objeto de contexto do Spark Streaming Além disso é necessário esperar a execução terminar por meio da operação awaitTermination como pode ser visto no trecho de código que segue jsscstart jsscawaitTermination 11 Overview de frameworks de stream de big data Frameworks para Big Data UNIDADE 2 Overview de Frameworks de Stream de Big Data PARTE 3 107 Neste caso a classe que contém o código foi chamada de ContadorPa lavrasStreaming e o código completo ficaria como o apresentado a seguir import orgapachespark import orgapachesparkapijavafunction import orgapachesparkstreaming import orgapachesparkstreamingapijava import scalaTuple2 public final class ContadorPalavrasStreaming public static void mainString args throws Exception SparkConf configuracao new SparkConfsetMasterlocal2 setAppNameContaPalavras JavaStreamingContext jssc new JavaStreamingContextconfiguracao Durationsseconds1 JavaReceiverInputDStreamString linhas jsscsocketTextStreamlocalhost 9999 JavaDStreamString palavras linhasflatMapx ArraysasListxsplit iterator JavaPairDStreamString Integer pares palavrasmapToPairs new Tuple2s 1 JavaPairDStreamString Integer palavrasContadas paresreduceByKeyi1 i2 i1 i2 palavrasContadasprint jsscstart jsscawaitTermination Para que seja possível rodar um servidor de dados de texto localmente é possível utilizar o serviço Netcat que está presente na maioria dos sistemas operacionais baseados em unix como Linux e MacOS por meio do comando nc lk 9999 no terminal e escrever o texto desejado como apresentado no exemplo da Figura 5 Overview de frameworks de stream de big data 12 108 TÓPICOS ESPECIAIS EM ADS Figura 5 Exemplo de input de dados com texto digitado Feito isso com o Spark instalado e configurado para rodar a aplicação em outra janela do terminal é necessário navegar até a pasta onde se encontra o arquivo da classe ContadorPalavrasStreaming e executar o seguinte comando binrunexample ContadorPalavrasStreaming Dessa forma serão apresentados no terminal as palavras e os seus respe tivos números de contagem para cada uma delas conforme apresentado no exemplo da Figura 6 Figura 6 Exemplo de saída para o exemplo de entrada apresentado na Figura 5 Com isso é possível conhecer uma visão geral sobre o Apache Spark Strea ming observar suas características e diferenças entre ele e outros frameworks como o Apache Structured Streaming o Apache Flink e o Apache Storm bem como entender como seria a programação em Java de uma aplicação simples de ingestão de dados em streaming 13 Overview de frameworks de stream de big data Frameworks para Big Data UNIDADE 2 Overview de Frameworks de Stream de Big Data PARTE 3 109 APACHE SPARK Spark streaming programming guide Apache Spark s l 201 Disponível em httpssparkapacheorgdocslateststreamingprogrammingguide html Acesso em 30 mar 2020 DAYANANDA S Spark streaming tutorial sentiment analysis using apache spark Edu reka s l 22 May 2019 Disponível em httpswwwedurekacoblogsparkstreaming Acesso em 30 mar 2020 GORASIYA D Comparison of opensource data stream processing engines Spark streaming Flink and Storm Technical Report s l 2019 Disponível em httpswww researchgatenetpublication336141201ComparisonofOpenSourceDataStream ProcessingEnginesSparkStreamingFlinkandStorm Acesso em 30 mar 2020 PENCHIKALA S Big Data com Apache Spark Part 3 Spark streaming Info Q s l 5 dez 2016 Disponível em httpswwwinfoqcombrarticlesapachesparkstreaming Acesso em 30 mar 2020 PRAKASH C Spark streaming vs Flink vs Storm vs Kafka Streams vs Samza Choose your stream processing framework Medium s l 1 May 2018 Disponível em https mediumcomchandanbaranwalsparkstreamingvsflinkvsstormvskafkastreams vssamzachooseyourstreamprocessing91ea3f04675b Acesso em 30 mar 2020 SAXENA A Spark streaming vs structured streaming DZone s l 29 mar 2019 Dis ponível em httpsdzonecomarticlessparkstreamingvsstructuredstreaming Acesso em 30 mar 2020 Os links para sites da web fornecidos neste livro foram todos testados e seu funciona mento 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 Overview de frameworks de stream de big data 14 ENCERRA AQUI O TRECHO DO LIVRO DISPONIBILIZADO PELA SAGAH PARA ESTA PARTE DA UNIDADE PREZADO ESTUDANTE Parte 4 Frameworks de Armazenamento não Estruturados O conteúdo deste livro é disponibilizado por SAGAH unidade 2 112 TÓPICOS ESPECIAIS EM ADS Frameworks de armazenamento não estruturados Objetivos de aprendizagem Ao final deste texto você deve apresentar os seguintes aprendizados Detalhar o Hadoop Distributed File System HDFS Comparar HDFS Amazon S3 Microsoft Azure Storage IBM Cloud Storage e Google Cloud Storage Apresentar operações sobre dados não estruturados Introdução Os dados não estruturados representam mais de 80 dos dados existentes no mundo Com tanta informação em potencial foi necessário desen volver novas soluções de armazenamento que não apenas pudessem guardar esses dados mas que fossem capazes de assegurar que eles ficassem íntegros e com fácil acesso Além disso como as fontes dos dados são crescentes as novas soluções devem ser capazes de escalar o armazenamento o quanto for necessário sem perder tempo de execução enquanto isso é realizado Neste capítulo você vai aprender o que é o Hadoop Distributed File System HDFS e quais são as suas principais vantagens e utilizações Você conhecerá também como o armazenamento em nuvem de grandes empresas como Amazon Microsoft Google e IBM superou as limitações que existiam quanto a custo e escalonamento Por fim você compreenderá quais são as principais operações realizadas em dados não estruturados Frameworks para Big Data UNIDADE 2 Frameworks de Armazenamento não Estruturados PARTE 4 113 1 Ecossistema Hadoop e HDFS É praticamente impossível falar de big data sem citar o Hadoop um framework opensource que possibilita o processamento de grandes volumes de dados O Hadoop foi originalmente lançado pela empresa Yahoo em 2008 Anos depois passou a ser gerenciado pela Apache Software Foundation que o mantém até hoje Graças à sua eficácia o Hadoop se consolidou como um ecossistema de tecnologias amplamente útil sendo utilizado por uma gama de empresas conhecidas mundialmente como Adobe Alibaba ebay Facebook LinkedIn Twitter a própria Yahoo dentre outras ASF INFRABOT 2019 Embora tenha sido criado com o objetivo de realizar buscas em milhões de páginas web o Hadoop se tornou um conjunto versátil de ferramentas podendo ser utilizado de diferentes maneiras por exemplo sandbox para análise de dados e obtenção de insights armazenamento de dados brutos componente de um data lake armazenamento de informações empresariais data warehouse e armazenamento geral de dados de baixo custo O Hadoop é formado por quatro módulos básicos Hadoop Common que constitui as bibliotecas e funções gerais necessárias para o funcionamento dos outros módulos YARN Yet Another Resource Negotiator uma plataforma de gerenciamento de recursos computacionais MapReduce sistema para programação paralela de grandes volumes de dados Ozone um sistema de armazenamento de objetos Submarine uma plataforma unificada de fer ramentas de machine e deep learning e HDFS sistema de armazenamento distribuído de dados APACHE HADOOP 201 WHITE 2012 O sistema de arquivos distribuídos Hadoop HDFS Distributed File System é um dos mais conhecidos frameworks para armazenamento de grandes volumes de dados no universo do big data que podem ser es truturados semiestruturados ou não estruturados Sendo um dos quatro componentes básicos do Hadoop ele foi projetado para armazenar os dados em uma estrutura distribuída em hardware comum para facilitar o seu escalonamento Além da escalabilidade para armazenar grandes volumes de dados o Hadoop apresenta outras características como alta disponibi lidade tolerância a falhas realização de redirecionamento automático de dados e possibilidade de portabilidade entre hardwares e sistemas similares APACHE HADOOP 201 Frameworks de armazenamento não estruturados 2 114 TÓPICOS ESPECIAIS EM ADS Arquitetura Nesse sistema os dados e metadados são armazenados separadamente Os metadados são armazenados em um servidor intitulado NameNode e enquanto os dados são armazenados em DataNodes ambos fi cam conectados entre si com comunicação constante Dentro dos NameNodes fi cam registrados diferentes atributos que incluem tempo de modifi cação permissão acesso do arquivo e espaço em disco O conteúdo de cada arquivo é dividido em blocos de tamanho defi nido e replicado em diferentes DataNodes para garantir a integridade e durabilidade dos dados conforme ilustra a Figura 1 Figura 1 Exemplo de estrutura do HDFS e replicação de um nó quando seu pulso para de ser enviado Fonte Adaptada de Hanson 2013 Todos os blocos que constituem um arquivo com exceção do último têm o mesmo tamanho que é por padrão 128 megabytes e são replicados em três DataNodes também por padrão Cada cluster do HDFS possui um único NameNode primário que gerencia o espaço para a identificação do sistema de arquivos e regula o acesso aos arquivos pelos clientes Além disso 3 Frameworks de armazenamento não estruturados Frameworks para Big Data UNIDADE 2 Frameworks de Armazenamento não Estruturados PARTE 4 115 vários DataNodes gerenciam o armazenamento anexado aos nós em que são executados Uma vantagem do HDFS é que são criados servidores web que possibilitam a verificação do status atual de armazenamento dos NameNodes e DataNodes PATIL SONI 2013 Tolerância a falhas Um sistema é tolerante a falhas quando continua funcionando corretamente mesmo que um dos seus componentes tenha parado de funcionar adequada mente ou seja falhado O objetivo principal do HDFS é armazenar dados de maneira confi ável mesmo na presença de falhas Os dois métodos principais que possibilitam a sua alta tolerância a falhas são replicação de dados e ponto de verifi cação e recuperação A replicação de dados consiste em copiar um mesmo dado várias vezes e alocálo em nós diferentes Essa é uma técnica eficaz que possibilita uma recuperação de falhas imediata e alta disponibilidade mas tem como des vantagem consumir uma grande quantidade de memória de armazenamento devido à redundância de informações guardadas Sempre que é solicitado o acesso aos dados pelo usuário o NameNode procura por todos os DataNodes onde esses dados estão contidos e fornece o primeiro que está em funcionamento Esse funcionamento é monitorado através de pulsos enviados a partir dos DataNodes Quando o NameNode para de receber a pulsação de um DataNode assume que ele não está funcionando Nesse caso é realizada a verificação dos dados que estavam ali contidos e após é criada uma réplica deles No caso da identificação de um DataNode morto durante a solicitação de um usuário o NameNode busca o próximo nó em funcionamento para fornecer os dados enquanto a replicação do nó morto é realizada paralelamente sem interrupção do acesso aos dados Portanto no caso de falha de um dos nós os dados continuam altamente disponíveis para o usuário SHVACHKO et al 2010 Já o ponto de verificação e recuperação possibilita a reversão de modificações causadas no sistema até um determinado intervalo de tempo após a modificação ter sido realizada Isso funciona como um programa básico de texto por exemplo onde são feitas diferentes modificações mas há a opção de salvar o arquivo sem salvar e abrilo novamente com a versão do último salvamento Esse método é custoso e aumenta o tempo geral de execução do sistema pois as operações de reversão precisam voltar e verificar os últimos estágios consistentes que existem aumentando portanto o tempo de execução PATIL SONI 2013 Frameworks de armazenamento não estruturados 4 116 TÓPICOS ESPECIAIS EM ADS Para cada NameNode existem dois arquivos fsimage que armazena o ponto de verificação mais recente e log que é como um diário de alterações desde o ponto de verificação Quando o NameNode é inicializado ocorre uma união das alterações log com o ponto de verificação fsimage para criar um metadado atualizado do sistema de arquivos Então esse se torna o novo fsimage e um diário log é iniciado do zero partindo desse novo ponto Esse novo ponto de verificação é atualizado periodicamente A atualização periódica do log e sua cópia para o fsimage é realizada por um Namenode secundário Esse segundo NameNode é controlado por dois parâmetros de configuração dfsnamenodecheckpointperiod que define o tempo máximo entre dois pontos de verificação consecutivos que é de 1 hora por padrão e dfsnamenodecheckpointtxns que define o número exato de transações não verificadas no NameNode primário que forçará uma atualização do ponto de verificação mesmo que o tempo máximo não tenha sido atingido isto é por padrão 1 milhão APACHE HADOOP 201 O HDFS suporta uma distribuição hierárquica tradicional de arquivos que possibilita a criação de diretóriospastas e o armazenamento de arquivos dentro deles A permissão para esses arquivos e diretórios é similar ao modelo de interface portátil entre sistemas operacionais definido pelo Institute of Eletrical and Eletronic Engineers Nesse modelo de permissão é possível executar operações de leitura e gravação dos arquivos e cada arquivodiretório pertence a um proprietário e um grupo Embora as suas funcionalidades capacidades de distribuição integridade de dados e tolerância a falhas sejam excelentes o HDFS vem dividindo espaço com ferramentas de armazenamento em nuvem Isso ocorre porque o custo para armazenar na nuvem pode ser mais baixo em longo prazo possibilitando um aumento de volume de armazenamento muito mais rápido e econômico O HDFS e o Hadoop não são a mesma coisa O Hadoop é um ecossistema onde estão contidas diferentes aplicações para o processamento organização e armazenamento de grandes volumes de dados O HDFS faz parte desse ecossistema sendo um framework de armazenamento 5 Frameworks de armazenamento não estruturados Frameworks para Big Data UNIDADE 2 Frameworks de Armazenamento não Estruturados PARTE 4 117 2 Armazenamento em nuvem O armazenamento em nuvem é um serviço que surgiu em conjunto com a chamada computação em nuvem que corresponde a uma gama de recursos da tecnologia da informação que podem ser utilizados sob demanda sem a necessidade de uma estrutura física local robusta Além do armazenamento esses recursos incluem ambientes préconfi gurados para a criação de data lakes plataformas de análises de dados aprendizado de máquina dentre outros AWS 2020 Essa utilização sob demanda pode reduzir os custos físicos e operacionais das empresas além de poder apresentar maior segurança em relação a alguns sistemas de armazenamento físico Segundo o estudo realizado pela RightScale em 2018 com 997 represen tantes de empresas de pequeno médio e grande porte os principais serviços de armazenamento em nuvem utilizados naquele ano foram Amazon Web Service Microsoft Azure Google Cloud Storage e IBM Cloud conforme apresenta a Figura 2 Figura 2 Utilização da nuvem pública por empresas Fonte Adaptada de Right Scale 2018 Amazon S3 Amazon Web Services AWS é a plataforma de nuvem da empresa transna cional Amazon É a mais utilizada e abrangente do mundo com mais de 175 serviços completos em nuvem disponíveis para o usuário Além do maior Frameworks de armazenamento não estruturados 6 118 TÓPICOS ESPECIAIS EM ADS número de serviços a AWS também possui a infraestrutura global mais extensa com 69 zonas de disponibilidade em mais de 20 regiões geográfi cas que são conectadas por redes de baixa latência alta taxa de transferência e redundância Dentre os serviços oferecidos podem ser encontradas dez soluções de armazenamento com diferentes características e aplicações O serviço que mais se destaca para utilização em big data é o serviço de armazenamento simples Amazon S3 que é uma plataforma com alta durabilidade ajuste de escala possibilidade de disponibilização dos dados a partir de qualquer lugar com acesso à internet e que pode ser utilizada para arquivamento ativo computação sem servidor e backup de dados Outras plataformas do Amazon Web Service Além das plataformas de armazenamento também estão contidas na AWS plataformas mais complexas para o processamento de big data como AWS Lake Formation é um serviço que facilita a configuração de um data lake A partir dele é possível coletar catalogar limpar e classificar os dados além de proteger o acesso confidencial Amazon EMR é uma plataforma de big data nativa da nuvem que oferece suporte a 19 projetos de código aberto como Apache Spark Hive HBase Flink dentre outros Esses projetos podem ser combinados à escalabilidade dinâmica do Amazon EC2 e ao armazenamento escalável do Amazon S3 Essas e outras plataformas podem ser conhecidas e exploradas no site oficial de soluções da Amazon disponível no link a seguir AWS 201 httpsqrgopagelink187uX Segundo a empresa o S3 é líder em escalabilidade disponibilidade segu rança e desempenho frente a todas as outras soluções com esse propósito No serviço de armazenamento são disponibilizados recursos de gerenciamento de dados e configurações de controle de acesso aprimoradas para utilização comercial e organizacional Qualquer tipo ou volume de dados pode ser arma zenado utilizando o S3 de forma que não é necessário se preocupar em como o dado é armazenado podendo focar apenas na sua utilização Dentro do S3 existem diferentes classes de armazenamento de acordo com o padrão de acesso esperado para os dados S3 Standard que é o mais geral podendo armazenar qualquer dado e ser utilizado com frequência 7 Frameworks de armazenamento não estruturados Frameworks para Big Data UNIDADE 2 Frameworks de Armazenamento não Estruturados PARTE 4 119 Intelligenttiering utilizado para dados com padrão de acesso dinâmico Standard Infrequent Access e One Zone Infrequent Access que são reco mendados para dados de longa vida pouco acessados por fim o Glacier que é recomendado para arquivamento de dados Essa disponibilidade de opções ajuda a calcular o custo de utilização da plataforma sendo o S3 o serviço mais caro e Glacier o mais barato Amazon S3 fornece proteção aos objetos armazenados em um bucket com controle de versão Esse controle pode ser usado para restaurar versões mais antigas de um objeto no caso de corrupção ou exclusão mesmo que tenha sido realizada pelo usuário Microsoft Azure Storage O Azure é um serviço de armazenamento em nuvem da Microsoft que se caracteriza por ser altamente disponível seguro escalonável e redundante O armazenamento do Azure inclui blobs objetos do Azure DataLake Gen2 arquivos fi las e tabelas do Azure Uma assinatura do Azure pode hospedar até 100 contas cada uma com capacidade de armazenamento para 500 TB COLLIER SHAHAN 2015 Cada conta de armazenamento pode ser configurada com diferentes níveis de redundância localmente redundante que fornece alta disponibi lidade garantindo que três cópias de todos os dados sejam feitas de forma síncrona antes que uma gravação seja considerada bemsucedida fazendo com que eles fiquem disponíveis mesmo que um nó de armazenamento falhe redundância geográfica na qual existem três cópias síncronas dos dados na região principal para alta disponibilidade criando de forma as síncrona também três réplicas em uma região pareada para recuperação de desastres georedundante que é um armazenamento de leitura adequado para recuperação parcial de desastres Se houver um problema com a região principal é possível ter acesso no modo somente leitura à região empare lhada PETERSON 2016 O Azure pode ter redes virtuais e também pode ser conectado à rede corporativa Os requisitos de armazenamento podem ser tratados na categoria padrão e também na categoria premium A Microsoft possui 20 regiões dife rentes para o Azure em vários locais como Ásia Austrália Europa e Brasil MICROSOFT AZURE 201 Além do serviço de armazenamento em nuvem a plataforma também disponibiliza outros serviços para a construção de aplicações distribuídas como o SQL Azure Database Azure AppFabric Platform e uma API de gerenciamento e monitoração para aplicações colocadas Frameworks de armazenamento não estruturados 8 120 TÓPICOS ESPECIAIS EM ADS na nuvem Assim como a Amazon o Azure também oferece um serviço de data lake na nuvem O Azure Data Lake é baseado em Hadoop e em outras ferramentas do ecossistema MICROSOFT AZURE 201 Google Cloud Storage O Google Cloud Storage é uma solução de armazenamento do Google que está contida na Google Cloud Platform uma plataforma de ferramentas poderosas com diferentes propostas e aplicações para big data Além do armazenamento é possível utilizála para processamentos análises e arquivo Embora existam outras soluções dentro da plataforma como Drive Storage para Firebase Per sistent Disk e FileStore o Cloud Storage é o mais indicado pela empresa para armazenamento de um grande volume de dados não estruturados em nuvem O armazenamento no Cloud Storage é feito a partir de objetos de forma que cada objeto contém um arquivo estruturado ou não de qualquer formato Um grupo de objetos é chamado de intervalo e todos os intervalos ficam contidos em um projeto Dentro de cada projeto é possível conceder permissões dife rentes dos objetos para distintos usuários inclusive podendo deixálos livres para acesso de qualquer pessoa na internet Existem quatro diferentes tipos de armazenamento de acordo com o tempo de armazenamento e a frequência de acesso Standard adequado para dados que são acessados globalmente como veiculação em páginas e streaming Nearling ideal para dados que serão lidos ou modificados em média uma vez por mês Coldline ideal para dados que serão acessados no máximo uma vez por trimestre por fim o Archive em que o tempo mínimo de armazenamento é de 365 dias sendo indicado para backup e recuperação de desastres GOOGLE CLOUD 201 IBM Cloud Storage O IBM Cloud Storage é um serviço de armazenamento altamente escalável for necido pela IBM Assim como os outros serviços apresenta diferentes classes de armazenamento visando atender diferentes necessidades do usuário com custos distintos entre elas Nesse caso existem cinco tipos Standard para cargas de trabalho ativas Vault para aqueles dados acessados em uma frequência menor Cold Vault para os dados muito pouco acessados Flex para cargas de trabalho dinâmicas e Archive para retenção de dados por longos períodos como backups O IBM Cloud Object Storage é a solução do mercado com menor custo para o armazenamento ativo de dados Devido às tecnologias empregadas na plataforma é possível reduzir o custo de armazenamento em até 54 sobre 9 Frameworks de armazenamento não estruturados Frameworks para Big Data UNIDADE 2 Frameworks de Armazenamento não Estruturados PARTE 4 121 os sistemas de gerações anteriores e obter até 150 de melhor desempenho O tipo de armazenamento padrão Standard é utilizado para as cargas de trabalho ativas que necessitam de alto desempenho e baixa latência onde os dados precisam ser acessados frequentemente Nesse tipo de armazenamento ao invés de ser utilizada a replicação de dados a fim de obter alta disponibilidade é utilizada uma tecnologia de codificação de eliminação COYNE et al 2018 A estrutura simples e estável desse storage possibilita o escalonamento de forma flexível sendo ideal para dados não estruturados O armazenamento distribuído e acessível por API pode ser integrado diretamente aos aplicativos e essa integração simples torna mais fácil estabelecer um fluxo de aplicativos nativos em cloud possibilitando uma forma eficiente e rápida de atualizar componentes de aplicativos É possível estimar os gastos de um armazenamento em nuvem de forma rápida fácil e gratuita Confira a seguir os links de calculadoras de custos de cada uma das soluções apresentadas Calculadora de custos da Amazon AWS 2020 httpsqrgopagelinkd1dTe Calculadora de custos da Google GOOGLE CLOUD 2020 httpsqrgopagelinkbnNLX Calculadora de custos da Azure MICROSOFT AZURE 2020 httpsqrgopagelinkqK2Um Calculadora de custos da IBM IBM CLOUD 2019 httpsqrgopagelinkcyf7e Frameworks de armazenamento não estruturados 10 122 TÓPICOS ESPECIAIS EM ADS HDFS onpremise e armazenamento em nuvem Para comparar as soluções de armazenamento apresentadas é preciso avaliar o custo total de aquisição e operação de cada uma delas para um mesmo volume de dados No exemplo a seguir será utilizado o volume de 100 TB O custo total é a soma de investimentos necessários para que a solução seja adquirida e mantida incluindo custo de trabalho humano e estrutura De acordo com o relatório da IDC liberado pela Amazon utilizar o armazenamento do AWS resulta em uma economia de 643 em comparação à implantação dos mesmos recursos em ambientes locais Já a alteração do armazenamento ativo do HDFS para o Google Cloud Storage geralmente tem um custo total de propriedade 57 menor O custo de armazenamento de 1 TB correspondia a 206 por mês em 2017 segundo o levantamento realizado por Xin Rosen e Pistor 2017 Para o exemplo de 100 TB esse custo alcança o montante de 20600 Para esse mesmo volume de armazenamento a calculadora online de custos mensais da Amazon para a América do Sul na região de São Paulo calculou o valor mensal de 4070 Já o serviço do Google Cloud Storage custaria 3584 ao mês O Azure por sua vez teria um valor igual a 3279 e o IBM Cloud Storage por fim acabou sendo o mais barato com um custo de 3000 TBmês Diante desses valores de custo e levando em consideração que o armazena mento em nuvem possui outras vantagens como alta elasticidade capacidade computacional distribuição global e integração com diferentes ferramentas de processamento e análise esse tipo de armazenamento parece apresentar um maior custobenefício que o HDFS local além de possibilitar que as empresas estejam sempre em armazenamento sem que seja necessário se preocupar com a estrutura física e rotinas de manutenção O Quadro 1 apresenta uma comparação entre os diferentes serviços 11 Frameworks de armazenamento não estruturados Frameworks para Big Data UNIDADE 2 Frameworks de Armazenamento não Estruturados PARTE 4 123 Vantagens Desvantagens HDFS Alta disponibilidade e tolerância a falhas no armazenamento local Altamente custoso se compa rado aos serviços de armazena mento em nuvem Amazon S3 Maior distribuição global com mais de 60 zonas de disponibilidade Maior custo de armazenamento TBmês em nuvem Microsoft Azure Funciona perfeitamente durante a mudança de ambiente Requer gerenciamento e manutenção Só suporta aplicações Windows Google Cloud Alto acesso à informação atra vés das ferramentas webbased Google Menor número de serviços de processamento associados à plataforma IBM Cloud Menor custo de armazenamento de TBmês em nuvem Menor segurança na nuvem Não possui período gratuito inicial Quadro 1 Vantagens e desvantagens de soluções de armazenamento 3 Operações sobre dados não estruturados Para que todo banco de dados funcione bem é necessário ter operações bá sicas de manipulação de dados como operações de leitura e gravação No HDFS essas operações são realizadas a partir do NameNode Para gravar um dado é preciso interagir com o NameNode que fornece o endereço dos DataNodes onde ocorrerá a gravação Para ler um arquivo o NameNode verifi ca os privilégios necessários e fornece o endereço dos DataNodes em que o dado está armazenado Para gravar um dado é executado um comando que cria um novo arquivo sem blocos associados a ele no espaço do NameNode Então verificações são executadas pelo NameNode para garantir que esse dado de fato ainda não existe No caso de existir é necessária uma permissão para substituição Em seguida o NameNode determina um local para gravar os blocos onde são escritos pelo cliente Após a gravação dos dados o HDFS começa a replicar os blocos em outros DataNodes criando várias réplicas Ao final da gravação existe um pipeline e pelo menos três cópias de blocos diferentes conforme a lista a seguir Frameworks de armazenamento não estruturados 12 124 TÓPICOS ESPECIAIS EM ADS 1 O cliente inicia a operação de gravação chamando o método create 2 O objeto se conecta ao NameNode usando a chamada RPC Remote Procedure Call e inicia a nova criação de arquivo Se o arquivo já existir ou o cliente não tiver permissão suficiente para criar um arquivo será emitido um alerta de erro para o cliente Caso contrário a operação será bemsucedida e um novo registro para o arquivo será criado pelo NameNode 3 Depois que um novo registro no NameNode é criado um objeto é re tornado ao cliente O cliente usa para gravar dados no HDFS Enquanto o cliente continua gravando dados pacotes continuam sendo criados Esses pacotes são enfileirados 4 É escolhida através do NameNode a alocação de novos blocos es colhendo assim DataNodes desejáveis para serem usados para replicação 5 O processo de replicação começa criando um pipeline usando DataNodes 6 Todo DataNode em um pipeline armazena o pacote recebido por ele e encaminha para o segundo DataNode em um pipeline 7 Outra fila Ack Queue é mantida pelo DFSOutputStream para arma zenar pacotes que aguardam confirmação do DataNodes 8 Depois que o reconhecimento de um pacote na fila é recebido de todos os DataNodes no pipeline ele é removido da Fila de confir mação No caso de qualquer falha do DataNode os pacotes dessa fila são usados para reiniciar a operação 9 Depois que um cliente finaliza a gravação dos dados ele chama um método close 10 Ocorre a liberação dos pacotes de dados restantes no pipeline seguido pela espera pelo reconhecimento 11 Depois que uma confirmação final é recebida o NameNode é contatado para informar que a operação de gravação de arquivo está concluída Ao enviar uma solicitação de leitura ao NameNode é realizada uma verificação de permissão de acesso Se o cliente tiver permissão àquele dado o endereço dos DataNodes que contêm aqueles dados é liberado e pode ser lido pelo cliente Agora o cliente começa a ler os blocos usando uma API e os dados são transmitidos continuamente para o cliente Após atingir o final de um bloco a conexão é fechada Confira o passo a passo a seguir 13 Frameworks de armazenamento não estruturados Frameworks para Big Data UNIDADE 2 Frameworks de Armazenamento não Estruturados PARTE 4 125 1 Um cliente inicia a solicitação de leitura chamando o método open do objeto FileSystem 2 Este objeto se conecta ao NameNode usando RPC e obtém informações de metadados como os locais dos blocos do arquivo Observe que esses endereços são os primeiros blocos de um arquivo 3 Em resposta a essa solicitação de metadados os endereços dos Data Nodes com uma cópia desse bloco são retornados 4 Depois que os endereços de DataNodes são recebidos um objeto é retornado ao cliente O cliente chama o método read que faz com que se estabeleça uma conexão com o primeiro DataNode com o primeiro bloco de um arquivo 5 Os dados são lidos na forma de fluxos em que o cliente chama o mé todo read repetidamente Esse processo de operação read continua até atingir o final do bloco 6 Quando o final de um bloco é atingido é fechada a conexão e em seguida ocorre a localização do próximo DataNode para o próximo bloco 7 Depois que um cliente conclui a leitura ele chama um método close Dados não estruturados podem ser perfeitamente armazenados local mente ou em nuvem mas algumas outras características requeridas para armazenamento devem ser levadas em consideração Algumas delas são disponibilidade de infraestrutura custos elasticidade e disponibilidade de acesso Em um cenário onde a infraestrutura já está estabelecida custo não é um problema não há previsão de aumentar o volume armazenado e não há necessidade de acesso remoto aos dados de forma simplificada Portanto o HDFS onpremise pode ser uma boa opção Caso contrário as soluções de armazenamento em nuvem possuem ferramentas que solucionam todos esses pontos Com a computação em nuvem os dados não estruturados podem ser ar mazenados de forma eficaz e elástica de modo praticamente infinito Além disso não é necessário se preocupar com infraestrutura ou manutenção local sendo também possível ter uma alta disponibilidade e facilitação de acesso dos dados por um custo até sete vezes mais reduzido do que outras alternativas como o HDFS Escolher o armazenamento de uma empresa é uma decisão importante que precisa ser tomada com cautela e atenção De qualquer forma é sempre possível fazer modificações e testar novas soluções até encontrar a mais adequada ao tipo de negócio Frameworks de armazenamento não estruturados 14 126 TÓPICOS ESPECIAIS EM ADS APACHE HADOOP The Apache Hadoop project develops opensource software for reliable scalable distributed computing Apache Hadoop s l 201 Disponível em httphadoopapacheorg Acesso em 16 fev 2020 ASF INFRABOT Powered by Confluence s l 9 jul 2019 Disponível em httpscwiki apacheorgconfluencedisplayHADOOP2PoweredBy Acesso em 15 fev 2020 AWS Data lakes e análises na AWS AWS s l 201 Disponível em httpsawsamazon comptbigdatadatalakesandanalytics Acesso em 16 fev 2020 AWS Overview of Amazon web services S l AWS 2020 Disponível em https d1awsstaticcomwhitepapersawsoverviewpdf Acesso em 16 fev 2020 AWS Simple monthly calculator AWS s l 2020 Disponível em httpscalculator s3amazonawscomindexhtmllng Acesso em 16 fev 2020 COLLIER M SHAHAN R Fundamentals of Azure Microsoft Azure essentials Redmond Microsoft Corporation 2015 COYNE L et al IBM private public and hybrid cloud storage solutions 5th ed S l Red books 2018 Disponível em httpwwwredbooksibmcomredpaperspdfsredp4873 pdf Acesso em 16 fev 2020 GOOGLE CLOUD Cloud Storage Google Cloud s l 201 Disponível em https cloudgooglecomstorage Acesso em 16 fev 2020 GOOGLE CLOUD Google cloud platform pricing calculator Google Cloud s l 2020 Disponível em httpscloudgooglecomproductscalculatoridae05eb837e70 4f9ca5b3671b01ea4e00 Acesso em 16 fev 2020 HANSON J Uma introdução ao Hadoop distributed file system IBM s l 30 ago 2012 Disponível em httpswwwibmcomdeveloperworksbrlibrarywaintrohdfsindex html Acesso em 16 fev 2020 IBM CLOUD Cloud object storage IBM Cloud s l 2019 Disponível em httpscloud ibmcomcatalogservicescloudobjectstorage Acesso em 16 fev 2020 MICROSOFT AZURE Calculadora de preço Microsoft Azure s l 2020 Disponível em httpsazuremicrosoftcomptbrpricingcalculatorstorage4491fcd3b2a84738 b4563c331329107c Acesso em 16 fev 2020 MICROSOFT AZURE Introdução ao Azure Microsoft Azure s l 201 Disponível em httpsdocsmicrosoftcomptbrazure Acesso em 16 fev 2020 PATIL V S SONI P D Hadoop skeleton fault tolerance in Hadoop clusters Interna tional Journal of Application or Innovation in Engineering Management s l v 2 n 2 p 247250 Feb 2013 Disponível em httpspdfssemanticscholarorge31b59b5f6e 0c13bd3fe5ced614653bf3aea260epdf Acesso em 16 fev 2020 15 Frameworks de armazenamento não estruturados Frameworks para Big Data UNIDADE 2 Frameworks de Armazenamento não Estruturados PARTE 4 127 Os links para sites da web fornecidos neste capítulo foram todos testados e seu fun cionamento 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 PETERSON N Get started guide for Azure IT operators S l Microsoft 2016 Disponível em httpsdocsmsftpdfsblobcorewindowsnetguidesazureazureopsguidepdf Acesso em 16 fev 2020 RIGHT SCALE RightScale 2018 state of the cloud report data to navigate your multicloud strategy S l s n 2018 Disponível em httpswwwsusecommediareportrights cale2018stateofthecloudreportpdf Acesso em 16 fev 2020 SHVACHKO K et al The hadoop distributed file system In SYMPOSIUM ON MASSIVE STORAGE SYSTEMS AND TECHNOLOGIES 26 2010 Incline Village NV Annals Incline Village NV IEEE 2010 p 110 Disponível em httpsstorageconferenceus2010Papers MSSTShvachkopdf Acesso em 16 fev 2020 WHITE T Hadoop the definitive guide 3th ed Sebastopol OReilly Media Inc 2012 XIN R ROSEN J PISTOR K Top 5 reasons for choosing S3 over HDFS Databricks s l 31 May 2017 Disponível em httpsdatabrickscomblog20170531top5reasons forchoosings3overhdfshtml Acesso em 16 fev 2020 Frameworks de armazenamento não estruturados 16 ENCERRA AQUI O TRECHO DO LIVRO DISPONIBILIZADO PELA SAGAH PARA ESTA PARTE DA UNIDADE PREZADO ESTUDANTE Se você encontrar algum problema nesse material entre em contato pelo email eadproducaounilasalleedubr Descreva o que você encontrou e indique a página Lembrese a boa educação se faz com a contribuição de todos CONTRIBUA COM A QUALIDADE DO SEU CURSO Av Victor Barreto 2288 Canoas RS CEP 92010000 0800 541 8500 eadproducaounilasalleedubr