Baixe o app para aproveitar ainda mais
Prévia do material em texto
30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 1/32 PROGRAMAÇÃO AVANÇADA EMPROGRAMAÇÃO AVANÇADA EM BIG DATABIG DATA PROGRAMAÇÃOPROGRAMAÇÃO AVANÇADA EM BIG DATAAVANÇADA EM BIG DATA Autor: Me. Ubiratan Roberte Cardoso Passos R e v i s o r : I s a b e l S i q u e i ra I N I C I A R 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 2/32 introduçãoIntrodução Desenvolver aplicações capazes de realizar a análise de dados, ou seja, programar para Big Data, não é uma tarefa muito simples, aliás, não existe simplicidade alguma nesse tipo de atividade. O que existe, para os programadores, são linguagens de programação e recursos (diversos) capazes de tornar “seu caminho” um pouco menos difícil, mas não fácil. A linguagem de programação Python é uma das ferramentas que facilita essa tarefa, pois além de ser simples, didática e muito fácil de aprender, é robusta e possui diversos recursos, adaptando-se rapidamente às novas necessidades do mercado. Outro recurso que auxilia os programadores no desenvolvimento de aplicações para análise de Big Data é o Google Spark. Com esses recursos à disposição, não é necessário ser um programador exímio para conseguir gerar resultados incríveis e desenvolver aplicações avançadas para a análise de Big Data. 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 3/32 A primeira observação que deve ser feita, antes mesmo que você possa iniciar os estudos sobre Spark, é compreender que o Spark não é uma iniciativa da Google. O Spark, na verdade, é um framework de código aberto desenvolvido para prover recursos de computação distribuída. O Spark foi originalmente desenvolvido na Universidade da Califórnia (AMPLap). Posteriormente, o projeto foi passado para a Apache Software Foundation, responsável por mantê-lo até os dias atuais. O Spark é largamente utilizado por diversas organizações, o que é possível principalmente pelo fato de o framework oferecer uma interface para programação em clusters com paralelismo, que é totalmente tolerante a falhas. Essas características e sua licença aberta são os principais fatores para diversas descrições do Spark, tal como o Google Spark. Outra coisa que deve ser esclarecida é que, como dito anteriormente, esse framework é de código aberto, ou seja, qualquer desenvolvedor, empresa ou pessoa pode acessar e modi�car os códigos do framework. Sendo assim, é comum que diversas organizações adquiram e adaptem o código fonte do Spark para suas necessidades. SparkSpark 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 4/32 A tecnologia utilizada e os recursos fornecidos pelo Spark podem ser considerados até mesmo impressionantes, o que pode ser um dos motivos de seu grande sucesso. Zaharia vai dizer que: O processamento escalável de dados será essencial para a próxima geração de aplicativos de computador, mas normalmente envolve uma sequência complexa de etapas de processamento com diferentes sistemas de computação. Para simpli�car essa tarefa, o projeto Spark introduziu um modelo de programação uni�cado e mecanismos para aplicativos de big data (ZAHARIA, 2016. p. 65). O que podemos perceber, é que o Spark surge trazendo simplicidade a um procedimento já importante, mas que ainda não atingiu todo o seu potencial. Apache Spark O Apache Spark não é um software aplicativo, mas sim uma tecnologia que permite a realização de computação em cluster de forma extremamente rápida. O projeto Spark tem como base o Hadoop, mais especi�camente da tecnologia MapReduce, encontrada no Hadoop. Observando a estrutura do Spark e sua de�nição, pode-se dizer inclusive que o que se faz é uma extensão do MapReduce, permitindo que esse possa ser utilizado de forma mais e�ciente em mais tipos de cálculos, incluindo processamento de �uxo e consultas interativas (ZAHARIA et al., 2010). Uma importante característica do Spark é que ele permite que a computação em cluster ocorra na memória, o que aumenta consideravelmente a velocidade de processamento das aplicações executadas por ele. O projeto foi desenvolvido para ser capaz de cobrir uma ampla variedade de carga de trabalho, o que inclui algoritmos em lote, iterativos, consultas iterativas e streaming. Além disso, o Spark consegue reduzir a carga de gerenciamento necessária para que se possa manter ferramentas separadas (KARAU et al., 2015). O Apache Spark oferece uma série de recursos fundamentais para a computação em cluster, dentre os quais podemos citar (GU; LI, 2013): 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 5/32 Velocidade: permite que aplicativos sejam executados no Hadoop até 100x mais rápido na memória e 10x mais rápido em disco. Multi-linguagens: fornece uma API (em Java, Scala ou Python) com a capacidade de suportar diversas linguagens de programação. Análise Avançada: Além de um mapa de redução, o Spark suporta consultas SQL, dados de �uxo contínuo, aprendizado de máquina e algoritmos grá�cos. Como dito anteriormente, o Spark não é um aplicativo, mas sim uma tecnologia, um framework que executa sobre uma base Hadoop, para execução de aplicações em cluster, capaz de alavancar a execução de qualquer aplicação. Principais Características do Spark Além das que já foram citadas, outra características do Spark incluem seus componentes e a base sobre a qual foi construído. Em relação à sua constituição, o Spark é construído sobre o Hadoop, e isso �ca mais fácil de entender se observada a Figura 4.1 apresentada a seguir: Figura 4.1 - Diagrama SPARK Fonte: Adaptado de Jonnalagadda et al. (2016). 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 6/32 O diagrama apresentado na Figura 4.1 apresentou três maneiras de como o Spark pode ser criado com o Hadoop. A seguir, cada uma dessas formas é descrita: Independente (Standalone): nesse modelo, o Spark �ca na parte superior do HDFS (Hadoop Distributed File System), ou Sistema de Arquivos Distribuídos do Hadoop. Nesse caso, tanto o Spark quanto o MapReduce são executados em paralelo. Hadoop Yarn: nesse modelo, o Spark executa no Yarn, não é necessário instalação ou acesso ao root (raiz). Esse modelo ajuda o Spark a se integrar no ecossistema Hadoop e permite que outros componentes sejam executados no topo da pilha. Spark no MapReduce (SIMR): também chamado de Spark in Map Reduce, esse modelo é usado para iniciar o trabalho do Spark, além de permitir sua implantação autônoma. Utilizando o SIMR, o usuário pode iniciar o Spark utilizando o shell sem a necessidade de nenhum acesso administrativo. Além das questões relacionadas à constituição, ou seja, ao modelo de aplicação ou implantação do Spark, é de extrema importância conhecer também seus componentes. Os principais componentes do Spark são (GU; LI, 2013): Apache Spark Core: mecanismo geral de execução Spark, em que todos os demais componentes são construídos sobre ele. Fornece a computação em memória e as referências dos conjuntos de dados nos sistemas de armazenamento externo. Spark SQL: está no topo da pilha do Spark Core. Introduz uma abstração de dados conhecida como SchemaRDD, fornecendo suporte para dados estruturados e semiestruturados. Spark Streaming: permite a realização de streaming analytics através da utilização da capacidade de agendamento rápido do Spark Core. Ignora dados em mini-lotes e executa o RDD (Resilient Distributed Data) nesses mini-lotes. MLlib (Biblioteca de Machine Learning): trata-se de uma biblioteca de aprendizado de máquina que �ca em um nível superior ao Spark. É nove vezes mais rápido que a versão baseada em disco do Hadoop. GraphX: estrutura para processamento distribuído de grá�cos. Fornece umaAPI para expressar a computação grá�ca. 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 7/32 Como pode ser visto, ao a�rmarmos que o Spark não é um aplicativo, mas sim uma tecnologia, ou um framework que fornece capacidades de computação em cluster para qualquer tipo de aplicativo, estamos dizendo que o Spark é composto de uma série de componentes que interagem harmoniosamente entre si e com os aplicativos que dele faz uso. praticarVamos Praticar Entendendo que o Spark não é uma aplicação/software de computador, mas sim uma tecnologia, um framework, ou seja, um conjunto de componentes e códigos que interagem harmoniosamente entre si e fornecem interfaces para que outras aplicações utilizem de seus recursos, é correto a�rmar que: a) o Spark é um aplicativo criado pela Apache Foundation que permite a execução de outros aplicativos em cluster? Feedback: alternativa incorreta, pois o Spark não é um aplicativo, mas sim um framework que, sim, permite a execução de outras aplicações em cluster. b) desenvolvido pela Apache Foundation, o framework Spark permite que aplicações de alto desempenho sejam executadas em cluster. Feedback: alternativa correta, pois o Spark é sim um framework, agora sob domínio da Apache Foundation, que permite a utilização de paralelismo e computação distribuída para qualquer tipo de aplicação, permitindo inclusive paralelismo em cluster. c) trata-se de um componente de software que pode ser incluído em qualquer aplicativo para reduzir seu consumo de memória. 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 8/32 Feedback: alternativa incorreta, pois o Spark não é um componente de software, mas sim uma coleção de componentes e interfaces, formando, dessa forma, um framework. d) trata-se de um framework, atualmente sob o controle da Apache Foundation, criado especi�camente para o desenvolvimento de aplicações web. Feedback: alternativa incorreta, pois o Spark é sim um framework, mas não para desenvolvimento de aplicações web, e sim para permitir que aplicações possam executar de forma distribuída em clusters. e) o Spark tem como principal característica o fornecimento de uma interface que permite a execução de comandos SQL em dados estruturados. Feedback: alternativa incorreta, pois uma das características ou funcionalidades oferecidas pelo Spark é uma interface para comandos SQL, mas sua principal característica é o fornecimento de computação distribuída em cluster e processamento em memória. 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 9/32 Ainda que o Spark não tenha sido desenvolvido unicamente para ser utilizado em aplicações de Big Data, essa é uma das principais aplicações do framework. Sua capacidade para lidar com alto volume de processamento, permitir a execução de aplicações de forma distribuída e em cluster, além da possibilidade de escalabilidade e outras características a tornam a preferida para manter e realizar análise de Big Data (CHEN, 2016). Sistemas de Big Data exigem grande capacidade de armazenamento e também processamento de dados. Não somente isso, como o crescimento desses sistemas ocorre em proporção quase exponencial, tornando-se necessária a utilização de tecnologias escaláveis e capazes de manter esses dados organizados, garantindo que seu acesso seja veloz e fornecendo suporte a diversas outras tecnologias. Tudo isso o Spark oferece, sendo esse é um dos principais motivos de ser tão utilizado por grandes corporações (CHEN, 2016). Uma característica fundamental do Spark é o conjunto Resiliente de Dados Distribuídos, Resilient Distributed Data (RDD) em inglês. O RDD pode ser de�nido como uma coleção distribuída de objetos imutáveis. Cada desses conjuntos é Aplicações doAplicações do SparkSpark 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 10/32 dividido em partições lógicas, sendo que cada uma dessas partições pode ser computada em diferentes clusters (SHANAHAN; DAI, 2015). Os RDDs podem ser criados de duas formas distintas, umas delas é paralelizando uma coleção existente em seu driver de programa. A outra é referenciando um sistema de armazenamento externo, tal como um sistema de arquivo compartilhado, HDFS, HBase ou qualquer outra fonte de dados que seja capaz de trabalhar com os formatos de entrada Hadoop. No Spark, o conceito de RDD é utilizado para que seja possível obter o MapReduce de forma mais rápida e e�ciente. Para entender o porquê de o RDD permitir tornar o MapReduce mais e�ciente, é preciso primeiro entender como ocorrem as operações do MapReduce. Compartilhamento de Dados no MapReduce A tecnologia MapReduce é amplamente utilizada para o processamento de grandes conjuntos de dados com algoritmos paralelos, para isso, o MapReduce os algoritmos são distribuídos em cluster. Essa técnica permite que os usuários escrevam cálculos paralelos, utilizando um conjunto de operadores de alto nível, sem que seja necessária a preocupação com a distribuição da carga de trabalho e as tolerâncias a erros (CHEN, 2016). Ainda que o MapReduce forneça tais recursos, na maioria das estruturas, a única forma de se reutilizar dados entre cálculos (dois trabalhos do MapReduce), é gravando-os em um local de armazenamento externo (HDFS, por exemplo). Mesmo que o MapReduce forneça uma estrutura com inúmeras abstrações para acesso aos recursos de um cluster, os usuários sempre precisam de mais. Aplicativos iterativos e interativos exigem que dados sejam compartilhados de forma rápida e com emprego de paralelismo. No MapReduce, devido às operações de replicação e à serialização de IO dos discos, o compartilhamento dos dados torna- se lento. A maioria dos aplicativos Hadoop gasta até 90% do tempo de 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 11/32 processamento realizando operações de leitura e gravação em HDFS (KARAU; WARREN, 2017). Compartilhamento de Dados Utilizando o RDD Como pode ser visto, quando o MapReduce é aplicado, o compartilhamento de dados se torna mais lento, o que ocorre principalmente devido à replicação e serialização das operações de entradas e saídas de disco. A maioria dos aplicativos Hadoop passa mais de 90% de seu tempo realizando operações de leitura e de escrita em HDFS (KARAU; WARREN, 2017). Tendo sido reconhecido esse problema, os pesquisadores da Apache Foundation desenvolveram uma estrutura especializada a qual chamaram de Apache Spark. A ideia principal dessa estrutura é a criação de Conjuntos Resilientes de Dados, os RDDs; uma das principais caraterísticas desses conjuntos é sua capacidade de suportar a computação de processos em memória. 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 12/32 Com isso, tornou-se possível armazenar o estado da memória como sendo um objeto que pode ser transferido entre trabalhos. Com essa técnica, o compartilhamento de dados passou a ser de 10 a 100 vezes mais rápido do que quando compartilhados em rede e no disco. reflitaRe�ita Uma a�rmação comum é de que o Apache Spark eleva a velocidade de processamento dos dados, principalmente por conseguir armazenar e compartilhar informações diretamente pela memória, não sendo necessário realizar operações de disco, o que pode representar 90% de seu tempo total de processamento. Sabe-se, porém, que a quantidade limitada de memória dos computadores dá-se pelo seu alto custo e que diversas aplicações, para que funcionem, dependem do uso dessa memória. Como então o Apache Spark pode garantir que as demais aplicações não sejam afetadas pelo seu constante uso da memória? Fonte: Shanahan e Dai (2015). 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller13/32 praticarVamos Praticar Um recurso fundamental do Apache Spark são os Conjuntos Resilientes de Dados, conhecidos pela sigla em inglês RDD (Resilient Distributed Dataset). Esses conjuntos são conhecidos por permitir que o Apache Spark realize de forma mais e�ciente a clusterização de algoritmos, permitindo, assim, que grandes volumes de dados sejam processados com mais agilidade. Sobre o Apache Spark e o RDD, é correto a�rmar que: a) a utilização do RDD permite que o Apache Spark opere entre 10 e 100 vezes mais rápido do que o Hadoop. Feedback: alternativa correta, pois ao permitir armazenar o estado de memória como objeto e compartilhar esses objetos, o RDD reduz o tempo gasto com processamentos de E/S e serialização e replicação de disco. b) a tecnologia MapReduce é mais e�ciente do que a técnica de RDD, principalmente por realizar serialização e replicação das E/S do disco. Feedback: alternativa incorreta, pois o fato de o MapReduce realizar a serialização e replicação das E/S do disco o torna menos e�ciente do que o RDD. c) o fato de a técnica de RDD permitir a gravação dos estados da memória como objeto o torna menos e�ciente do que o MapReduce. Feedback: alternativa incorreta, pois a gravação do estado da memória como objeto permite o compartilhamento dessa informação entre processos distintos, o que torna o RDD mais e�ciente do que o MapReduce. d) após compreenderem do problema causado pelo MapReduce, pesquisadores da Apache Foundation desenvolveram o RDD que substitui o MapReduce. Feedback: alternativa incorreta, pois o RDD não substitui, mas sim complementa/evolui a tecnologia MapReduce. 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 14/32 e) ao perceber os problemas causados pelo RDD, os pesquisadores da Apache Foundation desenvolveram a técnica de MapReduce. Feedback: alternativa incorreta, pois os pesquisadores da Apache Foundation desenvolveram a técnica de RDD justamente por causa dos problemas apresentados pelo MapReduce. 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 15/32 Como dito nos tópicos anteriores, o Spark foi desenvolvido para atuar em diversas plataformas e para oferecer suporte a diversas linguagens de programação. Sendo assim, tanto desenvolvedores que utilizam sistemas operacionais Linux, quanto os que utilizam Windows ou IOS podem usufruir dos benefícios do Spark (KARAU, 2015). Ainda que essa seja uma ferramenta largamente utilizada por empresas que mantêm e administram Big Datas, ela foi desenvolvida para que todos aqueles que precisam de alto desempenho na computação distribuída possam utilizá-la. Portanto, a ferramenta pode ser instalada em equipamentos considerados comuns ou servidores empresariais. No setor empresarial, os dois sistemas operacionais mais utilizados são os baseados em Linux e os sistemas Windows. Assim sendo, apresentaremos a seguir informações de como adquirir, instalar e con�gurar o Apache Spark para cada um desses tipos de sistemas. Implantação doImplantação do SparkSpark 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 16/32 Instalação do Apache Spark Iniciando pelo Windows, por (ainda) ser o sistema operacional mais utilizado no mundo, a instalação do Apache Spark no Windows deve seguir a seguinte sequência: 1. Como o Spark foi desenvolvido na linguagem Scala, necessariamente deve-se instalar seu interpretador. Para isso, siga as instruções a seguir: a) Adquira e instale o Scala. https://www.scala-lang.org/download/ b) Con�gure as variáveis de ambiente I. Variáveis do usuário 1. Variável: SCALA_HOME; 2. Valor: C:\Program Files (x86)\scala. II. Variáveis do sistema 1. Variável: PATH; 2. C:\Program Files (x86)\scala\bin. 2. Para que o Scala possa ser executado, é preciso ter instalada a máquina virtual java. Note que a versão do Java deve ser 8 ou superior. O JDK pode ser obtido a partir do seguinte link https://www.oracle.com/java/technologies/javase-jdk8- downloads.html a) Con�gure as variáveis de ambiente I. Variáveis do usuário 1. Variável: JAVA_HOME; 2. Valor: C:\Program Files\Java\jdk1.8.0_91. II. Variáveis do Sistema 1. Variável: PATH; 2. Valor: C:\Program Files\Java\jdk1.8.0_91\bin. 3. Agora instale o Spark (1.6.1). O Spark pode ser obtido no link http://spark.apache.org/downloads.html. Preferencialmente instale-o em um drive separado, tal como o drive D, por exemplo, D:\Spark. Note que o Spark é um servidor, então o ideal é que tenha toda uma partição somente para ele. a) Con�gure as variáveis de ambiente I. Variáveis do usuário 1. Variável: SPARK_HOME; https://www.scala-lang.org/download/ https://www.oracle.com/java/technologies/javase-jdk8-downloads.html http://spark.apache.org/downloads.html 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 17/32 2. Valor: D:\spark\spark-1.6.1-bin-hadoop2.6. II. Variáveis do Sistema 1. Variável: PATH; 2. Valor: D:\spark\spark-1.6.1-bin-hadoop2.6\bin 4. Agora é necessário instalar alguns componentes (utilitários) no Windows. Para isso, acesse o link https://github.com/steveloughran/winutils/tree/master/hadoop- 2.6.0/bin e copie o seu conteúdo para dentro da pasta D:\spark\spark-1.6.1-bin- hadoop2.6\bin. Feito isso, a instalação do Spark no Windows estará completa. Agora, pode-se seguir para a instalação do Spark no Linux. Nesse caso, o procedimento é um pouco mais simples. Instalações de aplicações em Linux geralmente são feitas por linhas de comando, sendo assim, basta seguir a seguinte sequência: 1. Atualize os pacotes do sistema linux: a. sudo apt update b. sudo apt -y upgrade 2. Instale a máquina virtual Java c. sudo apt install default-jdk (para o jdk padrão) Ou para o Java 8 a. sudo apt update b. sudo add-apt-repository ppa:webupd8team/java c. sudo apt update d. sudo apt install oracle-java8-installer oracle-java8-set-default 3. Instale o Apache Spark d. curl -O https://www-us.apache.org/dist/spark/spark-2.4.2/spark-2. 4.2-bin- hadoop2.7.tgz 4. Extraia os arquivos e. tar xvf spark-2.4.2-bin-hadoop2.7.tgz 5. Mova os arquivos para a pasta opt/spark f. sudo mv spark-2.4.2-bin-hadoop2.7/ /opt/spark https://github.com/steveloughran/winutils/tree/master/hadoop-2.6.0/bin https://www-us.apache.org/dist/spark/spark-2.4.2/spark-2 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 18/32 6. Con�gure o ambiente, abra o arquivo bashrc g. vim ~/.bashrc Adicione h. export SPARK_HOME=/opt/spark i. export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin Ative as alterações j. source ~/.bashrc Feito isso, o Spark estará instalado no Linux. É preciso lembrar que o Spark é um servidor e, sendo assim, após ser instalado ele deverá ser inicializado. Em máquinas Windows, o ideal é que o Spark seja instalado em uma partição diferente, pois para seu correto funcionamento pode ser necessário alterar o sistema de arquivos. A instalação no Linux não requer o mesmo, pois o Linux “lida” melhor com esse tipo de questão. praticarVamos Praticar Sabe-se que o Apache Spark foi desenvolvido para ser uma ferramenta multiplataforma e acessível tanto para grandes corporações, quanto para empresas de pequeno e médio porte, as quais desejam que suas aplicações executem grandes volumes de dados como alto desempenho. Sobre o Spark e sua portabilidade, é correto a�rmar que: a) o fato de o Apache Spark ter sido desenvolvido em Scala (uma linguagem totalmenteadaptativa a diversas plataformas) o torna uma ferramenta multiplataforma. Feedback: alternativa incorreta, pois não é a linguagem Scala que é adaptativa, mas sim a máquina virtual java que permite que a linguagem Scala seja interpretada em 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 19/32 vários sistemas operacionais. b) o Apache Spark foi desenvolvido na linguagem C, e essa é uma linguagem-mãe para praticamente todo sistema operacional. Por isso o Spark é multiplataforma. Feedback: alternativa incorreta, pois o Apache Spark foi desenvolvido em Scala e não em C, e a linguagem Scala pode ser interpretada pelo JVM, por isso o Spark é multiplataforma. c) o Apache Spark foi desenvolvido na linguagem Python, que é uma linguagem totalmente adaptativa em qualquer sistema operacional. Por isso, o Spark é multiplataforma. Feedback: alternativa incorreta, pois o Apache Spark foi desenvolvido em Scala e não em Python, e a linguagem Scala pode ser interpretada pelo JVM, por isso o Spark é multiplataforma. d) por ser desenvolvido em Scala e utilizar a máquina virtual Java como interpretador, o Apache Spark pode ser executado em qualquer sistema operacional. Feedback: alternativa correta, pois o principal motivo para que o Apache Spark seja multiplataforma, é o fato de utilizar a máquina virtual java como interpretador. e) o Apache Spark foi desenvolvido na linguagem Java, que é uma linguagem que pode ser executada em diversos sistemas operacionais. Por isso o Spark é multiplataforma. Feedback: alternativa incorreta, pois o Apache Spark foi desenvolvido em Scala e não em Java, e a linguagem Scala pode ser interpretada pelo JVM, por isso o Spark é multiplataforma. 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 20/32 Ainda que o projeto Apache Spark não tenha sido desenvolvido especi�camente para a análise de Big Datas, as características desse framework o tornam perfeito para essa operação, não somente para a análise, mas também manutenção de Big Datas. Big Datas crescem de maneira quase que exponencial, logo a escalabilidade é um fator importante e necessário, a análise de seus dados, por sua vez, torna-se mais complexa na medida em que os Big Datas crescem. Poder contar com um esquema robusto de computação distribuída pode agilizar o processo. A ideia não é ignorar outras tecnologias, mas sim integrá-las obtendo o melhor de cada uma. Vimos nas seções anteriores que o Spark não é um aplicativo, mas sim um framework que deve ser inicializado (para atuar como servidor), o que é feito pelo fato de o Spark executar sobre a plataforma do Hadoop. Como framework, o Spark oferece um conjunto signi�cativo de recursos (componentes) que permitem a realização de atividades de manipulação e processamento de dados de forma clusterizada (KARAU; WARREN, 2017). Análise de DadosAnálise de Dados com Sparkcom Spark 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 21/32 O Apache Spark, como pode ser visto até aqui, não somente fornece diversos serviços internos que permitem a execução de diversas atividades complexas, como também oferece uma série de bibliotecas para que programadores possam utilizar esses recursos em suas aplicações, sobretudo em aplicações de análise de dados. Apache Spark no Python O Apache Spark fornece aos programadores Python uma API (PySpark) que permite aplicar o modelo de programação do Spark no Python. Antes de iniciar a aplicação dos recursos do Spark no Python, é importante compreender ao menos o básico sobre a programação Scala, o que não deve ser muito difícil. Vejamos a seguir algumas informações extraídas do site o�cial do Apache Spark (APACHE, 2020a) saibamaisSaiba mais As possibilidades da aplicação do Apache Spark vão muito além da análise de Big Data, mesmo que para alguns esse seja o principal propósito do framework. João Paulo de Freitas Ramirez apresenta, em sua tese de doutorado, uma proposta de utilização do Apache Spark como escalonador distribuído de tarefas, o que é perfeitamente possível, devido às características do Spark e o que demonstra sua larga aplicabilidade em diversos outros campos. ACESSAR https://www.cos.ufrj.br/uploadfile/publicacao/2886.pdf 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 22/32 Antes de utilizar a biblioteca PySpark, é preciso compreender que existem algumas diferenças entre as APIs Python e Scala: O Python é dinâmico, assim sendo os RDDs podem conter objetos dos mais variados tipos; O PySpark (ainda) não suporta algumas chamadas de API, tal como lookup e arquivos que não sejam texto. Entretanto, é previsto que essas funcionalidades sejam futuramente disponibilizadas. Ademais, no PySpark, os RDDs são capazes de suportar os mesmos métodos que estão presentes no Scala, sendo, no entanto, que esses métodos recebem funções Python e retornam coleções para o Python. É possível inclusive que algumas funções sejam passadas por expressões lambda, como é apresentado no exemplo a seguir, que retorna todos os erros registrados no arquivo de log. logData = sc.textFile(logFile).cache() errors = logData.filter(lambda line: "ERROR" in line) Outro recurso permitido pela biblioteca PySpark, é a utilização da palavra chave def na transmissão de dados entre os objetos. Esse tipo de recurso permite que instruções lambda mais longas sejam utilizadas. Por exemplo: def is_error(line): return "ERROR" in line errors = logData.filter(is_error) O PySpark permite também que objetos sejam acessados em outros escopos, contudo, alterações realizadas nesses objetos não são propagadas de volta. Por exemplo: error_keywords = ["Exception", "Error"] 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 23/32 def is_error(line): return any(keyword in line for keyword in error_keywords) errors = logData.filter(is_error) Dessa forma o PySpark poderá enviar as funções aos jobs juntamente com qualquer outro objeto aos quais a função faz referência. Com isso, as classes serão serializadas e enviadas aos jobs pelo PySpark, contudo as próprias classes não serão automaticamente distribuídas entre os jobs. MLlib no Python A biblioteca MLib é uma implementação do Spark que fornece algumas funcionalidades muito comuns relacionadas ao aprendizado de máquina e testes e geradores de dados associados. Em sua versão atual, o MLlib fornece recursos como classi�cação binária, regressão, clustering e �ltragem colaborativa (KARAU; WARREN, 2017). Para que seja possível utilizar a biblioteca MLlib, algumas outras bibliotecas devem estar presentes, tal como a biblioteca de álgebra linear jblas. Como a jblas depende de algumas rotinas que são nativas do Fortran, pode haver a necessidade de se instalar a biblioteca de tempo de execução gfortran, mas somente se ela não estiver presente no projeto. Para utilizar o MLlib no Python, será preciso também que esteja presente a biblioteca NumPy em sua versão 1.7 ou superior (CHEN, 2016). Uma das funções oferecidas pelo MLlib é a operação matemática de regressão linear. Nesse tipo de problema, cada entidade recebe um rótulo com um valor real, sendo o objetivo prever rótulos mais próximos possíveis, sempre considerando os recursos numéricos que representam as entidades. Esse é um recurso muito utilizado em estatística, por exemplo, para ajudar a identi�car fatores que mais in�uenciam em determinados acontecimentos, ou seja, a relação existente entre as variáveis. Vejamos um exemplo extraído de Apache (2020b). 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 24/32 Esse exemplo demonstra como realizar a carga de dados de treinamento, submetendo-os à análise comoum RDD. Deve-se observar que o exemplo utiliza o LinearRegressionWithSGD para a criação de um modelo linear simples, capaz de prever valores de rótulos. Depois é calculado o erro quadrático médio o que permite avaliar qualidade de ajuste. Caso esses termos lhe pareçam estranhos, é altamente recomendado estudá-los, pois a análise de dados é altamente dependente da estatística. Seguindo o exemplo: import org.apache.spark.mllib.regression.LinearRegressionWithSGD import org.apache.spark.mllib.regression.LabeledPoint //carga de dados val data = sc.textFile("mllib/data/ridge-data/lpsa.data") val parsedData = data.map { line => val parts = line.split(',') LabeledPoint(parts(0).toDouble, parts(1).split(' ').map(x => x.toDouble).toArray) } //construindo o modelo val numIterations = 20 val model = LinearRegressionWithSGD.train(parsedData, numIterations) //treino e evolução do modelo val valuesAndPreds = parsedData.map { point => val prediction = model.predict(point.features) (point.label, prediction) 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 25/32 } val MSE = valuesAndPreds.map{ case(v, p) => math.pow((v - p), 2)}.reduce(_ + _)/valuesAndPreds.count println("training Mean Squared Error = " + MSE) Esse exemplo demonstra como é possível realizar uma análise de regressão linear. Para analisar e comparar os erros quadráticos médios, pode-se utilizar os métodos RidgeRegressionWithSGD e LassoWithSGD. praticarVamos Praticar Como um dos principais propósitos do Apache Spark é realmente servir a grandes servidores de Big Data, permitindo o escalonamento e também o processamento dos dados em clusters, também é possível encontrar, no Spark, algumas bibliotecas especí�cas para o aprendizado de máquina, como é o caso da MLlib, que oferece quatro funções. Sobre essas funções é correto a�rmar que: a) a função de Classi�cação Binária permite encontrar valores reais próximos ao valor de um determinado rótulo. Essa função permite também calcular o erro quadrático médio. Feedback: alternativa incorreta, pois a classi�cação binária é um problema de aprendizado supervisionado, relacionado à classi�cação de entidades em uma de duas categorias ou distintas. 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 26/32 b) a função de Regressão Linear permite classi�car as entidades em uma de duas categorias ou distintas. Feedback: alternativa incorreta, pois nesse tipo de problema cada entidade recebe um rótulo com um valor real, sendo o objetivo prever rótulos mais próximos possíveis, sempre considerando os recursos numéricos que representam as entidades. c) a função de Agrupamento agrupa subconjunto de entidades com base em algum critério de similaridade. Feedback: alternativa correta, pois o agrupamento refere-se a um problema de aprendizado não supervisionado, pelo qual pretendemos agrupar subconjuntos de entidades com base em alguma noção de similaridade. d) a função de Filtragem Colaborativa permite classi�car as entidades em uma de duas categorias ou distintas. Feedback: alternativa incorreta, pois a �ltragem colaborativa visa preencher entradas ausentes de uma matriz de associação de itens do usuário. e) a função de Classi�cação Binária agrupa subconjunto de entidades com base em algum critério de similaridade. Feedback: alternativa incorreta, pois a classi�cação binária é um problema de aprendizado supervisionado, relacionado à classi�cação de entidades em uma de duas categorias ou distintas. 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 27/32 indicações Material Complementar L IVRO Analítica de Dados com Hadoop: uma Introdução para Cientistas de Dados. Editora: Novatec. Autores: Benjamin Bengfort e Jenny Kim ISBN: 978-85-7522-521-9. Comentário: leitura indispensável para aqueles que iniciam no mundo da análise de dados. A linguagem do livro é técnica, mas não atrapalha o bom entendimento. É referência ao Hadoop, mas é preciso lembrar que o Spark tem o Hadoop como base. O livro apresenta conceitos básicos e intermediários, além de bons exemplos práticos. Para início de estudos, dê maior ênfase aos capítulos 2, 3 e 4. 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 28/32 WEB Quick Introduction to Apache Spark. Ano: 2016. Comentário: esse vídeo de aproximadamente 15 minutos apresenta uma ótima visão geral sobre o Apache Spark, o que é, sua estrutura e o que pode proporcionar aos seus usuários. Trata-se de uma das mais completas explicações sobre esse framework, conhecimento fundamental para que a ferramenta possa ser utilizada em seu potencial máximo. O vídeo está em inglês, mas pode ser utilizada a legenda em português. A C E S S A R https://www.youtube.com/watch?v=TgiBvKcGL24 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 29/32 conclusão Conclusão Apesar de ser uma tecnologia altamente utilizada e capaz de fornecer recursos incríveis, não somente para aplicação em sistemas de Big Data, mas para qualquer tipo de sistema que necessita de processamento clusterizado em paralelo, poucas são as literaturas referentes ao Apache Spark no Brasil. O que se pode observar é que, associando os recursos do Apache Spark, que oferece funções fundamentais para os procedimentos de análise de dados, com outros recursos relacionados a análise de dados e aprendizado de máquina do Python, pode-se criar estruturas para análise de Big Datas em grande volume, com grande capacidade de processamento e agilidade. referências Referências Bibliográ�cas CHEN, J. et al. A parallel random forest algorithm for big data in a spark cloud computing environment. IEEE Transactions on Parallel and Distributed Systems, v. 28, n. 4, p. 919-933, 2016. 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 30/32 GU, L.; LI, H. Memory or time: performance evaluation for iterative operation on hadoop and spark. In: INTERNATIONAL CONFERENCE ON HIGH PERFORMANCE COMPUTING AND COMMUNICATIONS, 10; INTERNATIONAL CONFERENCE ON EMBEDDED AND UBIQUITOUS COMPUTING, 2013, Zhangjiajie. Anais [...]. Zhangjiajie, 2013. p. 721-727. JONNALAGADDA, V. S. et al. A review study of apache spark in big data processing. International Journal of Computer Science Trends and Technology (IJCST), v. 4, n. 3, p. 93-98, 2016. KARAU, H. et al. Learning spark: lightning-fast big data analysis. O'Reilly Media, 2015. KARAU, H.; WARREN, R. High performance Spark: best practices for scaling and optimizing Apache Spark. O'Reilly Media, 2017. MACHINE Learning Library (MLlib). Spark, 2020a. Disponível em: https://spark.apache.org/docs/0.9.2/mllib-guide.html. Acesso em: 11 maio 2020. PYTHON Programming Guide. Spark, 2020b. Disponível em: https://spark.apache.org/docs/0.9.2/python-programming-guide.html. Acesso em: 11 maio 2020. RAMIREZ, J. P. de F. Escalonador distribuído de tarefas para o Apache Spark. 2018. Dissertação (Mestrado em Engenharia de Sistemas e Computação) – Universidade Federal do Rio de Janeiro, Rio de Janeiro, 2018. SHANAHAN, J. G.; DAI, L. Large scale distributed data science using apache spark. In: ACM SIGKDD INTERNATIONAL CONFERENCE ON KNOWLEDGE DISCOVERY AND DATA MINING, 21., 2015, Nova Iorque. Anais [...]. Nova Iorque, 2015. p. 2323-2324. ZAHARIA, M. et al. Apache spark: a uni�ed engine for big data processing. Communications of the ACM, v. 59, n. 11, p. 56-65, 2016. ZAHARIA, M. et al. Spark: cluster computing with working sets. HotCloud, v. 10, n. 10, p. 95, 2010. https://spark.apache.org/docs/0.9.2/mllib-guide.html https://spark.apache.org/docs/0.9.2/python-programming-guide.html 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller31/32 30/09/2020 Ead.br https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 32/32
Compartilhar