Apache spark meetup

download Apache spark meetup

of 72

  • date post

    12-Aug-2015
  • Category

    Technology

  • view

    1.325
  • download

    8

Embed Size (px)

Transcript of Apache spark meetup

  1. 1. ApacheSparkMeetup IntroduccinaScala #ApacheSparkMX @isragaytan israel.gaytan@vitatronix.net isragaytan@gmail.com
  2. 2. HandsOn Instalacinensusistema IntroduccinaScala EjerciciosconScala Break IntroduccinaApacheSpark EjemplodeScalaconApacheSpark PreguntasyRespuestas
  3. 3. Instalacin hGps://spark.apache.org/downloads.html
  4. 4. Instalacinensusistema Descargardeserposibleen hGps://spark.apache.org/downloads.html Descargarlaversin1.3.1prebuiltpara Hadoop2.6 Crearunacarpetaensusistemaspark1.3 Descomprimirlacarpetayrenombrarlaa spark1.3
  5. 5. Probandoinstalacin Dirigirseasucarpetadeinstalacindespark1.3 Ejecutarbin/spark-shell SeabrirelshelldeApacheSparkconScala scala> Nota:Scalaescompletamentedescargablede hGp://www.scala-lang.org/download/all.html
  6. 6. IntroduccinaScala Scalaesunlenguajeorientadoaobjetos(OOP)y deprogramacinfuncional(FP) Compilaaarchivosclassqueempaquetamos comoJAR(JavaArchive)(MavenoSBT) CorresobrelaJavaVirtualMachine CreadoporMar^nOdersky Cadavariableesunobjetoycadaoperadoresun mtodo hGp://scala-lang.org
  7. 7. ComocorresobrelaJVMnospermiteusarlas librerasdeJava SCALACAMBIARLAMANERAENQUE PIENSASCOMOPROGRAMAR Permiteescribircdigodemaneraconcisa Notedesesperessinoen^endesalprincipio IntroduccinaScala
  8. 8. Cadenas AbretupromptdeApacheSpark(spark1.3) bin/spark-shell scala>HolaMundo res0:String=HolaMundo scala>"Holascala".getClass.getName res2:String=java.lang.String
  9. 9. Cadenas scala>vals="HolaScalaMeetup" s:String=HolaScalaMeetup scala>s.length res4:Int=17 scala>s.foreach(println) H o l
  10. 10. Cadenas Podemosu^lizarmtodosfuncionalescomo lterej: scala>varresult=s.lter(_!='l') result:String=HoaScaaMeetup Ver(StringOps,StringLike,WrappedString)
  11. 11. Cadenas scala>s1.drop(4).take(2).capitalize res6:String=Up scala>vals3="hola" s3:String=hola scala>s3=="hola" res8:Boolean=true
  12. 12. Cadenas scala>valmensaje="ApacheSparkMeetup".map(c=>c.toUpper) mensaje:String=APACHESPARKMEETUP Perotambinpodemosusarelcarctermgico_paraquenuestrocdigose veamuchomslimpio scala>valmensaje2="ApacheSparkMeetup".map(_.toUpper) mensaje2:String=APACHESPARKMEETUP Aelmtodomapselepasanfunciones(programacinfuncional)
  13. 13. Cadenas Vercomofuncionanlasexpresionesregulares scala>valaddress="DrLevante1234Edif302".replaceAll("[0-9]","x") address:String="DrLevantexxxxEdifxxx
  14. 14. Clasesimplicitas Lasclasesimplcitasdebenserdenidasenun mbitodondelasdenicionesdemtodoson permi^das(Scala2.10) Permitenagregarnuestrospropiosmtodosa objetossintenerqueextenderlos
  15. 15. ClasesImplcitas packagecom.meetup.u^ls objectU^lidades{ implicitclassIncrementarCaracter(vals:String){ defincrementar=s.map(c=>(c+1).toChar) } } packagefoo.bar importcom.meetup.u^ls.U^lidades._ objectMainextendsApp{ println(ABC.incrementar) }
  16. 16. Nmeros Char-16bitunsigned Byte-8Bitsignedvalue Short16bitsignedvalue Int32bitsignedvalue Long-64bitsignedvalue Float32bitIEEE754singleprecisionoat Double64bitIEEE754singleprecisionoat
  17. 17. Nmeros 100.toInt-Usarmtodostoparacas^ng 100.toFloat. Scalano^eneoperadores++ni valesinmutable Scala>vara=1
  18. 18. Nmeros scala>vala=1 a:Int=1 scala>a+=1 :22:error:value+=isnotamemberofInt a+=1 ^ scala>varb=1 b:Int=1 scala>b+=1 scala>b res11:Int=2
  19. 19. valr=scala.u^l.Random r.nextInt Podemoslimitarlageneracin r.nextInt(100) Nmeros
  20. 20. valr=1to100 valj=1to100by2 valx=(1to10).toList valz=(1to100).toArray Nmeros
  21. 21. EstructurasdeControl If/then/elseessimilaraJava Puedenregresarunresultado valx=if(a)yelseb scala>valx=if("a"=="a")9else7 x:Int=9
  22. 22. foryforeach Nossirvenparahacerciclosysobretodoiterar encolecciones(List,Array,Range) scala>valsamp=List("isra","memo","paco") samp:List[String]=List(isra,memo,paco) scala>for(nsamp.foreach(println) isra memo Paco Siserequieremslineas samp.foreach{e=> |valnuevo=e.toUpperCase |println(nuevo) |} EstructurasdeControl
  23. 24. EstructurasdeControl Esmuyimportantesabercomolosciclosson trasladadosporelcompilador forloopqueiterasobreunacoleccinse transformaenforeach forloopconunguardsetrasladaauna secuenciadewithFilterseguidadeunforeach forloopconunyieldsetrasladaaunmapela coleccin
  24. 25. EstructurasdeControl scala>vali=5 i:Int=5 scala>valmonth=imatch{ |case1=>"enero" |case2=>"febrero" |case3=>"marzo" |case4=>"Abril" |case5=>"Mayo |case_=>Mesinvlido |} month:String=Mayo
  25. 26. Mtodos Losmtodoslosdenimoscomodef scala>defsquare(x:Int):Int=x*x square:(x:Int)Int scala>square(5) res33:Int=25
  26. 27. Colecciones Lascoleccionesenescalasonampliasydebemos aprenderau^lizarlasdependiendoelcontextode nuestrorequerimiento List,Array,MapySet Mtodoscomolter,foreach,mapyreduceLe aplicanalascolecciones^enenloopsdentrode susalgoritmos Elpredicadoesunmtodoofuncinannima quetomaunoomsparmetrosyregresaun valorbooleano
  27. 28. Colecciones Ej: (i:int)=>i%2==0//funcinannima _%2==0 vallist=List.range(1,20) valevents=list.lter(_%2==0)
  28. 29. Colecciones Traversable Iterable Seq IndexedSeq LinearSeq Set Map
  29. 30. Colecciones Sequence:esunacoleccinlinealdeelementos quesernindexados Map:Con^eneunacoleccinkey/valuecomoun JavaMap,RubyHashoundiccionarioenPython Set:esunacoleccinquecon^eneelementossin duplicar
  30. 31. Colecciones EscogerunSequence..Lasecuenciadebeser indexadaoimplementadacomounalinkedlist? Queremosunacoleccinmutableoinmutable? Imutables:List,Queue,Range,Stack,Stream, String,Vector Mutables:Array,ArrayBuer,ArrayStack, LinkedList,ListBuer,MutableLIst,Queue,Stack, StringBuilder
  31. 32. Colecciones EscogerMapesmssencillo PuedoescogerunSortedMapquealmacenar elementosordenadosporllave LinkedHashMapparaalmacenarelementosen ordendeinsercin HashMap,LinkedHashMap,ListMap,Map,Sorte dMap,TreeMap,WeakHashMap
  32. 33. Colecciones Escogerunsetessimilaraunmap Existenclasesmutableseinmutables BitSet,HashSet,LinkedHashSet,ListSet,TreeSet, Set,SortedSet Algunasotrascolecciones (Enumera^on,Iterator,Op^on,Tuple)
  33. 34. Colecciones Unmtododetransformacinesunmtodoque construyeunacoleccinapar^rdeunaexistente. Estaincluyemtodoscomomap,lter,reverseetc. Existencoleccionesstrictylazy. Strictalojaloselementosinmediatamenteen memoria Lazynoalojaloselementosinmediatamenteylas transformacionesnoconstruyennuevoselementos hastaqueseejecutan.
  34. 35. Colecciones Mtodosdeltrado: collect,di,dis^nct,drop,dropWhile,lter,lterNot,nd,foldLe,fo ldRight,head,headOp^on. Mtodosdetransformacin: di,dis^nct,collect,atMap,map,reverse,sortWith,takeWhile,zip, zipWithIndex Mtodosdeagrupacin: groupBy,par^^on,sliding,span,splitAt,unzip Mtodosmatem^cosydeinformacin: contains,containsSlice,count,endWith,exist,nd,forAll,indexOf max,min,product,size,sum.
  35. 36. Colecciones scala>days.zipWithIndex.foreach{ |case(day,count)=>println(s"$countes$day") |} 0esLunes 1esMartes 2esMircoles 3esJueves 4esViernes
  36. 37. Colecciones scala>valfrutas= List("pera","manzana","pltano","mango","uva") frutas:List[String]=List(pera,manzana,pltano, mango,uva) scala>frutas.lter(_.lengthvallistas=List(List(1,2),List(3,4)) listas:List[List[Int]]=List(List(1,2),List(3,4)) scala>valresultado=listas.aGen resultado:List[Int]=List(1,2,3,4) Colecciones
  37. 39. scala>deftoInt(in:String):Op^on[Int]={ |try{ |Some(Integer.parseInt(in.trim)) |} |catch{ |casee:Excep^on=>None |} |} toInt:(in:String)Op^on[Int] scala>fms.atMap(toInt) res32:List[Int]=List(1,2,5) Colecciones
  38. 40. Colecciones Ejercicios: - Filtrarlosmayoresa4 - Filtrarlosmayoresa5 - Sumarloselementosdelacoleccin Mayorinformacin: hGp://www.scala-lang.org/api/2.10.4/ index.html#scala.collec^on.Seq
  39. 41. ProgramacinFuncional Seconstruyenprogramasusandofuncionespuras Lasfuncionesno^enenefectoscolaterales Modicarunavariable,unaestructura, estableceruncampoenunobjeto,arrojaruna excepcin,imprimirenlaconsola,leeroescribir unarchivo,dibujarenpantalla Programacinfuncionalesunarestriccinen COMOescribimosprogramasperonoenloQUE nuestrosprogramaspuedenexpresar.
  40. 42. Yahora
  41. 43. Spark101(Historia) EcosistemaBigData
  42. 44. Spark101 Mapreduceeselmodelodeprogramaciny elcorazndeHadoop Tomadatosdemaneramasivaylosdividea travsdeunnmerodenodosenunclster TienedosfaseslafaseMapylafaseReduce SeprogramaenJavayseenvademanera distribuidaalclster(tambinsepuedeen Python,R,.NETatravsdeHadoop Streaming)
  43. 45. Spark101(WordCount) Mapper Reducer
  44. 46. Spark101 Driver
  45. 47. Spark101 EsdicilprogramarenMapReduce Cuellosdebotellasdeperformance ExistenabstraccionescomoHiveyPig Anasescomplicadodesarrollar
  46. 48. Spark SparkesunmotordecmputoDISTRIBUIDO Op^mizadoparavelocidad,fcilusoeimplementacindeanlisis sos^cado. EsunproyectoopensourcedeAPACHE APISenPython,JavayScalaRenSpark1.4! Lou^lizamosparatareasdecienciaendatos Lou^lizamosparaaplicacionesdeprocesamientoagranescala (terabytesopetabytesdedatos=BIGDATA)
  47. 49. Spark
  48. 50. ResilientDistributedDatasets(RDDs) -AbstraccindeprogramacindeSPARK -Sedesarrollanprogramasentrminosde transformacionesyacciones(Dataows) -Coleccindeobjetosquepuedenseralmacenadosen memoriaoendiscoatravsdeunclster -Estandesarrolladosparatransformacionesenparalelo (map,lter,etc) -LosRDDspuedenseralmacenadosenmemora,en discouambos. -Toleranciaafallos Spark
  49. 51. //Sparkcontextscvariableespecialdecontexto //RDDBase scala>vardata=sc.textFile(sample-syslog.log") //Transformacin=lastransformacionessonlazy valinfo=data.lter(_.contains("INFO")) info.cache() //Acciones=Hastaaquseejecutanlas valn1=info.lter(_.contai