Upgrade to Pro — share decks privately, control downloads, hide ads and more …

big data disruptiva com python

big data disruptiva com python

Robson Júnior

October 17, 2016
Tweet

More Decks by Robson Júnior

Other Decks in Programming

Transcript

  1. BIG DATA DISRUPTIVA COM PYTHON / @BSAO @BSAO ▸ +13

    anos como desenvolvedor (+10 com python) ▸ senior data engineer @ vivareal.com ▸ contratando muito: https://jobs.lever.co/vivareal/ rupy brazil chairman
  2. BIG DATA É O IMENSO VOLUME DE DADOS ESTRUTURADOS OU

    NÃO QUE IMPACTAM O DIA A DIA DOS NEGÓCIOS.
  3. BIG DATA DISRUPTIVA COM PYTHON / @BSAO COMPUTAÇÃO DISTRIBUIDA ▸

    Problemas de big data não podem ser resolvidos apenas em um computador; ▸ Paralelizar; ▸ Distribuir; ▸ Processar mais dado em menos tempo;
  4. BIG DATA DISRUPTIVA COM PYTHON / @BSAO DESAFIOS 1. Falhas

    de Hardware; 2. Particionamento dos Dados; 3. Comunicação entre as maquinas e processos; 4. Escalonagem;
  5. BIG DATA DISRUPTIVA COM PYTHON / @BSAO FALHAS DE HARDWARE

    ▸ Falhas de Energia; ▸ Falhas de Memória; ▸ Falhas na Rede; ▸ Falhas no Disco;
  6. BIG DATA DISRUPTIVA COM PYTHON / @BSAO PARTICIONAMENTO ▸ Como

    dividir os dados em cada computador? ▸ 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;
  7. BIG DATA DISRUPTIVA COM PYTHON / @BSAO COMUNICAÇÃO ENTRE MAQUINAS

    E PROCESSOS ▸ Latência da Rede & Envio de mensagens; ▸ Comunicação dos resultados parciais;
  8. BIG DATA DISRUPTIVA COM PYTHON / @BSAO ESCALONAMENTO ▸ Quem

    vai executar o que? ▸ Qual a ordem de execução? ▸ Sincronização;
  9. BIG DATA DISRUPTIVA COM PYTHON / @BSAO HADOOP ▸ É

    um framework para processamento distribuído para enormes volumes de dados através de clusters de maquinas e modelo de programação simples; ▸ Engloba um ecossistemas de ferramentas; ▸ Primeiro release em Abril de 2006;
  10. HDFS HADOOP DISTRIBUTED FILE SYSTEM ‣ BASEADO NO PAPER DO

    GOOGLE (GOOGLE FILE SYSTEM) ‣ FILE SYSTEM DISTRÍBUIDO ‣ REDUNDANTE ‣ REPLICAS DE CADA PARTE DO ARQUIVO ‣ TOLERANTE A FALHAS ‣ BLOCOS ESTÃO DISTRIBUÍDOS POR TODA PARTE
  11. HDFS HADOOP DISTRIBUTED FILE SYSTEM ‣ ARMAZEMENTO ARQUIVOS DE GB

    A TB ‣ BAIXO CUSTO ‣ ESCALONAMENTO HORIZONTAL
  12. MAP-REDUCE ‣ GERENCIAMENTO DE RECURSOS ‣ PROCESSAMENTO ‣ PROVISIONAMENTO ‣

    PROCESSAMENTO DOS DADOS ONDE ELES ESTÃO ‣ TOLERANTE A FALHAS
  13. BIG DATA DISRUPTIVA COM PYTHON / @BSAO ‣Paralelizar a separação

    dos dados (map) www.cloudera.com ‣Redistribuição dos mapeamentos (shuffle) ‣Agregação (reduce)
  14. BIG DATA DISRUPTIVA COM PYTHON / @BSAO SUGESTÕES VIÁVEIS ▸

    mrjob ▸ luigi ▸ pyspark NÃO ABORDAREMOS HOJE ▸ pydoop ▸ hadoopy
  15. BIG DATA DISRUPTIVA COM PYTHON / @BSAO MRJOB ▸ Criado

    pelo yelp; ▸ Python 2.6+/3.3+; ▸ Permite criar vários steps; (um passo de map-reduce alimenta o próximo); ▸ Configuração baseada em arquivos (mrjob.conf) ▸ Suporte completo a AWS Elastic MapReduce; ▸ Roda no Google Cloud, e localmente para testes; ▸ pip install mrjob
  16. BIG DATA DISRUPTIVA COM PYTHON / @BSAO WORD_COUNT.PY from mrjob.job

    import MRJob import re WORD_RE = re.compile(r"[\w']+") class MRWordFreqCount(MRJob): def mapper(self, _, line): for word in WORD_RE.findall(line): yield (word.lower(), 1) def combiner(self, word, counts): yield (word, sum(counts)) def reducer(self, word, counts): yield (word, sum(counts)) https://github.com/Yelp/mrjob
  17. BIG DATA DISRUPTIVA COM PYTHON / @BSAO DEPLOY # localmente


    python word_count.py README.rst > counts # EMR
 python word_count.py README.rst -r emr > counts # google cloud
 python word_count.py README.rst -r dataproc > counts # hadoop cluster
 python word_count.py README.rst -r hadoop > counts
  18. BIG DATA DISRUPTIVA COM PYTHON / @BSAO MRJOB: CONCLUSÃO ▸

    Curva de aprendizado média (entender o hadoop é essencial) ▸ Boa flexibilidade ▸ Excelente para cloud computing ▸ Tarefas de alta complexidade ▸ Difícil customização ▸ Boa documentação
  19. BIG DATA DISRUPTIVA COM PYTHON / @BSAO LUIGI ▸ Python

    (2.7, 3.3, 3.4, 3.5); ▸ Criado pelo Spotify; ▸ Framework para gerenciamento de workflows de dados; ▸ Excelente para processamento em batch's; ▸ Suporte nativo ao hadoop; ▸ Menos completo que o mrjob; ▸ Integra com Spark Jobs; ▸ Agendamento de tarefas; ▸ Ativo desenvolvimento; ▸ Documentação ruim; ▸ pip install luigi
  20. BIG DATA DISRUPTIVA COM PYTHON / @BSAO HADDOP_TASK.PY class AggregateArtistsHadoop(luigi.contrib.hadoop.JobTask):

    date_interval = luigi.DateIntervalParameter() def output(self):
 return luigi.contrib.hdfs.HdfsTarget("data/artist_streams_%s.tsv" % self.date_interval) def requires(self):
 return [StreamsHdfs(date) for date in self.date_interval] def mapper(self, line):
 timestamp, artist, track = line.strip().split()
 yield artist, 1 def reducer(self, key, values):
 yield key, sum(values)
  21. BIG DATA DISRUPTIVA COM PYTHON / @BSAO TOP_ARTISTS.PY class Top10Artists(luigi.Task):


    date_interval = luigi.DateIntervalParameter()
 
 def requires(self):
 return AggregateArtistsHadoop(self.date_interval)
 
 def output(self):
 return luigi.LocalTarget("data/top_artists_%s.tsv" % self.date_interval) def run(self):
 top_10 = nlargest(10, self._input_iterator())
 with self.output().open('w') as out_file:
 for streams, artist in top_10:
 print >> out_file, self.date_interval.date_a, self.date_interval.date_b, artist, streams def _input_iterator(self):
 with self.input().open('r') as in_file:
 for line in in_file:
 artist, streams = line.strip().split()
 yield int(streams), int(artist)
  22. BIG DATA DISRUPTIVA COM PYTHON / @BSAO RODANDO luigi --module

    bsao.top_artists Top10Artists --local-scheduler --date-interval 2016-10
  23. BIG DATA DISRUPTIVA COM PYTHON / @BSAO LUIGI: CONCLUSÃO ▸

    Documentação ruim ▸ Curva de aprendizado pequena ▸ Muito flexível ▸ Generalista ▸ Fácil customização ▸ Integração com Spark e uma infinidade de ferramentas ▸ Desenvolvimento ativo
  24. BIG DATA DISRUPTIVA COM PYTHON / @BSAO SPARK ▸ Escrito

    em scala (JVM) ▸ Generalista (MapReduce, Graph, MBLib) ▸ Roda sobre hadoop; ▸ Open-source desde 2010 ▸ APIs completas para Java, Scala, R e Python ▸ Processamento em memória ▸ Totalmente interativo
  25. BIG DATA DISRUPTIVA COM PYTHON / @BSAO PYSPARK ▸ DSL

    completa ▸ Fácil aprendizado ▸ Documentação completa ▸ Desenvolvimento ativo ▸ Facil setup
  26. BIG DATA DISRUPTIVA COM PYTHON / @BSAO RDD - DATASETS

    DISTRIBUIDOS RESILIENTES ▸ Unidade fundamental do Spark ▸ Coleção de dados distribuida ▸ Tolerante a falhas ▸ Pode conter objetos Python ou Java
  27. BIG DATA DISRUPTIVA COM PYTHON / @BSAO SPARKCONTEXT ▸ Objeto

    porta de entrada para o mundo Spark ▸ Provisiona recursos ▸ Configuração
  28. driver worker Python SparkContext beatles = sc.textFile(‘storage/file’) py4j Java SparkContext

    sc = SparkContext() java executor task beatles = beatles.map(loads) Python Code Python Code task beatles = beatles.filter(lambda b: b[‘track_duration’] > 25000)
  29. BIG DATA DISRUPTIVA COM PYTHON / @BSAO WORD_COUNT.PY from pyspark

    import SparkContext sc = SparkContext() text_file = sc.textFile(“hdfs://host:port/path/file“) text_file.flatMap(lambda line: line.split())
 .map(lambda word: (word, 1))
 .reduceByKey(lambda a, b: a+b)
  30. BIG DATA DISRUPTIVA COM PYTHON / @BSAO PYSPARK: CONCLUSÃO ▸

    Excelente documentação ▸ Facil aprendizado (tanto spark como pyspak) ▸ Generalista ▸ Muito flexível ▸ Barato de manter
  31. BIG DATA DISRUPTIVA COM PYTHON / @BSAO CONCLUSÃO ▸ MRJob

    é bom para tarefas muito complexas, usuários da AWS ou cloudcomputing ou clusters hadoop legados ▸ Manutenção do cluster hadoop é complexa ▸ Luigi é excelente para gerenciamento de workflow de dados, integração com outras ferramentas e tarefas de baixa e média complexidade com haddop ▸ Integra com Spark ▸ Spark tem se tornado padrão de mercado, integra facilmente com outras ferramentas, roda sobre o haddop, facil apendizado; ▸ Serve para tarefas simples até alta complexidade; ▸ Vá de Spark e Luigi