Buscar

04 Programação Avançada em Big Data

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Outros materiais