INF550 - Computação em Nuvem I Apache Spark Islene Calciolari Garcia Instituto de Computação - Unicamp Julho de 2016 Sumário Revisão da aula passada... Objetivos HDFS MapReduce Ecossistema do Hadoop Spark RDDs e SparkContext Como testar? Revisão rápida de Python pyspark Laboratório Revisão da aula passada... Objetivos I Primeira parte do curso I I I Cloud computing Data centers Segunda parte do curso I I Modelo de Programação MapReduce Spark e Ecossistema do Hadoop Arquitetura do HDFS Fonte: http://hadoop.apache.org Anatomy of a File Read To get an idea of how data flows between the client interacting with HDFS, the name‐ HDFS node, and the datanodes, consider Figure 3-2, which shows the main sequence of events when reading a file. Leitura de arquivo Figure 3-2. A client reading data from HDFS The client opens the file it wishesFonte: to readHadoop—The by calling open()Definitive on the FileSystem object, Guide, Tom White which for HDFS is an instance of DistributedFileSystem (step 1 in Figure 3-2). DistributedFileSystem calls the namenode, using remote procedure calls (RPCs), to to understand the data flow because it clarifies HDFS’s coherency model. HDFS We’re going to consider the case of creating a new file, writing data to it, then closing theem file.arquivo This is illustrated in Figure 3-4. Escrita Figure 3-4. A client writing data to HDFS Fonte: Hadoop—The Definitive Guide, Tom White The client creates the file by calling create() on DistributedFileSystem (step 1 in MapReduce Visão colorida http://www.cs.uml.edu/~jlu1/doc/source/report/MapReduce.html Word Count http://www.cs.uml.edu/~jlu1/doc/source/report/img/MapReduceExample.png Ecossistema do Hadoop Ecossistema do Hadoop http://thebigdatablog.weebly.com/blog/the-hadoop-ecosystem-overview Hadoop 1.0 Fonte: http://hadoop.apache.org Hadoop 1.0 I JobTracker I I I Gerenciamento dos Task Trackers (recursos e falhas) Gerenciamento do ciclo de vida dos jobs TaskTracker I I iniciar e encerrar task enviar status para o JobTracker I Escalabilidade? I Outros modelos de programação? YARN Yet Another Resource Negotiator Fonte: http://hadoop.apache.org YARN I JobTracker estava sobrecarregado I I I I Gerenciamento de recursos Gerenciamento de aplicações Container: abstração que incorpora recursos como cpu, memória, disco, rede... ResourceManager I Escalonador de recursos I NodeManager I ApplicationMaster Testando o YARN $ sbin/start-yarn.sh $ bin/hadoop dfs -put input /input $ bin/yarn jar \ share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar \ wordcount /input /output $ bin/hadoop dfs -get /output output I Verifique os jobs em http://localhost:8088/ I Quando terminar de usar $ sbin/stop-yarn.sh Gerenciamento de múltiplas aplicações http://hortonworks.com/blog/apache-spark-yarn-ready-hortonworks-data-platform/ Define reducers Como o Spark tão mais For complex work,consegue chain jobs ser together rápido? Modelo de processamento MapReduce – Use a higher level language or DSL that does this for you Typical MapReduce Workflows Job 1 Last Job Job 2 © 2014 MapR Technologies Maps Reduces SequenceFile Input to Job 1 Maps Maps Reduces SequenceFile SequenceFile Output from Job 1 Reduces Output from Job 2 Input to last job Output from last job HDFS © 2014 MapR Technologies 37 Carol McDonald: An Overview of Apache Spark 1 Como oIterations Spark consegue ser tão mais rápido? Resilient Distributed Datasets Step Step Step Step Step In-memory Caching Carol McDonald: An Overview of Apache Spark • Data Partitions read from RAM instead of disk I RDD: principal abstração em Spark I Imutável I Tolerante a falhas © 2014 MapR Technologies Spark Programming Model SparkContext Driver Program sc=new SparkContext rDD=sc.textfile(“hdfs://…”) rDD.map SparkContext cluster Worker Node Task Worker Node Task Task Carol McDonald: An Overview of Apache Spark SparkContext Cluster overview http://spark.apache.org/docs/latest/cluster-overview.html SparkContext RDDs e partições Datasets (RDD) ient Distributed es around RDDs ant collection of on in parallel memory eley.edu/~matei/papers/ df http://www.cs.berkeley.edu/ ~matei/papers/2012/nsdi_spark.pdf © 2014 MapR Technologies 57 ���������������������������������������������������� Operações com RDDs ���������������������������������������������������� ������������������������������������������������� ���������������������������������������������� I Muito mais do que Map e Reduce ���������������������������������������� I Transformações e Ações I Processamento lazy das transformações ��������������� ��� ��� ��� ��� ������ ����� http://databricks.com Como testar? Como testar? Spark e Python I Spark pode facilmente ser utilizado com Scala, Java ou Python I I Veja Spark Quick Start Shells I I python shell pyspark Revisão rápida de Python Operações com Strings Comandos astring = "Spark" print astring print astring.len print astring[0] print astring[1:3] print astring[3:] print astring[0:5:2] print astring[::-1] Saı́da Spark 5 S pa rk Sak krapS Python: Mais operações com Strings Comandos line = " GNU is not Unix. line = line.strip() print line words = line.split() print words print words[1] Saı́da " GNU is not Unix. [’GNU’, ’is’, ’not’, ’Unix’] is Revisão rápida de Python Funções def soma(a,b): return a + b def mult(a,b): return a * b def invertString(s): return s[::-1] Revisão rápida de Python Funções lambda Funções que não recebem um nome em tempo de execução >>> lista = range(1,10) >>> print lista [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> def impar(i) : ... return i % 2 != 0 >>> [1, >>> [1, filter (impar, lista) 3, 5, 7, 9] filter (lambda x: x % 2 != 0, lista) 3, 5, 7, 9] pyspark orking With RDDs Primeiro SparkContext textFile = sc.textFile(”SomeFile.txt”) RDD Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ ‘/ __/ ’_/ /__ / .__/\_,_/_/ /_/\_\ /_/ Carol McDonald: An Overview of Apache Spark version 1.6.1 Using Python version 2.7.11 (default, Jun 20 2016 14:45:23) SparkContext available as sc, HiveContext available as sqlContext. >>> lines = sc.textFile("tcpdump.list"); © 2014 MapR Technologies 1998 DARPA Intrusion Detection Evaluation 1 2 3 4 5 7 8 9 10 11 13 Start Start Date Time 01/27/1998 00:00:01 01/27/1998 05:04:43 01/27/1998 06:04:36 01/27/1998 08:45:01 01/27/1998 09:23:45 01/27/1998 15:11:32 01/27/1998 21:53:17 01/27/1998 21:58:21 01/27/1998 22:57:53 01/27/1998 23:57:28 01/27/1998 25:38:00 Duration 00:00:23 67:59:01 00:00:59 00:00:01 00:00:01 00:00:12 00:00:45 00:00:01 26:59:00 130:23:08 00:00:01 Src Dest Src Dest Attack Serv Port Port IP IP Score Name ftp 1755 21 192.168.1.30 192.168.0.20 0.31 telnet 1042 23 192.168.1.30 192.168.0.20 0.42 smtp 43590 25 192.168.1.30 192.168.0.40 12.0 finger 1050 79 192.168.0.40 192.168.1.30 2.56 guess http 1031 80 192.168.1.30 192.168.0.40 -1.3 sunrpc 2025 111 192.168.1.30 192.168.0.20 3.10 rpc exec 2032 512 192.168.1.30 192.168.0.40 2.95 exec http 1031 80 192.168.1.30 192.168.0.20 0.45 login 2031 513 192.168.0.40 192.168.1.20 7.00 shell 1022 514 192.168.1.30 192.168.0.20 0.52 guess eco/i 192.168.0.40 192.168.1.30 0.01 - 1998 DARPA Intrusion Detection Evaluation https://www.ll.mit.edu/ideval/docs/index.html Filter Working With RDDs textFile = sc.textFile(”SomeFile.txt”) RDD RDD RDD RDD Transformations linesWithSpark = textFile.filter(lambda line: "Spark” in line) MapR Technologies Carol McDonald: An Overview© 2014 of Apache Spark Como imprimir e filtrar um RDD >>> lines = sc.textFile("tcpdump.list") >>> lines.take(10) >>> for x in lines.collect(): ... print x >>> telnet = lines.filter(lambda x: "telnet" in x) >>> for x in telnet.collect(): ... print x Algumas transformações simples map(func) flatmap(func) filter(func) groupByKey() reduceByKey(func) sortByKey(ascending) todo elemento do RDD original será transformado por func todo elemento do RDD original será transformado em 0 ou mais itens por func retorna apenas elementos selecionados por func Dado um dataset (k, v) retorna (k, Iterable<v>) Dado um dataset (k, v) retorna outro, com chaves agrupadas por func Dado um dataset (k,v) retorna outro ordenado em ordem ascendente ou descendente Veja mais em Spark Programming Guide Algumas ações count() collect() take(n) retorna o número de elementos no dataset retorna todos elementos do dataset retorna os n primeiros elementos do dataset Veja mais em Spark Programming Guide Laboratório I Instale o Spark I Obtenha uma versão do darpa dataset I Elabore questões interessantes e opere com os dados I Entrega de código e relatório via Moodle Exemplo simples Como ordenar os acessos por tipo de serviço >>> lines = sc.textFile("tcpdump.list") >>> servicePairs = lines.map(lambda x: (str(x.split()[4]), >>> sortedServ = servicePairs.sortByKey() Como poderı́amos rastrear os dados para identificar os ataques??? Referências I I Python Tutorial Apache Spark I I Spark Programming Guide Clash of Titans: MapReduce vs. Spark for Large Scale Data Analytics, Juwei Shi e outros, IBM Research, China