O Apache Spark é um mecanismo de processamento de dados de código aberto extremamente rápido para aplicações de aprendizado de máquina e IA que oferece velocidade, escalabilidade e programabilidade necessárias para big data.
O Apache Spark (Spark) lida facilmente com conjuntos de dados em larga escala e é um sistema de clustering de uso geral rápido, adequado para PySpark. Foi projetado para oferecer velocidade de computação, escalabilidade e programabilidade necessárias para big data, especialmente para streaming, processamento de grafos, análise de dados, aprendizado de máquina, processamento de dados em larga escala e aplicações de inteligência artificial (IA).
O mecanismo de análise do Spark processa dados de 10 a 100 vezes mais rápido que algumas alternativas, como Hadoop, em cargas menores. Ele escala distribuindo fluxos de processamento por grandes clusters de computadores, com paralelismo e tolerância a falhas integrados. Inclui APIs para linguagens populares entre analistas e cientistas de dados, como Scala, Java, Python e R.
O Spark é frequentemente comparado ao Apache Hadoop, e especificamente ao MapReduce, componente nativo de processamento de dados do Hadoop. A principal diferença entre Spark e MapReduce é que o Spark processa e mantém os dados na memória para etapas subsequentes, sem gravar ou ler do disco, o que resulta em velocidades de processamento muito maiores. (Você encontrará mais sobre como o Spark se compara e complementa o Hadoop em outra parte deste artigo.)
O Spark foi desenvolvido em 2009 no AMPLab da UC Berkeley. Atualmente, ele é mantido pela Apache Software Foundation e possui a maior comunidade de código aberto em big data, com mais de 1.000 colaboradores. Ele também é incluído como um componente essencial de diversas ofertas comerciais de big data.
O Apache Spark tem uma arquitetura hierárquica primária/secundária. O Spark Driver é o nó primário que controla o gerenciador de cluster, que gerencia os nós secundários e fornece os resultados dos dados ao cliente da aplicação.
Com base no código da aplicação, o Spark Driver gera o SparkContext, que trabalha com o gerenciador de cluster — seja o Standalone Cluster Manager do Spark ou outros, como Hadoop YARN, Kubernetes ou Mesos — para distribuir e monitorar a execução pelos nós. Ele também cria conjuntos de dados distribuídos resilientes (RDDs), que são a chave para a extraordinária velocidade de processamento do Spark.
Conjuntos de dados distribuídos resilientes (RDDs) são coleções tolerantes a falhas de elementos que podem ser distribuídos entre vários nós em um cluster e processados em paralelo. Os RDDs são uma estrutura fundamental no Apache Spark.
O Spark carrega dados referenciando uma fonte de dados ou paralelizando uma coleção existente com o método parallelize do SparkContext, armazenando dados em cache em um RDD para processamento. Uma vez que os dados são carregados em um RDD, o Spark executa transformações e ações nos RDDs na memória, o que é essencial para a velocidade do Spark. O Spark também mantém os dados na memória, a menos que o sistema fique sem memória ou o usuário decida gravar os dados em disco para persistência.
Cada conjunto de dados em um RDD é dividido em partições lógicas, que podem ser processadas em diferentes nós do cluster. E os usuários podem executar dois tipos de operações RDD: transformações e ações. As transformações são operações aplicadas para criar um novo RDD. As ações são usadas para instruir o Apache Spark a realizar cálculos e enviar o resultado de volta para o driver.
O Spark oferece suporte a uma variedade de ações e transformações nos RDDs. Essa distribuição é feita pelo Spark, para que os usuários não precisem se preocupar em calcular a distribuição correta.
Ao contrário do processo de execução em duas etapas do MapReduce, o Spark cria um grafo acíclico dirigido (DAG) para agendar tarefas e orquestrar os nós de trabalho em todo o cluster. Conforme o Spark processa e transforma dados durante a execução das tarefas, o escalonador de DAG promove eficiência ao organizar os nós de trabalho no cluster. Esse rastreamento de tarefas possibilita tolerância a falhas, pois reaplica as operações registradas nos dados de um estado anterior.
Além dos RDDs, o Spark manipula outros dois tipos de dados: DataFrames e Datasets.
DataFrames são as interfaces de programação de aplicações (APIs) estruturadas mais comuns e representam uma tabela de dados com linhas e colunas. Embora o RDD tenha sido um recurso crítico para o Spark, ele agora está no modo de manutenção. Devido à popularidade da Biblioteca de Aprendizado de Máquina (MLlib) do Spark, os DataFrames assumiram o papel de principal API para MLlib (um conjunto de algoritmos de aprendizado de máquina para escalabilidade, além de ferramentas para seleção de recursos e criação de pipelines de ML). É importante observar isso ao usar a API MLlib, pois os DataFrames fornecem uniformidade entre as diferentes linguagens, como Scala, Java, Python e R.
Os conjuntos de dados são uma extensão dos DataFrames que oferecem uma interface de programação orientada a objetos e com segurança de tipos. Os conjuntos de dados são, por padrão, uma coleção de objetos JVM com tipos definidos, diferente dos DataFrames.
O Spark SQL permite que os dados sejam consultados a partir de DataFrames e armazenamentos de dados SQL, como o Apache Hive. Quando executadas em outra linguagem, as consultas do Spark SQL retornam um DataFrame ou conjunto de dados.
O Spark Core é a base para todo processamento paralelo de dados e gerencia escalonamento, otimização, RDD e abstração de dados. O Spark Core fornece a fundação funcional para as bibliotecas do Spark, como Spark SQL, Spark Streaming, a biblioteca MLlib de aprendizado de máquina e o GraphX de processamento de grafos.
O Spark Core e o gerenciador de cluster distribuem e abstraem dados pelo cluster Spark. Essa distribuição e abstração tornam o manuseio de big data muito rápido e intuitivo.
O Spark inclui diversas interfaces de programação de aplicações (APIs) para levar o poder do Spark ao público mais amplo. O Spark SQL permite interagir com dados de RDD de forma relacional. O Spark também possui APIs bem documentadas para Scala, Java, Python e R. Cada API de linguagem no Spark apresenta nuances específicas em como trata dados. RDDs, DataFrames e Datasets estão disponíveis em cada API de linguagem.
Com APIs para tantas linguagens, o Spark torna o processamento de big data acessível a grupos diversos com experiências em desenvolvimento, ciência de dados, engenharia de dados e estatística.
O Spark acelera o desenvolvimento e as operações de várias formas. O Spark ajudará as equipes a:
Acelerar o desenvolvimento de aplicações: os modelos de programação Streaming e SQL do Apache Spark, com suporte de MLlib e GraphX, facilitam o desenvolvimento de aplicações que exploram aprendizado de máquina e análise de grafos.
Inovar mais rapidamente: as APIs oferecem facilidade de uso ao manipular dados semiestruturados e transformá-los.
Gerenciar com facilidade: um mecanismo unificado dá suporte a consultas SQL, dados de streaming, aprendizado de máquina (ML) e processamento de grafos.
Otimizar com tecnologias abertas: a OpenPOWER Foundation possibilita aceleração via GPU, CAPI Flash, RDMA, FPGA e inovação em aprendizado de máquina para otimizar o desempenho de cargas de trabalho do Apache Spark.
Processar mais rápido: o Spark pode ser até 100x mais rápido que o Hadoop em cargas menores, graças ao seu avançado mecanismo de computação em memória e armazenamento em disco.
Acelerar o acesso à memória: o Spark pode ser usado para criar um único espaço de memória para processamento de dados, permitindo que usuários avançados acessem dados via interfaces em Python, R e Spark SQL.
O Spark dispõe de várias bibliotecas que ampliam suas capacidades para aprendizado de máquina, inteligência artificial (IA) e processamento de streams.
Um dos recursos críticos do Apache Spark são as habilidades de aprendizado de máquina disponíveis no Spark MLlib, que oferece uma solução pronta para classificação e regressão, filtragem colaborativa, clustering, álgebra linear distribuída, árvores de decisão, florestas aleatórias, árvores com gradiente, mineração de padrões frequentes, métricas de avaliação e estatísticas.
Os recursos do MLlib, combinados com os vários tipos de dados, tornam o Apache Spark uma ferramenta de big data indispensável.
Além de ter recursos de API, o Spark GraphX foi projetado para resolver problemas de grafos O GraphX é uma abstração de grafo que estende RDDs para computação paralela em grafos. O Spark GraphX integra-se a bancos de dados de grafos que armazenam informações de interconectividade, como em redes sociais.
O Spark Streaming é uma extensão da API central do Spark que permite processamento escalável e tolerante a falhas de fluxos de dados ao vivo. À medida que o Spark Streaming processa os dados, pode entregá-los a sistemas de arquivos, bancos de dados e dashboards em tempo real para análises em streaming com os algoritmos de aprendizado de máquina e processamento de grafos do Spark.
Construído sobre o mecanismo Spark SQL, o Spark Streaming também possibilita processamento incremental em lotes, resultando em processamento mais rápido dos dados transmitidos.
“Spark vs. Hadoop” é um termo frequentemente pesquisado na web, mas, como mencionado acima, o Spark é mais uma melhoria sobre o Hadoop, e mais especificamente, sobre o componente nativo de processamento de dados do Hadoop, o MapReduce. De fato, o Spark é construído sobre o framework MapReduce, e hoje a maioria das distribuições Hadoop já inclui o Spark.
Assim como o Spark, o MapReduce permite que programadores criem aplicações que processam grandes conjuntos de dados em paralelo em grandes clusters. Mas enquanto o MapReduce processa dados no disco — adicionando tempos de leitura e gravação que retardam o processamento — o Spark realiza cálculos em memória, o que é muito mais rápido. Como resultado, o Spark pode processar dados até 100 vezes mais rápido que o MapReduce.
As APIs integradas do Spark para várias linguagens tornam-no mais prático e acessível para desenvolvedores do que o MapReduce, que tem reputação de ser difícil de programar. Diferente do MapReduce, o Spark pode executar aplicações de processamento de streams em clusters Hadoop usando o YARN, framework de gerenciamento de recursos e agendamento de tarefas do Hadoop. Como mencionado acima, o Spark adiciona os recursos do MLlib, GraphX e Spark SQL. E o Spark pode manipular dados de outras fontes fora do Hadoop, incluindo Apache Kafka.
Caso contrário, o Spark é compatível e complementar ao Hadoop. Ele pode processar dados do Hadoop, incluindo dados do HDFS (Hadoop Distributed File System), HBase (um banco não relacional que opera no HDFS), Apache Cassandra (uma alternativa NoSQL ao HDFS) e Hive (um data warehouse baseado em Hadoop).
Acelere a identificação de incidentes híbridos com análises operacionais quase em tempo real.
Libere resultados que mudem os negócios com soluções de análise de dados em nuvem que possibilitam a análise de dados com facilidade e a criação de modelos de aprendizado de máquina.
Conheça novos recursos e aumente a agilidade dos negócios com os serviços de consultoria em nuvem da IBM.