Apache Spark is a unified analytics engine for large-scale data processing.
Distribuição comercial do Apache Spark.
Databricks adds enterprise-grade functionality to the innovations of the open source community. As a fully managed cloud service, we handle your data security and software reliability.
Executa processamento de dados até 100 vezes mais rápido que o MapReduce tradicional.
They used Spark and sorted 100TB of data using 206 EC2 i2.8xlarge machines in 23 minutes. The previous world record was 72 minutes, set by a Hadoop MapReduce cluster of 2100 nodes.
https://spark.apache.org/news/spark-wins-daytona-gray-sort-100tb-benchmark.html
Velocidade de acesso:
Cache > RAM > Disco
Tipos de memória. Créditos: esmerycornielle@medium
Spark, diferentemente do MapReduce, traz os dados para RAM. Isso diminui consideravelmente o tempo de transformação dos dados.
Trata-se, portanto, de um framework in-memory.
- Scala
- Java
- Python
- R
- SQL
Arquitetura do Apache Spark. Créditos: Documentação
Driver Node contém o Spark Context, responsável por gerir os recursos a serem utilizados no processamento dos dados
- Worker Node = um nó (máquina) do cluster
- Cada Worker Node pode conter um ou mais Executors
- Cada Executor processa uma ou mais Tasks
- Executors avisam ao Spark Context o progresso de suas Tasks
- Caso um Executor deixe de responder (máquina caiu) o Spark Context consegue criar novos Executores em outro Worker Node para resumir o processamento interrompido
Apache Spark pode ser quebrado em cinco bibliotecas:
- SparkSQL Processamento de dados tabulares
- Spark Streaming Micro-batch de dados
- MLlib Machine Learning
- GraphX Dados em grafos
Todos são sustentados pelo Spark Core
Resilient Distributed Dataset é a principal abstração do Spark.
- Resilient: Dado pode ser recuperado facilmente em caso de falhas
- Distributed: Pode ser processado por diferentes máquinas
RDDs são imutáveis. Transformações sobre RDDs geram novas RDDs.
- Context
import org.apache.spark.SparkContext import org.apache.spark.SparkConf val conf = new SparkConf().setAppName("Simple Application") val sc = new SparkContext(conf)
- Leitura de dados
val df = spark.read.format("csv").option("sep",",").option("header","true").load("file:///home/everis/avengers.csv") insurance.show(10, false) val df_url = insurance.select("URL")
- Manipulação
df.select("field1","field2").show() df.select($"field1", $"field2"+1).show() df.groupBy("age").count().show()
- SQL
df.createOrReplaceTempView("av") spark.sql("SELECT Appearances FROM av where URL LIKE '%Iron_Man%'").show()
- UDF
User Defined Function
val squared = (s: Long) => { s * s } spark.udf.register("square", squared) spark.sql("SELECT square(Appearances) FROM av").show()
- UDF
User Defined Function
Spark wins Daytona Gray Sort 100TB Benchmark