Como manter os dados que fazem sentido de serem processados juntos? • Divisão de carga entre os processo, ou seja, qual a carga de dados que cada computador vai executar? • Se hover “desbalanceio", a computação atrasa; • A computação só termina quando todos os processos estão finalizados;
• abstração de analises sofisticadas • nasceu da academia em Berkeley, 2009 • open source 2010 • fácil/rápido/escalável/framework para cluster computing • o core é escrito em scala (jvm) • apis completas para Python e o resto (Java/Scala/R) • um projeto muito ativo desde 2014
as funções de Map e Reduce; • evita mover dados durante o processamento, • “cachea” dados em memória e processamento proximo do tempo real. • detem dados intermediários em memória, para processar o mesmo conjunto de dados varias vezes • o disco é usado quando a memória acaba. • REPL
Python) • Armazenamento de dados - Usa o HDFS para armezar os dados, ou seja, consegue processar nativamente qualquer dado compatível. • Framework de gerenciamento - Gestão da infraestrutura.
com uma worker thread (sem paralelismo) local[K] roda o spark com K worker threads (idealmente o numero de cores da maquina) spark://HOST:PORT conecta em um cluster spark, a porta default é 7077 mesos://HOST:PORT conecta em um cluster mesos, a porta default 5050
dados em memória; • cada maquina do cluster guarda pedaços dos dados e reusa em futuras operações, o que faz o Spark ser até 100x mais rápido em futuras operações; • o cache é tolerante a falhas, se qualquer maquina ou partição enfrentar problemas, será automaticamente recomputado;
na JVM, se o objeto não couber na memória, as partições que não couberem não serão armazenadas e serão recomputadas em tempo de execução; MEMORY_AND_DISK mesmo que o MEMORY_ONLY mas, se os dados não couberem na memória, serão persistidos em disco. MEMORY_ONLY_SER mesmo que o MEMORY_ONLY mas armazena um objeto serializado em memória. Tende a ser mais eficiente, mas consome mais CPU. MEMORY_AND_DISK_SER mesmo que MEMORY_ONLY_SER, mas, se os dados não couberem na memória, serão persistidos em disco. DISK_ONLY armazena somente em disco MEMORY_ONLY_2 MEMORY_AND_DISK_2 exatamente mesma coisa que as informações acima, porem replica a partição em 2 nós.
filter(f) filtra um rdd baseada em uma função flatMap(f) igual ao map, mas entrega uma collection flat union(rdd) une dois rdd's distinct() realiza um distinção de valores baseado em uma cahve groupByKey() agrega valores pela key de uma tupla reduceByKey(f) agrega uma rdd baseada em uma funcao com retorno de um key
recebe dois argumentos e retorna um. collect() retorna todos elementos de rdd count() conta os elementos de um rdd first() primeiro registro do rdd take(n) retornar n valores do rdd saveAsTextFile(path) save o rdd para um arquivo texto
Permitem soma e contagens eficientes em tarefas com paralelismo; • Permite tipos númericos ou collections; • Pode ser extendido; • SOMENTE O DRIVER CONSEGUE LER O ACCUMULADOR;