Baixe o app para aproveitar ainda mais
Prévia do material em texto
/ Big Data Aula 8: Framework Hadoop Apresentação Continuaremos falando sobre processamento em sistemas distribuídos, apresentando uma visão geral dos conceitos essenciais de computação distribuída utilizados pelo Hadoop para realizar o gerenciamento de recursos em cluster típicos de Big Data. Abordaremos o uso de framework de alto nível para realizar a captura, armazenamento e processamento em grande conjunto de dados distribuídos em cluster e gerenciados pelo Hadoop. Objetivos Identi�car as vantagens do uso do Hadoop para processamento de dados distribuídos; Examinar os benefícios do gerenciamento de recursos em cluster do Hadoop; Descrever algumas ferramentas do ecossistema Hadoop. Introdução Os projetos de Big Data envolvem grande volume de dados com tendência de crescimento exponencial, uma variedade de dados podendo ser estruturados, semiestruturados e não estruturados que devem ser analisados em velocidade adequada para proverem valor para o negócio. Geralmente, para acomodar os dados de Big Data necessita-se de várias máquinas e para analisá-los torna-se imprescindível que elas operem em conjunto. / Para o processamento de conjuntos de dados que excedem a capacidade de uma única máquina, torna-se necessária a implementação de soluções distribuídas, capazes de dividir uma grande tarefa em outras menores, executando-as paralelamente em um conjunto de nós. Entretanto, o desenvolvimento dessas soluções é complexo. Além da lógica do problema, deve-se implementar mecanismos relacionados à distribuição dos dados e das tarefas, como alocação de máquinas, escalonamento de tarefas, balanceamento de carga, comunicação entre máquinas, tolerância a falhas, entre outros aspectos. A implementação incorreta de algum desses mecanismos pode impactar diretamente o desempenho da solução. O framework Hadoop surgiu da necessidade de lidar com a operacionalização desse processamento distribuído e continuar atendendo aos Vs (volume, variedade, velocidade, veracidade e valor) típicos de Big Data. A ideia consiste em prover uma abstração dos mecanismos existentes em ambiente distribuído para permitir que os projetos de Big Data se concentrem no desenvolvimento da lógica para análise dos dados. Para tal, foi desenvolvido o framework open source Hadoop, em linguagem de programação Java, inspirado na publicação de duas soluções proprietárias do Google: O sistema de arquivos distribuído Google File System (GFS) e o modelo de programação distribuída MapReduce. Saiba mais Ambas as soluções eram utilizadas para dar suporte ao armazenamento e processamento do grande volume de dados que o Google manipulava. O estudo do funcionamento dessas duas soluções deu origem ao Hadoop Distributed File System (HDFS), para gerenciamento dos dados armazenados em discos no cluster, e o Hadoop MapReduce, para gerenciamento de carga de jobs. Esses dois elementos foram a base da primeira versão do Hadoop. Essa estrutura permitia o processamento distribuído muito e�ciente para cargas de trabalho de larga escala em lote (batch). Porém, fazia uso intensivo de E/S e enfrentava limitações signi�cativas para dar suporte a análises interativas, processamento de grafos, aprendizado de máquina e outros algoritmos que usem memória intensivamente. Comentário Para tratar essas limitações, na versão 2 foi desacoplado o gerenciamento da carga de trabalho do gerenciamento de recursos através da introdução do YARN (Yet Another Resource Negotiator). / Com o YARN, várias aplicações podem compartilhar um serviço de gerenciamento comum e centralizado de recursos, além de possibilitar o processamento de jobs genéricos e gerenciamento de recursos no YARN. Com isso, atualmente o Hadoop não é mais um framework unicamente centrado no MapReduce. Essas vantagens levaram à proliferação do uso do Hadoop por grandes organizações, como Yahoo, Facebook e IBM, que contribuíram (e muitas delas continuam contribuindo) para sua rápida evolução, tanto em aperfeiçoamento das funcionalidades quanto em adição de novas. Como resultado, outros subprojetos foram criados para trabalhar em conjunto com os componentes principais do Hadoop, criando um ecossistema com diversas soluções de manipulação de dados. Atualmente, a base das distribuições Hadoop é da comunidade Apache. Entretanto, diversas empresas criaram um ecossistema de negócios baseado em distribuições especí�cas do Hadoop, como Cloudera e DataStax. Apesar do código base ser o mesmo, cada distribuição tem características diferenciadas, por exemplo, a distribuição da DataStax, chamada de Brisk, substituiu o HDFS por um sistema de arquivos distribuídos baseados no software NoSQL Cassandra, chamado agora de Cassandra FS. Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online Arquitetura do Hadoop Clique no botão acima. / A estrutura do Hadoop permite o processamento distribuído de grandes conjuntos de dados em clusters de computadores usando modelos de programação simples. Ele foi projetado para ser dimensionado em servidores únicos ou em milhares de máquinas, cada uma oferecendo processamento e armazenamento local. Em vez de depender de hardware para fornecer alta disponibilidade, o próprio framework foi projetado para detectar e tratar falhas na camada de aplicativo, oferecendo um serviço altamente disponível em cima de um cluster de computadores, cada um deles sujeito a falhas. O Hadoop disponibiliza armazenamento e acesso a dados distribuídos por meio do HDFS, bem como um framework para recursos e escalonamento através do YARN. Em conjunto, o HDFS e o YARN oferecem um mecanismo para fazer análise distribuída em conjuntos de dados extremamente grandes. Atualmente, esses dois principais componentes fornecem a base para efetuar processamentos em escala, distribuindo o processamento envolvendo um conjunto de dados gigantesco entre várias máquinas que trabalham simultaneamente em suas próprias porções de dados. O HDFS gerencia os dados armazenados em discos no cluster e o YARN atua como um gerenciador de recursos do cluster, alocando recursos computacionais para aplicações que queiram realizar um processamento distribuído. O HDFS e o YARN expõem uma interface de programação de aplicativos (Application Programming Interface - API) que abstrai dos desenvolvedores os detalhes de baixo nível de administração do cluster. O YARN e o HDFS são implementados por vários processos daemon, isto é, um software que executa em segundo plano e não exige entradas de usuário. Os processos do Hadoop são serviços, o que signi�ca que eles executam o tempo todo em um nó do cluster, aceitam entradas e entregam saídas por meio da rede. Cada um desses processos executa em sua própria JVM (Java Virtual Machine), portanto cada daemon tem sua própria alocação de recursos do sistema e é administrado de forma independente pelo sistema operacional. Um conjunto de máquinas executando HDFS e YARN é conhecido como um cluster, e as máquinas individuais são chamadas de nós. Um cluster pode ter um único nó ou milhares deles, mas todos os clusters escalam horizontalmente, o que signi�ca que, à medida que são adicionados mais nós, o cluster se expandirá tanto em capacidade quanto em desempenho de forma linear. Um cluster de máquinas funciona de forma coordenada para minimizar o volume de tráfego de rede no cluster, visando principalmente manter os dados locais ao processamento solicitado. As máquinas no cluster são gerenciadas e detalhes de rede e arquitetura são resolvidos de forma que, se um componente falhar, ele não deverá resultar na falha de todo o sistema e perda de dados. O sistema deve se degradar de forma elegante, passando para um estado com desempenho reduzido. Quando o componente que falhou se recuperar, ele deverá ser capaz de se juntar novamente ao sistema. Caso seja necessária a adição de mais dados ou processamento, deve resultar em um declínio no desempenho, e não em uma falha. Consequentemente, o aumento de recursos deve resultar em aumento proporcional da capacidade. Um processamentogeralmente é chamado de job. As aplicações podem ser compostas por um job ou por um grafo direcionado acíclico (Directed Acyclic Graph – DAG) de jobs. Os jobs são escritos em alto nível, sem preocupação com programação de rede, tempo ou infraestrutura de baixo nível, permitindo que os desenvolvedores se concentrem nos dados e no processamento, e não nos detalhes da programação distribuída. Os jobs são divididos em tarefas, e cada nó executa a tarefa em um único bloco de dados. Para tal, os dados são armazenados em blocos de tamanho �xo, geralmente de 128 MB, e cada bloco é duplicado várias vezes no sistema para oferecer redundância e segurança aos dados. / Os jobs são tolerantes a falhas, geralmente por meio de redundância de tarefas, de modo que, se um único nó ou tarefa falhar, o processamento �nal não estará incorreto nem incompleto. Os blocos são distribuídos imediatamente quando os dados são adicionados ao cluster e armazenados em vários nós. Os nós preferencialmente processam os dados armazenados localmente a �m de minimizar o tráfego na rede. Com isso, o sistema minimiza o volume de tráfego de rede entre os nós de forma transparente. Cada tarefa deve ser independente, e os nós não devem precisar se comunicar uns com os outros durante o processamento para garantir que não haja dependências entre processos que possam resultar em um deadlock. Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online Gerenciamento de recursos Para que toda essa estrutura funcione, o cluster é administrado de forma centralizada para oferecer escalabilidade e abstrair os detalhes de programação de baixo nível do cluster. Clique nos botões para ver as informações. Existem os nós mestres que executam serviços de coordenação dos nós trabalhadores do Hadoop e, geralmente, são os pontos de entrada para o acesso ao cluster. Nó mestre Os nós trabalhadores executam serviços demandados pelos nós mestres, tais como armazenar e recuperar dados e executar uma aplicação. O processamento distribuído é executado por meio da paralelização dos serviços nos nós trabalhadores que representam a maioria dos computadores no cluster. Nó trabalhador O tamanho do cluster deve ser relativo ao volume de processamento esperado ou de armazenagem de dados, pois os clusters escalam horizontalmente. Em geral, um cluster de 20 a 30 nós trabalhadores e um único mestre é su�ciente para executar vários jobs simultaneamente em conjuntos de dados na ordem de dezenas de terabytes. Saiba mais Para implantações mais signi�cativas, com centenas de nós, cada mestre exige sua própria máquina. Em clusters com milhares de nós, vários nós mestres são utilizados para coordenação. Os recursos do cluster são administrados pelo YARN por meio de dois tipos de serviços mestres e um tipo de serviço trabalhador. / Para executar uma aplicação ou job, inicialmente devem solicitar recursos ao ResourceManager, que atribui um ApplicationMaster especí�co da aplicação enquanto estiver sendo executada. O ApplicationMaster monitora a execução do job, enquanto o ResourceManager monitora o status dos nós, e cada NodeManager individual cria contêineres e executa tarefas dentro deles. Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online Desenvolvendo projetos de Big Data com Hadoop O ecossistema do Hadoop possui uma arquitetura e um conjunto de ferramentas que oferecem suporte à implementação de projetos de Big Data. Com o Hadoop, pode-se capturar dados de diversas fontes e reuni-los no cluster, propiciando um ambiente de armazenamento distribuído com escalonamento horizontal e fornecendo uma infraestrutura propícia para realizar processamento desses dados. Saiba mais Existem ferramentas para preparação dos dados para análise, outras para análise propriamente dita e de visualização de dados. Apesar de o framework ser desenvolvido em Java, há recursos que permitem o desenvolvimento de processos e algoritmos de aprendizado de máquina em R e Python. / O seu sistema de arquivo distribuído oferece �exibilidade para viabilizar a acomodação do volume e variedade dos dados sem restrições e com alto grau de durabilidade. Isso possibilita que dados brutos, não processados, de uma variedade de fontes, tanto em forma estruturada quanto não estruturada, sejam armazenados em conjunto, sem muita organização, constituindo um lago de dados (data lake). Esse lago de dados vai se expandindo formando um verdadeiro repositório central de dados no estilo WORM (Write Once, Read Many), isto é, os dados são escritos uma vez e lidos várias vezes. Tal mecanismo proporciona dados con�áveis para serem combinados, �ltrados, transformados, estruturados ou reestruturados de forma conveniente para serem analisados sob várias perspectivas. Esse adiamento da organização dos dados e da de�nição, de esquemas para o momento do processamento, leva à agilidade para fazer novos processamentos e análises à medida que os requisitos mudarem ou que novos dados sejam inseridos. Para demonstrar as vantagens do uso do ecossistema Hadoop ao longo dessa seção, será demonstrada a captura de dados com Apache Sqoop e Apache Flume, o armazenamento de dados estruturados do Apache Hive, o processamento em lote com Hadoop MapReduce e o processamento em tempo real com Apache Storm. Atenção O uso dessas ferramentas requer que o Hadoop esteja previamente instalado, con�gurado e com os processos de HDFS e YARN executando. Apache Sqoop No início de projetos de Big Data, possivelmente são identi�cados dados estruturados armazenados em sistemas de banco de dados relacionais que devem ser utilizados para análise. No ecossistema do Hadoop, há diversas formas de realizar a captura desses dados e o Sqoop automatiza a maior parte desse processo. A ferramenta foi projetada para transferir dados entre bancos de dados relacionais e o Hadoop via JDBC (Java Database Connectivity), conector de banco de dados do Java. O Sqoop importa dados de bancos de dados relacionais, como Oracle, PostgreSQL e MySQL para HDFS; e exporta do sistema de arquivos Hadoop para bancos de dados relacionais. Exemplo Suponha que uma Livraria Virtual mantenha o registro de suas vendas em um banco de dados MySQL através das tabelas Cliente, Livro e Venda, conforme modelo de dados apresentado na �gura a seguir. Os dados dessas tabelas podem ser capturados utilizando o recurso de importação do Sqoop. / Modelo de dados da Livraria Virtual. Fonte: Autor Na importação, as tabelas individuais do banco de dados relacional são transformadas em arquivos do HDFS. Cada linha de uma tabela corresponde a um registro no HDFS. Todos os registros são armazenados em arquivos que podem ser arquivos de texto delimitados, com vírgulas ou tabulações separando cada campo, ou arquivos binários contendo dados de registro serializados. Saiba mais Para realizar essa importação, previamente deve ser instalada e con�gurada uma versão do Sqoop compatível com a versão de Hadoop do cluster, e executar o comando de importação no diretório de trabalho do Sqoop. Supondo que o banco de dados MySQL da Livraria Virtual (LivrariaVirtualbd) estivesse na mesma máquina que o Hadoop, a importação dos dados da tabela Cliente poderia ser feita através do seguinte comando: sqoop import --connect jdbc:mysql://localhost/LivrariaVirtualbd \ --username dbuser --password 12345 --table Cliente --target- dir /queryresult \ Esse comando de importação (import), faz a conexão via JDBC (connect jdbc:mysql) com o banco de dados LivrariaVirtualbd (localhost/LivrariaVirtualbd) através do usuário (username) dbuser e senha (password) 12345 para importar a tabela (table) Cliente para o diretório (target-dir) queryresult do HDFS. De forma inversa, na exportação, um arquivo HDFS é fornecido como entrada para o Sqoop exportar como uma tabela de um banco de dados relacional. No momento da exportação, cada registro do arquivo HDFS se torna uma linha da tabela com seus correspondentes atributos. Por exemplo, o arquivo cliente que foi armazenado no diretório queryresultpode ser exportado com o seguinte comando: sqoop export --connect jdbc:mysql://localhost/LivrariaVirtualbd \ --username dbuser -password 12345 --table Cliente --export-dir /queryresult \ Os comandos de importação e exportação têm outras opções de argumentos, tais como especi�car delimitadores especí�cos e caracteres de escape para a representação dos dados baseada em arquivo, especi�car o formato de arquivo, bem como selecionar um intervalo de linhas ou colunas para importação ou exportação. Comentário Complementarmente, o Sqoop tem alguns outros comandos que permitem a exploração dos dados. Essas características fazem do Sqoop uma ferramenta de alto nível para captura de dados estruturados. / Apache Flume Além dos dados estruturados oriundos de banco de dados relacionais, também pode haver outros tipos de dados que necessitam ser capturados. Os dados no formato Avro, log4j, syslog, Http POST, com um corpo JSON, ou os dados disponíveis em um processo local podem ser capturados usando o framework Flume. Ele foi desenvolvido para coletar, agregar e mover grandes volumes de várias fontes distintas para o Hadoop. Através de um método uni�cado, porém, �exível, lida com dados díspares com mecanismos de tolerância a falhas e uma arquitetura baseada em �uxos de dados. Na arquitetura Flume, cada �uxo de dados é tratado por um processo da JVM (Java Virtual Machine), denominado agente Flume, constituído de três componentes con�guráveis: A fonte (source), o canal (channel) e o sorvedouro (sink). A con�guração do agente Flume é armazenada em um arquivo de con�guração local(.conf). Comentário Este é um arquivo de texto que segue o formato de arquivo de propriedades Java. Nele se con�gura a fonte Flume que tem o papel de �car aguardando os dados de uma ou mais fontes de dados externas e, quando eles chegam, os consome, isto é, os coloca no canal. Esse canal atua como uma �la de armazenagem que insere e guarda dados em buffers até que estejam prontos para serem lidos. O sink faz a leitura dos dados e os move do canal para um repositório de dados ou para outro agente Flume. Ao usar esse paradigma fonte-canal-sink, pode-se construir facilmente um �uxo de dados simples com um agente Flume para consumir dados de um arquivo e escrevê-los em um repositório de dados do Hadoop como o HDFS. Um uso muito comum do Flume é a coleta de dados de log, por exemplo, coletar dados de log do servidor Web de uma Livraria Virtual e agregá-los no HDFS para consulta ou análise futura. Para exempli�car, vamos criar um agente Flume (agenteLivraria) e con�gurar a sua fonte (f1) para consumir os dados do log que vão sendo armazenados no diretório (spooldir) /temp/logLivrariaVirtual. Essa fonte observará o diretório em busca de novos arquivos para os colocar no canal (ch1). Após um arquivo ser totalmente copiado para o canal, o sink (s1) escreve o arquivo do canal no diretório /user/hadoop/ do HDFS. Veja a seguir a con�guração desse agente Flume: agenteLivraria.sources=r1 agenteLivraria.sources.r1.channels=ch1 agenteLivraria.sources.r1.type=spooldir agenteLivraria.sources.r1.spoolDir=/tmp/logLivrariaVirtual agenteLivraria.channels = ch1 agenteLivraria.channels.ch1.type=FILE agenteLivraria.sinks=s1 agenteLivraria,sinks.s1.type=hdfs agenteLivraria.sinks.s1.channel=ch1 agenteLivraria.sinks.s1.hdfs.path=/user/hadoop/ / Essa con�guração do agente Flume deve ser salva em um arquivo de con�guração local (agenteLivraria.conf) para ser executado na linha de comando através do seguinte comando: �ume -ng agent -n agenteLivraria –conf . -f agenteLivraria.conf Esse exemplo mostrou um agente Flume com uma fonte, um canal e um sink. Há também a possibilidade de o agente Flume ser con�gurado para ter diversas fontes, canais e sinks, e �uxos de dados podem ser compostos por múltiplos agentes encadeados. Apache Hive Ao usar um lago de dados para armazenar dados brutos, não processados, podemos conseguir uma �exibilidade e uma agilidade consideráveis em nossas capacidades analíticas de selecionar e agregar vários tipos de dados. Contudo, há muitos casos de uso em que, antes de efetivamente analisar os dados, faz-se necessário um pouco de estrutura e ordem. Nesses casos, pode ser usado o Apache Hive para criar esquemas estruturados de dados. O Hive é um framework com suporte a muitas instruções SQL, através do Hive Query Language (HQL), que permite associar esquemas estruturados a dados do HDFS, consultar e analisar esses dados. O Hive tem possibilitado aos desenvolvedores �uentes em SQL tirar proveito dos benefícios do Hadoop sem exigir que eles aprendam Java ou conheçam a API nativa do MapReduce. Saiba mais Os comandos do Hive e as consultas do HQL são compilados em uma série de operações de HDFS ou jobs de MapReduce que então são executados em um cluster do Hadoop. O Hive oferece alta escalabilidade e elevado throughput, sendo apropriado para cargas em lote para realização de processamento de transações online (Online Analytical Processing – OLAP). O acesso às funcionalidades do Hive é feito através de uma interface de linha de comando (Comand-Line Interface – CLI) prática que pode ser inicializada após a instalação e con�guração do Hive, por meio do seguinte comando no prompt do Linux: cd $HIVE_HOME. / Após a inicialização da CLI do Hive, o prompt hive> será exibido e a ferramenta estará pronta para ser utilizada. Para demonstrar o funcionamento do Hive, vamos criar uma base de dados e uma tabela, carregando-a com dados de um arquivo do HDFS. Iniciamos pela criação de uma base de dados chamada exemploHive através do comando “CREATE DATABASE exemploHive;” no Hive. Para consultar os dados de cliente importados para o HDFS usando Sqoop (subseção 4.1), criamos uma tabela cliente na base de dados exemploHive com a estrutura apresentada na tabela usada como exemplo anteriormente. Primeiramente, o CLI deve ser inicializado (na linha de comando digitar cd $HIVE_HOME) e depois utilizar os seguintes comandos: hive> USE exemploHive; hive> CREATE TABLE Cliente (ID int; CPF string, Nome string, Endereco string, Telefone string); Para popular a tabela Cliente com o arquivo do HDFS disponível no diretório queryresult, deve ser executado o seguinte comando: hive> LOAD DATA INPATH 'queryresult/Cliente' OVERWRITE INTO TABLE Cliente; Com os dados carregados na tabela Cliente, pode-se realizar várias consultas, como, por exemplo, saber a quantidade de clientes usando o seguinte comando: hive> SELECT COUNT(1) FROM Cliente; Ao criar novas tabelas e populá-las com dados de arquivos do HDFS, é possível realizar consultas que combinem dados de diferentes tabelas, selecionem campos e manipulem os dados da forma necessária para prepará-los para análise. Além disso, usando o próprio HQL, podem ser feitas análises signi�cativas nos dados. Comentário Apesar das vantagens do uso do HQL, o Hive usa o HDFS projetado para ser WORM, e o MapReduce que realiza processamento em lote. Sendo assim, as operações realizadas no Hive implicam em uma latência elevada por causa do overhead necessário para gerar e iniciar os jobs no cluster. / Caso esse overhead seja um problema, em vez de executar consultas complexas nos dados distribuídos, pode-se fazer transformações e �ltros primários necessários no Hadoop, e exportar para um banco de dados relacional através do Sqoop, realizando as consultas com agilidade. Outra opção é usar o HBase, um banco de dados NoSQL baseado em colunas, construído sobre o HDFS, e fornecer pesquisas e atualizações rápidas de registros em grandes tabelas. Hadoop MapReduce Clique no botão acima. Embora o YARN tenha permitido que o Hadoop se tornasse uma plataforma genérica de computação distribuída, o MapReduce foi o primeiro framework computacional para o Hadoop. No entanto, para muitos usuários do Hadoop, o MapReduce continua sendo o framework principal para muitas aplicações analíticas. O Hadoop MapReduce usa o modelo MapReduce para fornecer uma estrutura base para escrever facilmente aplicativos que processamgrandes quantidades de dados em paralelo em grandes clusters, de maneira con�ável e tolerante a falhas. Um job MapReduce geralmente divide o conjunto de dados de entrada em blocos independentes que são processados pelas tarefas de mapeamento (Map) de uma maneira paralela. A estrutura classi�ca as saídas dos map, que são então inseridas nas tarefas de redução (Reduce). Normalmente, tanto a entrada quanto a saída do job são armazenadas em um sistema de arquivos. O framework cuida do agendamento de tarefas, monitorando-as, e reexecuta as tarefas com falha. Tipicamente, os nós que executam as tarefas e os nós de armazenamento são os mesmos, ou seja, a estrutura MapReduce e o HDFS são executadas no mesmo conjunto de nós. Essa con�guração permite que a estrutura agende com e�cácia as tarefas nos nós em que os dados já estão presentes, resultando em uma largura de banda agregada muito alta em todo o cluster. A API MapReduce é nativa do Hadoop e escrita em Java; desse modo, os aplicativos desenvolvidos usando MapReduce também devem ser desenvolvidos em Java ou convertidos para Java, compilados em um arquivo JAR e submetidos ao Hadoop. Para desenvolver aplicativos (Ex: exemploMapReduce.java) utilizando MapReduce, no mínimo devem ser seguidos os passos: Criar uma classe para desenvolvimento da função Map que seja extensão de org.apache.hadoop.mapreduce.Mapper e implemente o método map; Criar uma classe para desenvolvimento da função Reduce que seja extensão de org.apache.hadoop.mapreduce.Reduce e implemente o método reduce; Con�gurar os parâmetros do objeto Job, por exemplo, informando os dados que deverão ser processados e o local onde o resultado �nal do processamento deve ser armazenado; Compilar a aplicação (Ex: bin/hadoop com.sun.tools.javac.Main exemploMapReduce.java); Gerar um arquivo jar (Ex: jar cf exemploMapReduce.jar exemploMapReduce*.class) Submeter a aplicação ao Hadoop (Ex: bin/hadoop jar exemploMapReduce.jar exemploMapReduce). Ao submeter a aplicação ao cluster, o ResourceManager, processo do YARN, assume a responsabilidade de distribuir a aplicação aos nós trabalhadores, agendar tarefas e monitorá-las. / Apache Storm Quando for necessário trabalhar com fontes de dados em tempo real, devem ser usadas ferramentas que ofereçam baixa latência para lidar com dados em streaming. Dados em streaming referem-se a dados sem fronteiras e, possivelmente, sem ordenação, que chegam constantemente de forma incessante e necessitam ser examinados em poucos segundos. Saiba mais Esses dados podem ser capturados e processados usando Apache Storm, um framework de computação em tempo real distribuído com capacidade de processar aproximadamente um milhão de tuplas por segundo por nó. O processamento no Storm é projetado como uma topologia e executado em um cluster Storm que segue o padrão arquitetural do Hadoop de ter nós do tipo mestre e trabalhador. O nó mestre executa um daemon, chamado nimbus, responsável por distribuir o código em todo o cluster, atribuir tarefas às máquinas e monitorar as falhas. Cada nó de trabalhador executa um daemon chamado Supervisor. O supervisor escuta o processo atribuído à sua máquina e inicia e interrompe os processos conforme necessário com base no que o daemon nimbus atribuiu a ele. Toda a coordenação entre a nimbus e os supervisores é feita por meio do Zookeeper, que mantém o estado e, caso ocorra alguma falha, o sistema se recupera de forma transparente. Cada processo de um nó trabalhador executa um subconjunto da topologia; sendo assim, uma topologia em execução consiste em muitos processos espalhados por muitas máquinas. A topologia é descrita como um DAG com spouts e bolts atuando como vértices do grá�co. / As arestas no grá�co indicam como os dados devem ser passados entre os nós. Os spouts se conectam à fonte de dados externas para transformá-los em tuplas para serem processadas pelos bolts. Juntos, a topologia atua como um pipeline de transformação de dados. Para usar o Storm, os spouts e os bolts devem ser codi�cados e a topologia de�nida utilizando um aplicativo em Java ou em outra linguagem, por exemplo Python, convertendo para Java. A estrutura dos aplicativos (Ex: exemploStorm.java) desenvolvidos em Java deve, no mínimo, realizar os seguintes passos: Criar uma classe para cada aresta spouts que seja extensão da classe org.apache.storm.topology.base.BaseRichSpout ou implemente a interface org.apache.storm.topology.IrichSpout; Criar uma classe para cada aresta bolts que seja extensão da classe org.apache.storm.topology.base.BaseRichBolt ou implemente a interface org.apache.storm.topology.IrichBolt; Con�gurar os parâmetros do objeto topologia (org.apache.storm.topology.TopologyBuilder), informando o encadeamento entre os spouts e bolts; Compilar a aplicação (Ex: bin/hadoop com.sun.tools.javac.Main exemploStorm.java); Gerar um arquivo jar (Ex: jar cf exemploStorm.jar exemploStorm*.class); Executar a topologia no Storm (Ex: storm jar exemploStorm.jar exemploStorm). As facilidades proporcionadas pelos frameworks e os benefícios da arquitetura fazem do Hadoop um excelente ambiente para o desenvolvimento de projetos de Big Data. Atividade (ESAF - 2016 - ANAC - Analista Administrativo - Área 2) Para o processamento de grandes massas de dados, no contexto de Big Data, é muito utilizada uma plataforma de software em Java, de computação distribuída, voltada para clusters, inspirada no MapReduce e no GoogleFS. Esta plataforma é o(a) a) Yam Common. b) GoogleCrush. c) EMRx. d) Hadoop. e) MapFix. O YARN veri�ca a disponibilidade de memória, cpu, disco e rede dos nós, dentre outras atividades de gerenciamento de recursos no cluster por meio de dois serviços mestres e um serviço trabalhador. Esses serviços são denominados: a) ResourceManager, MasterManager e NodeManager; b) ClusterManager, TaskManager e NodeManager; c) MasterManager, WorkManager e NodeManager; d) ResourceManager, ApplicationMaster e NodeManager; e) ProcessManager, MemoryManager e NodeManager. / (COMPERVE - 2020 - TJ-RN - Analista de Suporte Pleno - Banco de Dados) Big Data surgiu a partir da necessidade de manipular um grande volume de dados e, com isso, novos conceitos foram introduzidos, como o Data Lake, que: a) Pode ser considerado um repositório de dados relacionados, sendo, portanto, um armazém de dados orientado por assunto. b) Pode ser considerado um conjunto de bancos de dados relacionais e com relacionamentos entre tabelas de diferentes esquemas de bancos de dados. c) Resultado de sucessivas operações de mineração de dados, sendo um ambiente no qual é possível ter relatórios e dashboards de maneira amigável para os analistas de negócio. d) Projetado para armazenar dados de diversas fontes e formatos, não havendo a necessidade da definição de um esquema de dados para inserir novos itens. e) Projetado para armazenar grande volume de dados, organizados em um esquema flexível definido pelo HDFS. Notas Título modal 1 Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Título modal 1 Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Referências BENGFOR, B.; KIM, J. Analítica de dados com Hadoop: Uma introdução para cientistas de dados. 1.ed. São Paulo: Novatec, 2016. TAURION, C. Big data. Rio de Janeiro: Brasport, 2013. Próxima aula Distribuição de dados no cluster; Redundância de dados no cluster; Acesso aos dados no cluster. Explore mais / Explore mais Pesquise no Google e leia sobre “Como funciona a pesquisa Google”.
Compartilhar