Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 ARQUITETURA DE COLETA E ARMAZENAMENTO DE DADOS: HADOOP E SPARK 2 NOSSA HISTÓRIA A nossa história inicia com a realização do sonho de um grupo de empresários, em atender à crescente demanda de alunos para cursos de Graduação e Pós-Graduação. Com isso foi criado a nossa instituição, como entidade oferecendo serviços educacionais em nível superior. A instituição tem por objetivo formar diplomados nas diferentes áreas de conhecimento, aptos para a inserção em setores profissionais e para a participação no desenvolvimento da sociedade brasileira, e colaborar na sua formação contínua. Além de promover a divulgação de conhecimentos culturais, científicos e técnicos que constituem patrimônio da humanidade e comunicar o saber através do ensino, de publicação ou outras normas de comunicação. A nossa missão é oferecer qualidade em conhecimento e cultura de forma confiável e eficiente para que o aluno tenha oportunidade de cons- truir uma base profissional e ética. Dessa forma, conquistando o espaço de uma das instituições modelo no país na oferta de cursos, primando sempre pela inovação tecnológica, excelência no atendimento e valor do serviço oferecido. 3 Sumário NOSSA HISTÓRIA ......................................................................................................... 2 ARQUITETURA DE COLETA E ARMAZENAMENTO DE DADOS: HADOOP E SPARK ............................................................................................................................. 5 INTRODUÇÃO ................................................................................................................ 5 Definição ........................................................................................................................ 12 Atributos ......................................................................................................................... 14 Velocidade ...................................................................................................................... 14 Variedade ........................................................................................................................ 15 Volume ........................................................................................................................... 16 Veracidade ...................................................................................................................... 16 Técnicas e Tecnologias ................................................................................................... 17 NoSQL ............................................................................................................................ 17 MapReduce ..................................................................................................................... 19 Apache Hadoop .............................................................................................................. 22 Limitações do Hadoop .................................................................................................... 24 Apache Spark .................................................................................................................. 24 Spark RDD ..................................................................................................................... 25 Modelo de dados ............................................................................................................. 26 Escalonamento de Jobs ................................................................................................... 28 Módulos extras ............................................................................................................... 28 Spark Streaming ............................................................................................................. 30 Apache Flink .................................................................................................................. 31 Arquitetura do Flink ....................................................................................................... 32 Processamento ................................................................................................................ 34 4 Processamento Em Lotes ................................................................................................ 36 Módulos extras ............................................................................................................... 37 Softwares Auxiliares ...................................................................................................... 37 Kafka .............................................................................................................................. 38 Arquitetura ...................................................................................................................... 38 Características ................................................................................................................. 38 ZooKeeper ...................................................................................................................... 40 Arquitetura ...................................................................................................................... 40 Características ................................................................................................................. 41 REFERÊNCIAS ............................................................................................................. 42 5 ARQUITETURA DE COLETA E ARMAZENAMENTO DE DADOS: HADOOP E SPARK INTRODUÇÃO O crescente uso de dispositivos eletrônicos, tais como smartphones, tablets, sensores, dentre outros e o uso da internet promovem a geração de dados em grande volume, levando ao surgimento do termo conhecido como Big Data. Esse cenário atraiu a atenção de várias organizações que buscam maneiras eficientes e de baixo custo para analisar, processar e minerar es- ses dados visando extrair informações estratégicas e valiosas (ASSUN- ÇÃO et al., 2015). Dessa forma, inúmeras aplicações para Big Data surgiram. Essas aplicações cobrem os mais variados domínios, tais como: Internet das Coi- sas, empresarial, governamental, astronômico, meteorológico, da bioinfor- mática, das ciências, dentre outras. Em um cenário com produção de dados em larga escala é muito co- mum observar a imensa movimentação e o processamento intensivo de dados. Quanto à movimentação de dados, o tráfego total na Internet cres- ceu exponencialmente nas últimas duas décadas. Em meados de 1992, as redes globais de Internet costumavam movi- mentar aproximadamente 100 GB de tráfego por dia. Dez anos depois, o tráfego global da Internet era de 100 Gigabytes por segundo (GBps). 6 Em 2016, a movimentação de dados já era superior a 20.000 Gbps. Além disso, esse número deve crescer ainda mais, superando 278 Exa- bytes por mês até 2021, ante 96 Exabytes por mês em 2016, indicando crescimento anual acumulativa (Cumulative Annual-Growth Rate – CAGR) de 24%. Esse cenário representa um ligeiro aumento das expectativas em re- lação à previsão do ano de 2015, que projetou um CAGR de 22% de 2015 a 2020 (CISCO, 2018). Por outro lado, o processamento intensivo de dados requerido por aplicações Big Data utiliza datacenters compostos por centenas ou milha- res nós de computação de alta performance. Tal tipo de infraestrutura necessita ser aperfeiçoada continuamente para alcançar o maior poder de processamento. Mesmo com novas tecno- logia de design e fabricação, os desafios ligados à eficiência energética persistem, tornando-se uma preocupação atual. Adicionalmente, pode-se citar a análise proposta por (GÖDDEKE et al., 2013;EBRAHIMI; JONES; FLEISCHER, 2014), onde os autores indi- cam que os atuais sistemas de computação de alto desempenho (High- Performance Computing – HPC) utilizam cerca de 40% a 60% do total de energia gasta para a computação, 10% para os sistemas de rede e de ar- mazenamento, e o restante é consumido pela própria infraestrutura, tal como iluminação e refrigeração. Pode-se observar, com base nesse estudo, que o consumo energé- tico, sem sombra de dúvidas, está se tornando um critério essencial para a construção de novos datacenters. Pode-se observar que o Green500 (TOP500.ORG, 2018a), ao contrá- rio do Top500 (TOP500.ORG, 2018b) cria seu ranking levando em conta a eficiência energética do supercomputador e não o seu poder computacio- nal. Então um datacenter bem colocado no Green500 apresenta uma efici- ência energética alta. 7 Ainda, a maioria dos líderes do Green500 usam uma combinação de processadores x86 com unidades de processamento gráfico (Graphic Pro- cessing Unit – GPU) e outras tecnologias de aceleração. Os processadores ARM são amplamente utilizados em diversos sis- temas embarcados, tais como: smartphones, tablets, sensores, dispositivos IoT, dentre outros (LOGHIN et al., 2015). Além disso, a organização destes modelos de processadores foi de- senvolvida para possuir eficiência energética. Assim, os processadores ARM se candidatam a serem utilizados na construção de novos datacen- ters focados no baixo consumo energético. Ainda, os processadores ARM possuem melhor eficiência energética em relação os processadores x86 (PADOIN et al., 2014; PADOIN et al., 2012; XU; CHANG, 2017). Um dos domínios de Big Data que mais cresce é a área de Internet Das coisas. Estimativas mostram que em 2020 haverá aproximadamente 30 bi- lhões de dispositivos de Internet das Coisas no mundo (IDC, 2018). As apli- cações envolvendo tais dispositivos são muito sensíveis à latência (YI; LI; LI, 2015). A arquitetura de computação em nuvem, muito usada atualmente, apresenta justamente o problema da latência (YI; LI; LI, 2015). Assim, para resolver o problema de latência foi proposto o usa da ar- quitetura de computação em névoa (FOG Computing) e de borda (EDGE Computing). Tais arquiteturas adicionam camadas de processamento entre a apli- cação (usuário final) e a nuvem para diminuir principalmente a latência (YI; LI; LI, 2015). 8 Ao utilizar processadores com um menor consumo de energia nessa camada, as aplicações alcançam um aumento da eficiência energética. Assim a computação em névoa e de borda, bem como a área de Big Data, também podem se beneficiar da principal vantagem dos processado- res ARM, ou seja, sua eficiência energética. De fato, o uso de processado- res ARM para o processamento Big Data foi objeto de estudo de vários autores. Pode-se citar o trabalho de Kalyanasundaram e Simmhan (KALYA- NASUNDARAM; SIMMHAN, 2017), os autores avaliaram o impacto do uso de processador ARM de 64 bits para processamento Big Data em compa- ração ao uso de processadores X86. Os resultados indicam que os processadores ARM 14 de 64 bits são mais eficientes energeticamente que os processadores X86. O trabalho de Malik (MALIK et al., 2018) apresenta um estudo de como os parâmetros de configuração do Hadoop (a nível de sistema e ar- quitetura) podem refletir em ganhos de desempenho. Os resultados obtidos mostraram que o aumento do número de nú- cleos ativos para tarefas de map ajuda a maximizar a eficiência energética e reduzir a utilização da CPU. As aplicações Big Data podem ser construídas utilizando dois mode- los de processamento. O primeiro modelo é chamado de processamento em lotes e tem como finalidade o processamento de dados com limites definidos e o se- gundo é chamado de processamento em tempo real que tem por finalidade o processamento de dados sem limite definidos. As aplicações do modelo de processamento em lotes podem ser exe- cutados sobre frameworks Apache Hadoop, Spark, Flink e outros, e as apli- cações de processamento em tempo real podem ser executadas sobre os frameworks Apache Spark, Flink, Storm e outros. 9 No estado da arte, muitos autores abordam o processamento Big Data sobre processadores ARM. Entretanto, a grande maioria leva em conta o processamento em lotes utilizando o framework Hadoop. Além disso, poucos trabalhos comparam o desempenho entre os pro- cessadores ARM e X86 ou entre diferentes processadores ARM (LOGHIN et al., 2015; MALIK; HOMAYOUN, 2015; MALIK et al., 2015; NESHATPOUR et al., 2015). Não há uma comparação entre diferentes processadores ARM de di- ferentes arquiteturas, logo, não há uma avaliação de como diferentes ar- quiteturas influenciam na execução de aplicações Big Data. Desse modo, percebe-se a necessidade de avaliar o desempenho dos frameworks (e aplicações Big Data) sob ambos os modelos de processa- mento. Além disso, torna-se importante avaliar o impacto de diferentes ar- quiteturas ARM sobre os frameworks e aplicações Big Data. Esta mudança provocou uma ampla transformação na maneira com que indivíduos de uma sociedade se relacionam, passando a ser mais atu- antes no que tange a questões de interesse comum, tais como segurança, educação, saúde, economia, entre outros. Devido a este fenômeno social, foi possível que cada indivíduo exerça o seu papel de cidadão de modo mais participativo nos acontecimentos políticos e sociais de sua região. Para que o exercício de cidadania seja aplicado, é necessário que o indivíduo tenha ao seu alcance direitos indivi- duais, políticos e sociais. Dentre os direitos políticos de cada cidadão, estão o direito ao voto, à justiça, à liberdade de expressão pública de pensamento e, principalmente, à liberdade de informação e ao acesso às informações (SOLIS, 1994 apud HEERDT, 2000). 10 Segundo Araújo (1999), a construção da cidadania passa necessari- amente pelo acesso, uso, disseminação e discussão de informações sobre direitos e deveres referentes à construção de uma sociedade mais igualitá- ria. Portanto, a falta de acesso à tais informações inibe a realização de ati- vidades cívicas. A Lei no 12.527 de 18 de novembro de 20111 garante à cada cidadão brasileiro o acesso às informações públicas dos poderes Executivo, Legis- lativo e Judiciário, criando regras de como estas informações são publica- das e consumidas. Esta regulamentação estimula o exercício da cidadania e fortalece a relação entre Estado e cidadão, significando um importante passo para a consolidação da Democracia brasileira. Uma maior participação pública nas questões governamentais per- mite uma maior fiscalização contra irregularidades, além de possibilitar avanços na gestão pública do país. O crescimento no uso de novas tecnologias como Cloud Computing, Internet e dispositivos móveis fez criar a necessidade de gerenciar a anali- sar uma vasta quantidade de informações que ultrapassa a nossa capaci- dade convencional de processamento (DUMBILL, 2013). Segundo Villars, Olofson e Eastwood (2011), em 2010, o mundo criou 1 zetabyte (1021 bytes) de dados, enquanto a previsão para 2014 será de 7 zetabytes de dados. De acordo com pesquisas de Manyika et al. (2011), em 2010, mais de 4 bilhões de pessoas, ou 60% da população mundial, estão utilizando tele- fones celulares, sendo destes 12% smartphones e com um crescimento anual de 20%. Existem também mais de 30 milhões de sensores nos setores de transporte, automotivo, indústria, utilidades e de vendas. 11 A taxa de crescimento destes sensores é de 30%. Toda esta informa- ção produzida cria novas oportunidades para a extração de valor sobre a informação, como aponta Taurion (2013): Geramos um imenso volume de dados a cada dia e análises de pa- drões e correlações nesta massa de dados podem produzir informações valiosíssimas emtodos os setores da sociedade humana, de governos bus- cando entender demandas da população a empresas buscando se posici- onar mais competitivamente no mercado. McAfee e Brynjolfsson (2012) citam um exemplo de como a captura e processamento de uma grande massa de dados pode dar vantagem com- petitiva para uma empresa. O tempo estimado de chegada (ETA - Estimated Time to Arrive), rea- lizada pelos pilotos minutos antes do pouso, é uma informação importante para os passageiros e para os funcionários de uma companhia aérea. No caso de um avião pousar antes do que o tempo esperado, a tripu- lação e passageiros devem aguardar os funcionários do aeroporto se pre- param para realizar o desembarque. Caso o pouso ocorra depois do tempo esperado, os funcionários fica- rão ociosos aguardando a chegada da aeronave. Situações extremas como essas causam grandes custos para a com- panhia. Para a solução deste problema, uma empresa americana chamada PASSUR1 criou, então, uma tecnologia para a indústria aviária chamada RightETA2, capaz de determinar com alta precisão o tempo estimado para chegada de cada voo baseando-se em diversas fontes de dados, tais como clima, programação dos voos, localização de outros aviões detectados pelo radar do aeroporto, entre outros. São coletadas diversas informações sobre todos os aviões próximos a cada 4,6 segundos. Como resultado, milhares de dólares ao ano foram poupados em cada aeroporto em que a tecnologia foi implantada. 12 Organizações que conseguem se beneficiar de decisões em tempo real e de informações atuais e precisas terão vantagem competitiva sobre aquelas organizações incapazes de adotar e fazer uso desta tendência (VILLARS; OLOFSON; EASTWOOD, 2011). Através na análise de imensos volumes de dados que estão disponí- veis, existe um grande potencial em realizar importantes avanços nos ne- gócios de empresas e na obtenção de conhecimento em diversas áreas científicas (AGRAWAL et al., 2011). Definição Não existe um consenso sobre o conceito de Big Data totalmente aceito e aplicado no mercado. Diversos autores o definem sobre perspectivas distintas, porém, apre- sentam convergências em certos aspectos que permitem um melhor enten- dimento de sua definição. O encontro de uma definição para o termo é importante para o anda- mento desta pesquisa. Segundo Manyika et al. (2011, tradução nossa), Big Data "refere-se a conjuntos de dados cujo tamanho é além da capacidade de ferramentas de software de banco de dados típicos para capturar, armazenar, gerenciar e analisar". Gartner (2012, tradução nossa), define Big Data como "ativos de alto volume, velocidade e variedade de informação que demandam custo-be- nefício, formas inovadoras de processamento de informação para maior vi- sibilidade e suporte à tomada de decisão". 13 Já a IDC define Big Data como sendo "uma nova geração de tecnolo- gias e arquiteturas, projetadas para extrair economicamente o valor de vo- lumes muito grandes e de uma grande variedade de dados, permitindo uma alta velocidade de captura, descoberta, e ou análise". Percebe-se, com as definições citadas anteriormente, semelhanças entre os termos utilizados, como, por exemplo, o grande volume de dados, a alta velocidade de processamento e a diversa variedade de fontes de dados. Taurion (2013) resume atributos semelhantes entre diversos concei- tos existentes sobre Big Data em uma fórmula que permite compreendê-la de maneira mais ampla: BigData = V olume + V ariedade + V elocidade + V eracidade + V alor 1 http://www.passur.com 2 http://www.passur.com/righteta-product-detail.htm O mesmo autor ainda abrange o termo para além da área técnica: Big Data não é apenas um produto de software ou hardware, mas um conjunto de tecnologias, processos e práticas que permitem às empresas analisa- rem dados a que antes não tinham acesso e tomar decisões ou mesmo gerenciar atividades de forma muita mais eficiente (TAURION, 2013). Com base nas definições apresentadas, pode-se concluir, portanto, que o conceito Big Data pode ser direcionado para um conjunto de práticas e tecnologias que visam processar, armazenar, analisar e informar uma grande variedade e volume de dados a uma grande velocidade, permitindo que empresas possam utilizá-las de forma eficiente no seu processo de tomada de decisão. http://www.passur.com/ 14 Atributos O termo Big Data é constituído por diversos atributos que o diferencia de outros conceitos já existentes no mercado, como Business Intelligence (BI). Segue a contextualização de cada atributo identificado pelo autor Tau- rion (2013). Velocidade O atributo Velocidade está relacionado à rapidez em que as informa- ções são consumidas e analisadas (RIFFAT, 2014). O mesmo é um fator determinante para a tomada de decisão de em- presas, pois "dados não tratados e analisados em tempo hábil são dados inúteis, pois não geram informação" (TAURION, 2013). Velocidade é um critério que vai se tornar cada vez mais importante, devido à crescente rapidez com que as empresas precisam reagir às mu- danças no cenário de negócios, bem como é necessária para tratar os da- dos em tempo real, interferindo na execução do próprio processo de negó- cios (TAURION, 2013). Em situações em que as respostas rápidas às mudanças ou tendên- cias for um fator importante para o negócio, a velocidade torna-se um atri- buto mais importante do que os demais (MCAFEE; BRYNJOLFSSON, 2012). 15 Variedade O crescimento no uso das redes sociais e de smartphones, aliados à evolução das tecnologias de armazenamento de dados e diminuição no custo de hardware, causaram uma grande expansão na criação e prolife- ração de dados. Tal situação viabiliza economicamente a elaboração de tecnologias capazes de armazenar e processas diversas fontes diferentes de dados (MCAFEE; BRYNJOLFSSON, 2012). Taurion (2013) cita a importância de ligar diversas fontes de dados com o objetivo de obter informações: A variedade é um parâmetro importante, pois, com diversas fontes de dados aparentemente sem relações, podemos derivar informações extre- mamente importantes e fazer análises preditivas mais eficientes. Por exemplo, conectando dados meteorológicos com padrões de compra dos clientes podemos planejar quais tipos de produtos deverão es- tar em destaque nas lojas quando for detectado que haverá um período de alguns dias de temperatura elevada, aqui a três dias. Ou conectar dados geográficos com detecção de fraudes. Entretanto, existem desafios para serem enfrentados quando ocorre a busca por infor- mações em diferentes tipos de dados. Os tipos de dados podem ser classificados em estruturados, não-es- truturados e semiestruturados, esclarecidos a seguir: Os dados estruturados estão presentes em sistemas tradicionais cor- porativos (bancos de dados, arquivos sequenciais e hierárquicos etc). Os semiestruturados estão disponíveis por meio de logs de sistemas (web servers, CDRs etc.) e os não estruturados são os conteúdos digitali- zados que, anteriormente, eram acessados em forma não digital, como ar- quivos de imagens, áudios, textos, entre outros (CIO, 2012). 16 Segundo o IDC (2011), 90% dos dados do universo digital são com- postos por dados não-estruturados. Dessa forma, é importante atentar para este tipo de dado que é representado em sua ampla maioria armazenadas atualmente. Volume Trata-se da quantidade de dados que é consumida e processada (RI- FFAT, 2014). Este atributo é o comumente mais conhecido, visto que o "Big Data vem chamando atenção pela acelerada escala em que volumes cada vez maiores de dados são criados pela sociedade" (TAURION, 2013). Valor "Big Data só faz sentido se o valor da análise dos dados com- pensar o custo de sua coleta, armazenamento e processamento" (TAU-RION, 2013). Assim sendo, espera-se que a implantação de uma solução Big Data gere retorno sobre o investimento (ROI) para quem o investiu. Veracidade Não basta ter posse de uma informação: é necessário que a mesma seja autêntica e tenha algum sentido para que o utiliza (TAURION, 2013). A veracidade torna-se, portanto, um atributo importante para ser utili- zada em um mercado de alta competitividade e dinamismo. 17 Técnicas e Tecnologias O crescimento de dados gerados todos os dias não é o único fator que possibilitou a existência do Big Data. Os avanços nas tecnologias de armazenamento e mineração de da- dos também são responsáveis pelo crescimento da quantidade de informa- ções consumidas e analisadas (MICHAEL.; MILLER, 2013). NoSQL O Sistema Gerenciador de Banco de Dados Relacional (SGBDR) é, atualmente, a tecnologia predominante para o armazenamento de dados estruturados para aplicações corporativos ou web. Diversas outras alternativas apareceram em alguns anos, como os bancos de dados orientados a objeto ou armazenamento em arquivos XML, porém nenhum deles conseguiu obter a mesma adoção do que os SGB- DRs. O movimento NoSQL (Not only SQL) começou em 1998 como uma alternativa mais barata e eficiente para o gerenciamento de grandes mas- sas de dados. Sua proposta vem ao encontro com a necessidade de alta escalabilidade, processamento eficiente de grande volume de dados e, principalmente, na fácil distribuição de processamento entre outros servi- dores (STRAUCH, 2011). Estas características fazem dos bancos de dados NoSQLs soluções ideais para a construção de tecnologias Big Data. Segundo Hecht e Jablonski (2011), os SGBDRs tornam-se complexos e pouco performáticos quando o modelo de dados não corresponde com o modelo relacional. Isto acarreta no uso de frameworks pouco performáticos e algoritmos complexos que tornam o modelo relacional difícil de manter e evoluir. 18 Caso seja realizada uma operação de alteração, todo o SGBDR pode ficar inoperante. Já para aplicações que utilizam uma grande massa de dados, opera- ções de join e lock influenciam diretamente na sua performance e disponi- bilidade, podendo ficar ainda mais crítico quando presente dentro de um sistema de armazenamento distribuído. Pode-se classificar, segundo Hecht e Jablonski (2011), os bancos de dados NoSQL em 5 diferentes categorias de acordo com o método utilizado para o gerenciamento de dados. São elas: a) Chave/Valor: Os dados são armazenados em estruturas onde um determinado valor pode ser somente recuperado através de sua chave. Sua simplicidade permite registrar novos valores sem conflitar com os da- dos já armazenados e sem afetar a disponibilidade do sistema. São exemplos de bancos de dados para esta categoria: Redis, Volde- mort, Membase. b) Documento: Semelhante à categoria anterior, porém possibilitam gerenciar estrutura de dados mais complexos. Para cada chave, utiliza-se a estrutura JSON como valor, permitindo armazenar mais de um atributo para cada chave, para esta estrutura, dá-se o nome de Documento. Documentos podem ser agrupados entre si e formar uma Coleção. Esta estruturação dos dados permite armazenar informações mais comple- xas e uma fácil migração e replicação de dados. São exemplos de banco de dados para esta categoria: CouchDB, MongoDB, Riak. c) Tabular: Neste modelo de gerenciamento, são armazenados pares de campos chave/valor dentro de linhas (registros). 19 Apesar de semelhança com o modelo relacional, os bancos de dados tabulares somente armazenam os valores solicitados, ao invés de armaze- nar valores nulos em cada coluna onde não houver um valor para ela. Esta flexibilidade permite que banco de dados tabulares sejam efici- entes em armazenamento de grande quantidade de dados. São exemplos de banco de dados para esta categoria: Apache Cas- sandra, HBase, Hypertable. d) Grafos: Especialistas em associação de um ou mais dados entre si, os bancos de dados baseados em grafos são indicados para sistemas que necessitam de relacionamento seus dados para prover informações para o usuário final, como redes sociais, sistemas de recomendação e ser- viços orientados a localização. São exemplos de banco de dados para esta categoria: Sesame, Big- Data, Neo4j, GraphDB, FlockDB. Com a grande quantidade de banco de dados NoSQL existentes no mercado, onde cada uma possui uma especialidade específica, cabem aos profissionais de análise de dados a escolher a melhor ferramenta para aten- der às suas necessidades. MapReduce Grandes volumes de dados exigem técnicas de processamento de alto desempenho e facilidade de uso em ambientes distribuídos. O MapReduce surgiu como uma solução popular para aproveitar o aumento do poder de processamento de sistemas interligados (CONDIE et al., 2010). 20 Segundo (DEAN; GHEMAWAT, 2004, tradução nossa), MapReduce é "um modelo de programação e uma implementação associada para o processamento e a geração de grandes conjuntos de dados". O MapReduce permite que programadores sem experiência em im- plementação de sistemas distribuídos criem sistemas capazes de proces- sar grandes quantidades de dados, e deixando que detalhes como partici- onamento, escalonamento, tolerâncias a falhas e comunicação entre diver- sos servidores à cargo do serviço MapReduce. Esta condição possibilita que o foco da implementação esteja apenas no tratamento dos dados (DEAN; GHEMAWAT, 2010). Segundo Condie et al. (2010), para utilizar o MapReduce, o progra- mador deve implementar algumas funções pré-determinadas. A entrada e saída de cada função será um conjunto de pares chave/valor. A primeira função a ser executa é a map, que é executada a cada entrada de par chave/valor, produzindo uma lista de pares intermedi- ários. Em seguida, a função reduce é invocada uma única vez para cada chave distinta da lista criada anteriormente e retornar o resultado do pro- cessamento para o usuário. A figura 1 ilustra o fluxo de processamento de uma operação MapRe- duce. 21 A solução MapReduce mais conhecido no mercado atualmente é o Apache Hadoop. Trata-se de uma implementação de código fonte aberto do MapRa- duce originalmente criada pela Google e atualmente mantida pela Funda- ção Apache. Ele é constituído por uma implementação MapReduce e por um sis- tema de arquivos chamado Hadoop Distributed File System (HDFS). Este sistema de arquivos é otimizado para receber grandes cargas de dados e possibilitar a execução das operações MapReduce em sistemas distribuídos. O mesmo armazena apenas os dados de entrada da função map e a saída da função reduce, deixando os dados intermediários em cada nodo do sistema (CONDIE et al., 2010). 22 Apache Hadoop O Hadoop foi inicialmente introduzido em 2007 como uma implemen- tação de código aberto para o processamento MapReduce ligado a um sis- tema de arquivos distribuídos (WHITE, 2012), mas desde então evoluiu para uma vasta rede de projetos relacionados a cada etapa de um grande fluxo de dados, incluindo a coleta de dados, armazenamento, processa- mento e etc. Atualmente, o Hadoop consiste em quatro módulos principais (FOUNDATION, 2018c): • MapReduce Data processing engine. Um trabalho MapReduce con- siste em duas partes, uma fase de map, que processa os dados de entrada e organiza-os em pares de chave/valor e uma fase de reduce que processa os dados em paralelo (LANDSET et al., 2015); • Hadoop distributed file system (HDFS): um sistema de arquivos pro- jetado para armazenar grandes quantidades de dados através de vários nós. O HDFS possui uma arquitetura mestre-escravo composta de nós de dados escravos (data nodes) em que cada nó armazena blocos de dados, recuperando os dados sob demanda e reportando aonó mestre (name node). O nó mestre mantém os registros dos dados (referências a locais de arquivos e metadados) e direciona o tráfego para os nós de dados após solicitações de clientes. Este sistema possui tolerância a falhas, normalmente mantendo três ou mais cópias de cada bloco de dados em caso de falha no disco. Além disso, também há controles no caso de falha de nó mestre, no qual um sistema terá um nó mestre secundário ou que mantém os backups dos me- tadados (LANDSET et al., 2015); 23 • YARN (“Yet Another Resource Negotiator”) (VAVILAPALLI et al., 2013) Com o YARN, se um aplicativo deseja executar, seu cliente deve so- licitar o lançamento de um processo de gerenciamento de aplicativo a partir do gerenciador de recursos, que então encontra um gerenciador de nó em um dos nós do cluster. O gerenciador de nó lança um contêiner que executa a aplicação. As responsabilidades de gerenciamento do YARN são divididas entre o geren- ciador de recursos, o processo de gerenciamento de aplicativo (Applica- tionMaster) e o servidor de logs (que armazena o histórico dos aplicativos), enquanto as responsabilidades de gerenciar os recursos do nó são tratados pelo gerenciador de nó. O YARN é capaz de funcionar em clusters maiores, mais do que du- plicar a quantidade de trabalhos e tarefas que ele pode manipular antes de chegar a um gargalo (WHITE, 2012). No YARN, os slots podem ser reutilizados, pois há uma utilização de recursos muito melhor (KULKARNI; KHANDEWAL, 2014); • Hadoop Common (FOUNDATION, 2018a) Um conjunto de utilitários comuns necessários aos outros módulos Hadoop. Além disso, possui bibliotecas compartilhadas nativas que incluem im- plementações Java para codecs de compressão, utilitários de E/S e detec- ção de erros. Também estão incluídas interfaces e ferramentas para configuração de reconhecimento de rack, autorização de usuários proxy, autenticação, autorização de nível de serviço, confidencialidade de dados e o servidor de gerenciamento de chaves Hadoop (KMS) (LANDSET et al., 2015). 24 Por fim, o ecossistema Hadoop é composto por uma vasta gama de projetos construídos utilizando os módulos principais descritos acima. Esses projetos foram projetados para auxiliar pesquisadores e profis- sionais em todos os aspectos de um fluxo de trabalho típico de análise de dados ou aprendizagem de máquinas (LANDSET et al., 2015). Limitações do Hadoop Uma das principais desvantagens do MapReduce é a sua ineficiência na execução de algoritmos iterativos. O MapReduce não foi projetado para processos iterativos. Os mape- adores leem os mesmos dados repetidamente do disco. Assim, após cada iteração, os resultados devem ser gravados no disco para passá-los para a próxima iteração. Para cada iteração, um novo mapeador e redutor devem ser iniciali- zados. Às vezes, os trabalhos MapReduce são de curta duração, caso em que a sobrecarga da inicialização dessa tarefa se torna uma sobrecarga significativa para a própria tarefa. Algumas soluções alternativas, como o agendamento direto (configu- ração do próximo trabalho MapReduce antes do final anterior) foram pro- postas. No entanto, essas abordagens introduzem níveis adicionais de com- plexidade no código-fonte (SINGH; REDDY, 2015). Apache Spark Spark é um paradigma para o processamento de Big Data desenvol- vido por pesquisadores da Universidade da Califórnia em Berkeley (SINGH; REDDY, 2015). 25 A principal característica do Spark que o torna diferente do Hadoop é a capacidade de executar computações em memória (JUNIOR et al., 2018). O que permite os dados serem armazenados em cache na memória, eliminando assim a limitação de sobrecarga de disco para tarefas iterativas. O Spark é um mecanismo geral para o processamento de dados em larga escala que suporta as linguagens Java, Scala e Python. Uma das principais abstrações para se obter um processamento no Spark é o uso do RDD. Spark RDD O Spark (ZAHARIA et al., 2012; ZAHARIA et al., 2010) apresenta uma abstração de dados para análise de Big Data, denominada conjunto de da- dos distribuídos resilientes (Resilient Distributed Dataset – RDD), que é uma estrutura de dados imutável determinística com tolerância a falhas (CHENEY et al., 2009; BOSE; FREW, 2005). Suas duas principais características são: • Usar um modelo de persistência elástica para fornecer a flexibilidade para persistir o conjunto de dados na memória, nos discos ou em ambos. Ao persistir o conjunto de dados na memória, favorece aplicações que precisam ler o conjunto de dados várias vezes (por exemplo, algoritmos iterativos) e permite consultas interativas (ZHANG et al., 2015); • Incorporar um mecanismo leve de tolerância a falhas (ou seja, uma linhagem), sem a necessidade de checkpoints. A linhagem de um RDD contém informações suficientes para que ele possa ser reavaliado com base em sua linhagem e RDDs dependentes, que são os arquivos de dados de entrada no HDFS no pior dos casos (ZHANG et al., 2015). 26 A capacidade de persistência de dados na memória torna o RDD ade- quado para muitas aplicações de análise de dados, especialmente algorit- mos iterativos, uma vez que remove o alto custo de acesso aos dados em discos em todas as etapas, como ocorre com Hadoop (ZHANG et al., 2015). Modelo de dados Os RDDs podem ser entendidos como uma memória compartilhada distribuída somente de leitura (NI, 2013). A API RDD foi ampliada em 2015 para incluir DataFrames, que per- mitem aos usuários agrupar uma coleção distribuída de dados por coluna, semelhante a uma tabela em uma base de dados relacional. Por exemplo, um RDD de pares de chave/valor pode ser convertido em um DataFrame que é representado como uma tabela com uma coluna para cada par chave/valor. Os DataFrame podem ser criados a partir de um RDD existente, ta- bela Hive, HDFS ou uma série de outras fontes de dados (LANDSET et al., 2015). A modificação de dados é conseguida através de transformações RDD de grão grosso que aplicam a mesma operação a todos os itens de dados no RDD, gerando assim um novo RDD. Esta abstração oferece oportunidades de alta consistência e um es- quema leve de tolerância a falhas. Especificamente, um RDD registra as transformações que foram fei- tas nele (ou seja, sua linhagem), sem replicação de dados ou verificação de falhas para tolerância a falhas. Quando uma partição do RDD é perdida, ela é recomputada de outros RDDs com base em sua linhagem. 27 Como RDD é atualizado por transformações de grão grosso, geral- mente requer muito menos espaço e esforço para fazer backup das infor- mações da linhagem do que os esquemas tradicionais de replicação ou verificação de dados, ao preço de um custo de recomputação mais alto para trabalhos intensivos em computação, quando há uma falha. Assim, para RDDs com grafos de linhagem longa envolvendo um grande custo de recomputação, um checkpointing é usado, o que é mais benéfico (ZHANG et al., 2015). O modelo RDD fornece uma boa estratégia de cache para “conjuntos de trabalho” durante a computação, mas não é suficientemente geral para suportar a funcionalidade tradicional de armazenamento de dados por dois motivos: • O esquema de tolerância a falhas RDD baseia-se na suposição de manipulação de dados de grão grosso sem modificação no local, porque deve garantir que o tamanho do programa seja muito inferior ao tamanho dos dados. Assim, operações de dados de grão fino, como a atualização de um único objeto de chave/valor, não podem ser suportadas neste modelo (ZHANG et al., 2015); • Assume que existe um conjunto de dados original persistente em um armazenamento estável, o que garante a correção do modelo de tolerância a falhas e a adequação do modelo de organização baseado em blocos. Noentanto, no armazenamento tradicional de dados, os dados estão chegando dinamicamente e a alocação de dados não pode ser determi- nada a priori. Como consequência, os objetos de dados são dispersos na memória, o que resulta em uma velocidade de transferência de memória degradada (ZHANG et al., 2015). 28 Escalonamento de Jobs Os jobs em Spark são organizados em um DAG, que captura depen- dências de trabalho. O RDD usa materialização preguiçosa, ou seja, um RDD não é com- putado a menos que seja usado em uma ação (por exemplo, count()). Quando uma ação é executada em um RDD, o escalonador examina a linhagem do RDD para criar um DAG de tarefas para execução. Spark usa uma programação de trabalho em duas fases (ZAHARIA et al., 2012): • Primeiro organiza os trabalhos em um DAG de estágios, cada um dos quais pode conter uma sequência de trabalhos com apenas uma de- pendência de um-para-um no nível de partição. Os limites das etapas são as operações com shuffle, que têm dependências de muitos para muitos (ZAHARIA et al., 2012); • Em cada etapa, um trabalho é formado por uma sequência de traba- lhos em uma partição, como o map e os trabalhos de filtragem. Tarefa é a unidade de agendamento no sistema, que elimina a mate- rialização dos estados intermediários e permite uma estratégia de agenda- mento fino (ZAHARIA et al., 2012). Módulos extras Além do núcleo do Spark, alguns projetos adicionais foram desenvol- vidos para complementar a funcionalidade fornecida pelo núcleo. Todos esses subprojetos (construídos no topo do núcleo) são descri- tos a seguir: • Spark SQL: apresenta DataFrames, que é uma nova estrutura de dados para dados estruturados e semi-estruturados. 29 O DataFrame oferece a possibilidade de introduzir consultas SQL nos programas Spark e fornece suporte à linguagem SQL, com interfaces de linha de comando e controladores ODBC/JDBC (GARCÍA-GIL et al., 29 2017); • Spark Streaming: nos permite usar a API do Spark em ambientes em tempo real usando micro-lotes de dados que são processados rapida- mente. Este design permite que o mesmo conjunto de código para proces- samento em lotes (formado por transformações RDD) seja usado em aná- lises em tempo real com pouca mudança. Spark Streaming pode funcionar com várias fontes de dados, como HDFS, Flume ou Kafka (GARCÍA-GIL et al., 2017); • Machine Learning library (MLlib) (MENG et al., 2016): é formado por algoritmos de aprendizagem de máquina e utilitários estatísticos comuns. Entre as suas principais funcionalidades, incluem: classificação, re- gressão, agrupamento, filtragem colaborativa, otimização e redução de di- mensionalidade. Esta biblioteca foi especialmente projetada para simplifi- car pipelines ML em ambientes de grande escala. Nas versões mais recentes do Spark, a biblioteca MLlib foi dividida em dois pacotes, MLlib, compilação sobre os RDDs e ML, compilação so- bre os DataFrames para a construção de pipelines; • Spark GraphX: é o sistema de processamento de grafos em Spark. Graças a este motor, os usuários podem visualizar, transformar e jun- tar de forma intercambiável tanto em grafos como coleções. Ele também permite expressar a computação de grafos usando a abstração de Pregel (MALEWICZ et al., 2010). 30 Spark Streaming O Spark Streaming usa micro-lotes que é uma técnica semelhante a uma simulação de processamento em tempo real. Nesta abordagem, um fluxo de entrada é empacotado em sequências de pequenos pedaços de dados, que podem então ser processados por um sistema em lotes (SHAHRIVARI, 2014). Embora isso possa ser adequado para muitos projetos, não é um ver- dadeiro sistema em tempo real. É observado em (ZAHARIA et al., 2012) que esta abordagem facilita o balanceamento de carga e é mais robusta para tolerar falhas nos nós. Além disso, os autores mencionam que, embora este modelo seja mais lento do que o processamento em tempo real verdadeiro, a latência pode ser minimizada o suficiente para a maioria dos projetos do mundo real (LANDSET et al., 2015). O Spark Streaming utiliza totalmente a imutabilidade do mecanismo de tolerância a falhas do RDD baseadas em linhagens do Spark, com algu- mas extensões e otimizações. Especificamente, o fluxo de entrada é dividido em uma sequência de RDDs imutáveis com base em intervalos de tempo, chamados D-streams, que são as unidades básicas que podem ser atuadas por transformações determinísticas, incluindo não apenas transformações disponíveis em Spark RDDs normais (por exemplo, map, reduce e groupBy), mas também cálculos com janelas exclusivas para Spark Streaming (por exemplo, re- ductionByWindow e countByWindow). Os RDDs de intervalos históricos podem ser mesclados automatica- mente com o RDD recém-gerado à medida que novos fluxos chegam. Os dados em tempo real são replicados em dois nós de trabalho para garantir a durabilidade dos dados originais em que a recuperação baseada em linhagem depende e o checkpointing é feito periodicamente para reduzir o tempo de recuperação devido a grafos de linhagem longa. 31 O determinismo e a linhagem de níveis de partição de D-streams pos- sibilitam a recuperação paralela após um nó falhar e mitigar o problema dos retardatários por meio de execução especulativa (ZHANG et al., 2015). O Spark tem semântica de entrega em tempo real exatamente uma vez. A ideia é processar uma tarefa em vários nós de trabalho. Durante uma falha, o processamento dos micro-lotes pode simplesmente ser recal- culado e redistribuído. O estado dos RDDs é periodicamente replicado para outros nós de trabalho, para mitigar uma possível falha do nó. As tarefas são então discretizadas em tarefas menores executadas em qualquer nó, sem afetar a execução. Assim, as tarefas com falha podem ser lançadas em paralelo distribuindo uniformemente a tarefa sem afetar o desempenho. Este procedimento é chamado de recuperação paralela. No entanto, o processamento de micro-lotes tem desvantagens. O processamento de micro-lotes leva mais tempo nas operações pos- teriores. A configuração de cada micro-lote pode demorar mais do que a análise em tempo real (LOPEZ; LOBATO; DUARTE, 2016). Apache Flink Flink (FOUNDATION, 2018b) foi desenvolvido na Universidade Téc- nica de Berlim sob o nome Stratosphere (ALEXANDROV et al., 2014). Ofe- rece capacidade para o processamento em tempo real e em lotes, permi- tindo a implementação de uma arquitetura Lambda. É um framework escalável que possui APIs para Java e Scala. Tem seu próprio runtime, em vez de ser construído no topo do MapReduce. Como tal, ele pode ser integrado com HDFS e YARN, ou executar comple- tamente independente do ecossistema Hadoop. 32 O modelo de processamento do Flink aplica transformações a cole- ções de dados paralelas (EWEN et al., 2013; LEICH et al., 2013). Essas transformações generalizam as funções de map e reduce, bem como funções como join, group e iterate. Também inclui um otimizador baseado em custos que seleciona au- tomaticamente a melhor estratégia de execução para cada trabalho. O Flink também é totalmente compatível com o MapReduce, o que significa que ele pode executar o código legado sem modificações (FOUNDATION, 2018b). Como Spark, o Flink também oferece processamento em lotes itera- tivo, bem como opções de processamento em tempo real, embora sua API de tempo real seja baseada em eventos individuais, ao invés da abordagem de micro-lotes que o Spark usa (LANDSET et al., 2015). Arquitetura do Flink Um cluster Flink compreende três tipos de processos: o cliente, o Ge- renciador de Trabalhos (JobManager) e, pelo menos, um Gerenciador de Tarefas (TaskManager). O processo cliente que é um interpretador do có- digo do programa, que transforma este código em um grafo com o fluxo de execução e o enviao Job Manager. Esta fase de transformação também examina os tipos de dados (es- quema dos dados trocados entre operadores) e cria serializadores ou ou- tros tipos/esquemas de código específico. Os programas DataSet também passam por uma fase de otimização de consulta baseada em custos, semelhante às otimizações físicas realiza- das por otimizadores de consultas relacionais (CARBONE et al., 2015). O JobManager coordena a execução distribuída do fluxo de dados. Ele rastreia o estado e o progresso de cada operador; transmite e agenda 33 novos operadores e coordena os pontos de verificação e a recuperação. O processamento real de dados ocorre em TaskManagers. Um TaskManager executa um ou mais operadores que produzem flu- xos de dados e relatórios sobre o status deles no JobManager. O TaskManager mantém pools de buffer para buffer ou para materia- lizar os fluxos e as conexões de rede para trocar os fluxos de dados entre operadores (CARBONE et al., 2015). O grafo de fluxo de dados é um DAG que consiste em: operadores com estado e fluxos de dados que representam dados produzidos por um operador e estão disponíveis para consumo pelos operadores. Como os grafos de fluxo de dados são executados de forma paralela, os operadores são paralelizados em uma ou mais instâncias chamadas subtarefas e os fluxos são divididos em uma ou mais partições de fluxo (uma partição por subtarefa produzida). Os fluxos de dados entre os produtores e os consumidores são distri- buídos em vários padrões, como ponto a ponto, transmissão, re-partição, fan-out e mesclagem (CARBONE et al., 2015). Os fluxos de dados intermediários do Flink são a abstração do núcleo para troca de dados entre operadores. Um fluxo de dados intermediário representa um identificador lógico para os dados que são produzidos por um operador e que podem ser con- sumidos por um ou mais operadores (CARBONE et al., 2015). O Flink oferece uma execução confiável com rigorosas garantias de consistência via processamento exatamente uma vez (JUNIOR et al., 2018) e lida com falhas via verificação e reexecução parcial. O pressuposto geral que o sistema faz para fornecer efetivamente es- sas garantias são que as fontes de dados são persistentes. 34 O mecanismo de verificação do Apache Flink baseia-se na noção de snapshots distribuídos e consistentes para obter garantias de processa- mento exatamente uma vez. O mecanismo usado no Flink é chamado de Asynchronous Barrier Snapshotting (ABS [7]). As barreiras são registros de controle injetados nos fluxos de dados de entrada que correspondem a um tempo lógico e sepa- ram logicamente o fluxo na parte que será incluída no snapshot atual e a parte que será posteriormente captada (CARBONE et al., 2015). Existem duas APIs principais no Flink: a API DataSet para processar conjuntos de dados finitos (geralmente denominado processamento em lo- tes) e a API DataStream para processamento de fluxos de dados potenci- almente ilimitados (geralmente referidos como processamento em tempo real) (CARBONE et al., 2015). Processamento Em Tempo Real no Flink A API DataStream do Flink implementa uma estrutura completa de análise em tempo real em cima do Flink, incluindo os mecanismos para gerenciar o tempo, como o processamento de eventos fora de ordem, a definição de janelas e a manutenção e atualização do estado definido pelo usuário. A API de tempo real é baseada na noção de um DataStream, uma coleção (possivelmente ilimitada) imutável de elementos de um determi- nado tipo (CARBONE et al., 2015). O Flink distingue entre duas noções de tempo: tempo de evento (event-time), que denota o tempo em que um evento se origina (por exem- plo, o timestamp associado a um sinal proveniente de um sensor, como um dispositivo móvel) e tempo de processamento (processing-time), o qual é a hora do relógio da máquina que está processando os dados (CARBONE et al., 2015). 35 O Flink inclui uma terceira noção de tempo como um caso especial de tempo de evento chamado ingestion-time, que é o momento em que os eventos entram no Flink (CARBONE et al., 2015). Os cálculos incrementais sobre fluxos ilimitados são frequentemente avaliados em visualizações lógicas em constante evolução, chamadas ja- nelas. O Flink incorpora janelas dentro de um operador com estado que é configurado através de uma declaração flexível compostas por três funções principais: um atributo de janela e, opcionalmente, um gatilho e um evictor (CARBONE et al., 2015). Enquanto a maioria dos operadores da API DataStream do Flink se parecem com operadores funcionais e sem efeitos colaterais, eles forne- cem suporte para cálculos eficientes e com estado. As janelas de fluxo (Stream windows) são operadores com estado que atribuem registros a buckets atualizados continuamente na memória como parte do estado do operador (CARBONE et al., 2015). O mecanismo de controle do Flink garante que qualquer estado regis- trado seja durável com uma semântica de atualização exatamente uma vez (CARBONE et al., 2015). As iterações assíncronas cobrem as necessidades de comunicação para aplicativos em tempo real e diferem dos problemas de otimização pa- ralela baseados em iterações estruturadas em dados finitos. O modelo de execução do Flink já abrange iterações assíncronas, quando nenhum mecanismo de controle de iteração está habilitado (CAR- BONE et al., 2015). 36 Processamento Em Lotes No Flink Um conjunto de dados delimitados é um caso especial de um fluxo de dados ilimitado. Assim, um programa em tempo real que insere todos os seus dados de entrada em uma janela pode formar um programa em lote e o proces- samento em lotes deve ser totalmente coberto pelos recursos do Flink. No entanto, a sintaxe (ou seja, a API para computação em lotes) pode ser simplificada (por exemplo, não há necessidade de definições de janela global artificial) e os programas que processam conjuntos de dados limita- dos são passíveis de otimizações adicionais, mantendo a tolerância a fa- lhas e agendamento por etapas. O Flink aborda o processamento em lotes da seguinte maneira: • A computação em lotes é executada pelo mesmo runtime que a com- putação em tempo real (CARBONE et al., 2015); • O snapshotting periódico é desativado quando a sobrecarga é alta (CARBONE et al., 2015); • Os operadores de bloqueio (por exemplo, sorts) são simplesmente implementações do operador que passam a bloquear até que tenham con- sumido toda a sua entrada (CARBONE et al., 2015); • Uma API de DataSet dedicada fornece abstrações familiares para computação em lotes, nomeadamente uma estrutura de dados de DataSet tolerante a falhas limitadas e transformações em DataSets (por exemplo, junções, agregações, iterações); • Uma camada de otimização de consulta transforma um programa DataSet em um executável eficiente (CARBONE et al., 2015). 37 Módulos extras O Flink possui quatro grandes bibliotecas criadas nas principais APIs dele. São elas: • Gelly: é o sistema de processamento de grafos no Flink. Contém métodos e utilitários para o desenvolvimento de aplicações de análise de grafos (GARCÍA-GIL et al., 2017); • FlinkML: esta biblioteca pretende fornecer um conjunto de algoritmos ML escaláveis e uma API intuitiva. Ele contém algoritmos para aprendiza- gem supervisionada, aprendizado sem supervisão, pré-processamento de dados, recomendação e outros utilitários (GARCÍA-GIL et al., 2017); • API Table e SQL: é uma linguagem de expressão semelhante ao SQL para processamento em tempo real e em lotes que pode ser incorpo- rado nas API de dados do Flink (GARCÍA-GIL et al., 2017); • FlinkCEP: é a biblioteca de processamento de eventos complexos. Permite detectar padrões de eventos complexos em em tempo real (GAR- CÍA-GIL et al., 2017). SoftwaresAuxiliares Para Computação Distribuída Nesta Seção serão apresentados os softwares Kafka e Zookeeper. Sendo citados detalhes da arquitetura utilizada por cada um deles, bem como as suas principais características. 38 Kafka Kafka combina os benefícios dos agregadores tradicionais de regis- tros e sistemas de mensagens. Por um lado, o Kafka é distribuído e esca- lável e oferece alto throughput (JUNIOR et al., 2018). Por outro lado, o Kafka fornece uma API semelhante a um sistema de mensagens e permite que os aplicativos consumam eventos em tempo real (KREPS et al., 2011). Arquitetura Um fluxo de mensagens de um tipo específico é definido por um tópico (topic). Um produtor publica as mensagens em um tópico. As mensagens publicadas são armazenadas em um conjunto de ser- vidores chamados brokers. Um consumidor pode assinar um ou mais tópi- cos dos brokers e consumir as mensagens dos tópicos assinadas, obtendo dados dos brokers (KREPS et al., 2011). Como o Kafka é distribuído por natureza, um cluster Kafka geralmente consiste em vários brokers. Para equilibrar a carga, um tópico é dividido em várias partições e cada broker armazena uma ou mais dessas partições. Vários produtores e consumidores podem publicar e recuperar mensagens ao mesmo tempo (KREPS et al., 2011). Características As principais características do Kafka são: 1. Armazenamento simples: o Kafka tem um layout de armazena- mento muito simples. Cada partição de um tópico corresponde a um log lógico. Fisicamente, um log é implementado como um conjunto de seg- mento de arquivos com aproximadamente o mesmo tamanho. Toda vez 39 que um produtor publica uma mensagem em uma partição, o broker sim- plesmente anexa a mensagem ao último segmento de 36 arquivo (KREPS et al., 2011); 2. Transferência eficiente: o produtor pode enviar um conjunto de mensagens em uma única solicitação de envio (KREPS et al., 2011); 3. Broker sem estado: no Kafka, as informações sobre quanto cada consumidor consumiu não são mantidas pelo broker, mas pelo próprio con- sumidor (KREPS et al., 2011); 4. Coordenação Distribuída: Kafka tem o conceito de grupos de con- sumidores (consumer groups). Cada grupo de consumidores consiste em um ou mais consumidores que consomem conjuntamente um conjunto de tópicos inscritos, ou seja, cada mensagem é entregue a apenas um dos consumidores dentro do grupo. O objetivo é dividir as mensagens armaze- nadas nos brokers entre os consumidores, sem introduzir muita sobrecarga de coordenação. Para facilitar a coordenação, o Kafka utiliza o Zookeeper. O Kafka usa o Zookeeper para as seguintes tarefas: (1) detectar a adição e remoção de brokers e consumidores, (2) desencadear um processo de reequilíbrio em cada consumidor quando os eventos acima ocorrerem e (3) manter a relação de consumo e acompanhar o deslocamento con- sumido de cada partição (KREPS et al., 2011); 4. Garantias de Entrega: Em geral, o Kafka garante apenas a semân- tica pelo menos uma vez. Na maioria das vezes, uma mensagem é entre- gue exatamente uma vez para cada grupo de consumidores. O Kafka garante que as mensagens de uma única partição sejam en- tregues a um consumidor na ordem correta. 40 Para evitar a corrupção de logs, o Kafka armazena um CRC para cada mensagem no log. Se houver algum erro de E/S no broker, o Kafka execu- tará um processo de recuperação para remover as mensagens com CRCs inconsistentes. Se um broker ficar inativo, qualquer mensagem armazenada nele ainda não consumida ficará indisponível (KREPS et al., 2011). ZooKeeper O ZooKeeper tem uma abordagem livre de espera para o problema de coordenar processos em sistemas distribuídos, expondo objetos sem esperas a clientes. O ZooKeeper alcança throughput de centenas de milhares de opera- ções por segundo para cargas de trabalho de leitura usando leituras rápi- das com relógios, ambos servidos por réplicas locais (HUNT et al., 2010). Arquitetura O cliente (client) denota o usuário do serviço ZooKeeper, o servidor (server) denota um processo que fornece o serviço ZooKeeper e o znode denota um nó com dados em memória que contém os dados do ZooKeeper, e que é organizado em um namespace hierárquico chamado de árvore de dados (data tree). Os termos update e write se referem a qualquer operação que modifique o estado da árvore de dados. Os clientes estabelecem uma sessão quando se conectam ao Zoo- Keeper e obtêm um identificador de sessão pelo qual eles emitem solicita- ções (HUNT et al., 2010). 41 Características As principais características do ZooKeeper são: 1. Modelo de dados: O modelo de dados do ZooKeeper é essencial- mente um sistema de arquivos com uma API simplificada e apenas leituras e gravações completas de dados. O namespace hierárquico é útil para alocar subárvores para o names- pace de aplicativos diferentes e para definir direitos de acesso a essas su- bárvores. Os znodes mapeiam para abstrações os aplicativos do cliente, nor- malmente correspondendo a metadados usados para propósitos de coor- denação. Os znodes também possuem metadados associados a carimbos de data e hora e contadores de versão, que permitem aos clientes rastrear alterações nos znodes e executar atualizações condicionais com base na versão do znodes (HUNT et al., 2010); 2. Sessões: As sessões têm um tempo limite associado. O Zoo- Keeper considera um cliente defeituoso se ele não receber nada de sua sessão por mais que o tempo limite. Uma sessão termina quando os clientes fecham explicitamente um identificador de sessão ou o ZooKeeper detecta que um cliente está com defeito (HUNT et al., 2010); 3. Garantias: O ZooKeeper tem duas garantias básicas de pedidos: gravações linearizáveis; fila FIFO onde todos os pedidos de um deter- minado cliente são executados na ordem em que foram enviados (HUNT et al., 2010). 42 REFERÊNCIAS ADMINISTRATION, T. U. E. I. Prices and Factors Affecting Prices. 2018. . Acessado Novembro 25, 2018. ALEXANDROV, A. et al. The stratosphere platform for big data ana- lytics. The VLDB Journal, Springer, v. 23, n. 6, p. 939–964, 2014. AMAZON.COM. NVIDIA Jetson TX2 Development Kit. 2018. . Aces- sado Novembro 25, 2018. Anjos, J. C. S. et al. Enabling strategies for big data analytics in hybrid infrastructures. In: 2018 International Conference on High Performance Computing Simulation (HPCS). [S.l.: s.n.], 2018. p. 869–876. BARROSO, L. A.; CLIDARAS, J.; HÖLZLE, U. The datacenter as a computer: An introduction to the design of warehouse-scale machines. Syn- thesis lectures on computer architecture, Morgan & Claypool Publishers, v. 8, n. 3, p. 1–154, 2013. BOSE, R.; FREW, J. Lineage retrieval for scientific data processing: a survey. ACM Computing Surveys (CSUR), ACM, v. 37, n. 1, p. 1–28, 2005. CARBONE, P. et al. Apache flink: Stream and batch processing in a single engine. Bulletin of the IEEE Computer Society Technical Committee on Data Engineering, IEEE Computer Society, v. 36, n. 4, 2015. CHEN, C. P.; ZHANG, C.-Y. Data-intensive applications, challenges, techniques and technologies: A survey on big data. Information Sciences, Elsevier, v. 275, p. 314–347, 2014. CHEN, M.; MAO, S.; LIU, Y. Big data: A survey. Mobile networks and applications, Springer, v. 19, n. 2, p. 171–209, 2014. 43 CHENEY, J. et al. Provenance in databases: Why, how, and where. Foundations and Trends R in Databases, Now Publishers, Inc., v. 1, n. 4, p. 379–474, 2009. DEAN, J.; GHEMAWAT, S. Mapreduce: simplified data processing on large clusters. Communications of the ACM, ACM, v. 51, n. 1, p. 107–113, 2008. DONG, X. L.; SRIVASTAVA, D. Big data integration. In: IEEE. Data Engineering (ICDE), 2013 IEEE 29th International Conference on. [S.l.], 2013. p. 1245–1248.DUSTY-NV. Tegra Parker Block Diagram.png. 2018. Acessado No- vembro 24, 2018. EBRAHIMI, K.; JONES, G. F.; FLEISCHER, A. S. A review of data center cooling technology, operating conditions and the corresponding low- grade waste heat recovery opportunities. Renewable and Sustainable En- ergy Reviews, Elsevier, v. 31, p. 622–638, 2014. FOUNDATION, A. S. Apache Hadoop 3.1.0. 2018. . Acessado Abril 25, 2018. GEORGAKOUDIS, G. et al. Nanostreams: Codesigned microservers for edge analytics in real time. In: IEEE. Embedded Computer Systems: Ar- chitectures, Modeling and Simulation (SAMOS), 2016 International Confer- ence on. [S.l.], 2016. p. 180–187. GHEMAWAT, S.; GOBIOFF, H.; LEUNG, S.-T. The Google file sys- tem. [S.l.]: ACM, 2003. v. 37. HASHEM, I. A. T. et al. The rise of “big data” on cloud computing: Review and open research issues. Information Systems, Elsevier, v. 47, p. 98–115, 2015. HITZLER, P.; JANOWICZ, K. Linked data, big data, and the 4th para- digm. Semantic Web, v. 4, n. 3, p. 233–235, 2013. 44 KALYANASUNDARAM, J.; SIMMHAN, Y. Arm wrestling with big data: A study of commodity arm64 server for big data workloads. In: Proc. IEEE 24th International Conference on High Performance Computing (HiPC). [S.l.: s.n.], 2017. p. 203–212. KAMBATLA, K. et al. Trends in big data analytics. Journal of Parallel and Distributed Computing, Elsevier, v. 74, n. 7, p. 2561–2573, 2014. KOROMILAS, E. et al. Spark acceleration on fpgas: A use case on machine learning in pynq. In: IEEE. Modern Circuits and Systems Technologies (MO- CAST), 2017 6th International Conference on. [S.l.], 2017. p. 1–4. LANDSET, S. et al. A survey of open source tools for machine learning with big data in the hadoop ecosystem. Journal of Big Data, Springer, v. 2, n. 1, p. 24, 2015. LANEY, D. 3d data management: Controlling data volume, velocity and variety. META Group Research Note, v. 6, n. 70, 2001. LEICH, M. et al. Applying stratosphere for big data analytics. In: BTW. [S.l.: s.n.], 2013. p. 507–510. MANYIKA, J. et al. Big data: The next frontier for innovation, competi- tion, and productivity. 2011. MEDIA, I. O. Big Data Now: 2014 Edition. [S.l.]: O’Reilly Media, 2015. MENG, X. et al. Mllib: Machine learning in apache spark. The Journal of Machine Learning Research, JMLR. org, v. 17, n. 1, p. 1235–1241, 2016. MISRA, P.; SIMMHAN, Y.; WARRIOR, J. Towards a practical archi- tecture for the next generation internet of things. arXiv preprint arXiv:1502.00797, 2015. NESHATPOUR, K. et al. Energy-efficient acceleration of big data an- alytics applications using fpgas. In: IEEE. Big Data (Big Data), 2015 IEEE International Conference on. [S.l.], 2015. p. 115–123. 45 PADOIN, E. L. et al. Time-to-solution and energy-to-solution: a com- parison between arm and xeon. In: IEEE. Applications for Multi-Core Archi- tectures (WAMCA), 2012 Third Workshop on. [S.l.], 2012. p. 48–53. SAMOSIR, J.; INDRAWAN-SANTIAGO, M.; HAGHIGHI, P. D. An evaluation of data stream processing systems for data driven applications. Procedia Computer Science, Elsevier, v. 80, p. 439–449, 2016. SHAHRIVARI, S. Beyond batch processing: towards real-time and streaming big data. Computers, Multidisciplinary Digital Publishing Institute, v. 3, n. 4, p. 117–129, 2014. SHI, W. et al. Edge computing: Vision and challenges. IEEE Internet of Things Journal, IEEE, v. 3, n. 5, p. 637–646, 2016. VARGHESE, B. et al. Challenges and opportunities in edge compu- ting. arXiv preprint arXiv:1609.01967, 2016. VAVILAPALLI, V. K. et al. Apache hadoop yarn: Yet another resource negotiator. In: ACM. Proceedings of the 4th annual Symposium on Cloud Computing. [S.l.], 2013. p. 5. WHITE, T. Hadoop: The definitive guide. [S.l.]: "O’Reilly Media, Inc.", 2012. XILINX. PYNQ: PYTHON PRODUCTIVITY FOR ZYNQ. 2018. . Aces- sado Abril 27, 2018. XU, S. S.-D.; CHANG, T.-C. A feasible architecture for arm-based mi- croserver systems considering energy efficiency. IEEE Access, IEEE, v. 5, p. 4611–4620, 2017. YI, S.; LI, C.; LI, Q. A survey of fog computing: concepts, applications and issues. In: ACM. Proceedings of the 2015 workshop on mobile big data. [S.l.], 2015. p. 37–42. 46 ZAHARIA, M. et al. Resilient distributed datasets: A fault-tolerant ab- straction for in-memory cluster computing. In: USENIX ASSOCIATION. Pro- ceedings of the 9th USENIX conference on Networked Systems Design and Implementation. [S.l.], 2012. p. 2–2. ZAHARIA, M. et al. Spark: Cluster computing with working sets. Hot- Cloud, v. 10, n. 10-10, p. 95, 2010. ZIKOPOULOS, P.; EATON, C. et al. Understanding big data: Analytics for enterprise class hadoop and streaming data. [S.l.]: McGraw-Hill Osborne Media, 2011. 47
Compartilhar