ÔÚµ±½ñÊý¾ÝÇý¶¯µÄʱ´ú£¬´¦Öóͷ£º£Á¿Êý¾ÝÒѳÉΪÆóÒµ¾ºÕùÖеĽ¹µãʵÁ¦¡£¶øApacheSpark×÷Ϊһ¸ö¿ìËÙ¡¢Í¨Óá¢Ò×ÓõĴóÊý¾Ý´¦Öóͷ£ÒýÇæ£¬ÕýÖð½¥³ÉΪÐÐÒµ±ê×¼¡£ÉîÈëÃ÷È·SparkµÄÔÀí²»µ«ÓÐÖúÓÚÓÅ»¯ÐÔÄÜ£¬»¹ÄÜÌáÉýÊý¾Ý´¦Öóͷ£µÄЧÂÊÓëÎȹÌÐÔ£¬ÎªÆóÒµÊý×Ö»¯×ªÐ͸³ÄÜ¡£
SparkµÄ½¹µãÓÅÊÆÔÚÓÚÆäǿʢµÄÄÚ´æÅÌËãÄÜÁ¦ºÍ¾«Á·µÄ±à³ÌÄ£×Ó¡£Ïà½ÏÓڹŰåµÄMapReduce£¬Spark¼«´óµØïÔÌÁËI/O²Ù×÷£¬Ê¹µÃÖØ´óµÄÊý¾Ý´¦Öóͷ£Ê¹Ãü¿ÉÒÔÔÚ¶Ìʱ¼äÄÚÍê³É¡£ÎªÁËÃ÷È·SparkµÄǿʢ£¬ÎÒÃÇÊ×ÏÈÐèÒªÉîÈëÏàʶËüµÄ¼Ü¹¹Éè¼Æ¡£
Spark¼Ü¹¹½¹µã°üÀ¨Driver³ÌÐò¡¢ClusterManager¡¢Worker½ÚµãÒÔ¼°Executor¡£DriverÈÏÕæÊ¹Ãüµ÷ÀíºÍÖÎÀí£¬ClusterManager£¨ÈçYARN¡¢Mesos»ò×ÔÁ¦¼¯ÈºÖÎÀí£©ÈÏÕæ×ÊÔ´µÄ·ÖÅÉ£¬¶øWorker½ÚµãÉϵÄExecutorÈÏÕæÏêϸµÄÊý¾Ý´¦Öóͷ£Ê¹Ãü¡£
Õû¸ö¼Ü¹¹Ö§³Ö¶àÖÖÊý¾ÝÔ´£¬°üÀ¨HDFS¡¢Cassandra¡¢HiveµÈ£¬Ìṩ¼«¼ÑµÄÀ©Õ¹ÐԺͼæÈÝÐÔ¡£
ÒªÃ÷È·SparkµÄ¸ßÐÔÄÜ£¬±ØÐèÕÆÎÕÆäÄÚ´æÖÎÀí»úÖÆ¡£Sparkͨ¹ýRDD£¨µ¯ÐÔÂþÑÜʽÊý¾Ý¼¯£©ÊµÏÖÈÝ´íÓëÑÓ³ÙÅÌËã¡£RDDÖ§³Ö¶èÐÔÅÌË㣨LazyEvaluation£©£¬¼´Êý¾ÝµÄÏÖʵÅÌËãÍÆ³Ùµ½ÐëҪʱ¾ÙÐУ¬ïÔ̲»ÐëÒªµÄÅÌËãʹÃü£¬´Ó¶øÌáÉýЧÂÊ¡£ÕâÖÖÉè¼ÆÒ²Ê¹µÃSpark¿ÉÒÔÔÚʹÃüʧ°ÜʱÓÐÓõؾÙÐÐÖØÊÔ¡£
SparkµÄʹÃüµ÷ÀíºÍÓÅ»¯»úÖÆÊǰü¹Ü¸ßЧִÐеÄÒªº¦¡£SparkʹÓÃDAG£¨ÓÐÏòÎÞ»·Í¼£©µ÷ÀíÆ÷£¬½«ÖØ´óµÄʹÃü²ð½âΪ¶à¸öStage£¬ÔÙÆ¾Ö¤Êý¾ÝÒÀÀµ¹ØÏµºÏÀí»®·ÖʹÃü£¬´Ó¶ø×î´ó»¯²¢Ðжȡ£SparkµÄCatalystÓÅ»¯Æ÷¶ÔSQLÅÌÎʾÙÐÐÖÇÄÜÓÅ»¯£¬°üÀ¨Î½´ÊÏÂÍÆ¡¢¹ýÂËÌáǰ¡¢ÁвüôµÈÕ½ÂÔ£¬¼«´ó¸ÄÉÆÅÌÎÊÐÔÄÜ¡£
ÔÚʵ¼ùÖУ¬Ã÷È·SparkµÄµ÷ÀíºÍÖ´ÐлúÖÆ£¬ÓÐÖúÓÚ¿ª·¢Ö°Ô±ºÏÀíÉè¼Æ×÷ÒµÁ÷³Ì¡£ÀýÈ磬ͨ¹ýºÏÀí½á¹¹Êý¾ÝµÄ´°¿Ú»®·Ö£¬ïÔÌShuffle²Ù×÷£¬ÓÅ»¯Executor×ÊÔ´ÉèÖ㬿ÉÒÔÏÔÖøÌáÉýʹÃüÐÔÄÜ¡£µ÷ÓŲÎÊýÈçPartitionÊý¡¢ÄÚ´æ±ÈÀý¡¢ShuffleÉèÖõȣ¬Ò²ÊÇÌáÉý´óÊý¾Ý´¦Öóͷ£Ð§ÂʵÄÒªº¦»·½Ú¡£
³ýÁ˼ܹ¹Óëµ÷ÓÅÍâ£¬ÕÆÎÕSparkµÄ¶àÓïÑÔÖ§³ÖÒ²ÓÈΪÖ÷Òª¡£ScalaÊÇSparkµÄÔÉú¿ª·¢ÓïÑÔ£¬Ã÷È·Æäµ×²ãÔÀíÄÜ×ÊÖú±àд¸üÓÅÖʵĴúÂë¡£Python£¨Í¨¹ýPySpark£©¡¢JavaµÈ¶¼ÔÚÏÖʵÊÂÇéÖлñµÃÆÕ±éÓ¦Óá£ÕâЩ¶àÓïÑÔ½Ó¿Ú±³ºóµÄʵÏÖÂß¼£¬·´Ó¦ÁËSpark¸ß¶ÈµÄÎÞаÐÔÓë¼æÈÝÐÔ¡£
ÔÚÆóÒµÏÖʵӦÓÃÖУ¬SparkµÄÓÅÊÆ»¹ÌåÏÖÓÚÆä¸»ºñµÄÉú̬ϵͳ¡£SparkStreamingʵÏÖʵʱÊý¾Ý´¦Öóͷ££¬MLlibÌṩ»úеѧϰÄÜÁ¦£¬GraphXÖ§³ÖͼÅÌË㣬SparkSQLÓÅ»¯½á¹¹»¯Êý¾Ý¡£Ã÷È·ÕâЩ×é¼þµÄÔÀíºÍÁ¬Ïµ·½·¨£¬ÄÜ×ÊÖú¿ª·¢ÕßÉè¼Æ³öÒ»Ì廯µÄ¡¢Öª×ã²î±ðÓªÒµÐèÇóµÄ´óÊý¾Ý½â¾ö¼Æ»®¡£
ËäÈ»£¬ÈκÎϵͳ¶¼²»ÊÇÍêÉÆÎÞȱµÄ¡£ÔÚÉî¶ÈѧϰSparkÔÀíµÄÒ²Òª¹Ø×¢Æä¾ÖÏÞÐÔ£¬ºÃ±ÈÔÚ¼«¶Ë´óÊý¾Ý³¡¾°ÏµÄ×ÊÔ´Æ¿¾±£¬ÖØ´óµ÷ÓÅ´øÀ´µÄµ÷ÊÔÄÑÌâ¡£ÃæÁÙÕâЩÌôÕ½£¬Ò»Á¬Ñ§Ï°Óëʵ¼ùÊÇÌáÉýÊÖÒÕˮƽµÄΨһ;¾¶¡£
¹é¸ù½áµ×£¬ÕÆÎÕSparkµÄ½¹µãÔÀí²»µ«ÊÇΪÁËд³ö¸ü¸ßЧµÄ´úÂ룬¸üÊÇÃ÷È·ÏÖ´ú´óÊý¾ÝÊÖÒÕµÄÒªº¦¡£Ö»ÓÐÉîÈëÃ÷È·Æä¼Ü¹¹¡¢µ÷ÀíÓëÓÅ»¯»úÖÆ£¬²Å»ªÔÚÏÖʵÊÂÇéÖÐÓÎÈÐÓÐÓ࣬Ӧ¶ÔÖÖÖÖÖØ´ó³¡¾°£¬´ÓÊý¾Ý³éÈ¡µ½¾öÒéÆÊÎö£¬ÕæÕýʵÏÖÊý¾Ý¼ÛÖµµÄ×î´ó»¯¡£
ÔÚÕÆÎÕSparkÔÀíµÄ»ù´¡ÉÏ£¬ÊµÕ½Ó¦ÓÃÊÇÌáÉýÊÖÒÕʵÁ¦µÄ±ØÓÉ֮·¡£ÎÞÂÛÊÇÊý¾ÝÆÊÎö¡¢»úеѧϰ£¬ÕÕ¾Éʵʱ¼à¿ØÕ½ÂÔ£¬¶¼Àë²»¿ª¶ÔSparkµÄÉî¶ÈÕÆÎÕ¡£ÏÂÃæ½«´Óʵս¼¼Çɺ͵䷶°¸ÀýÁ½¸ö½Ç¶È£¬×ÊÖúÄ㽨ÉèÍêÕûµÄÑÝÁ·ÏµÍ³£¬ÊµÏÖÀíÂÛµ½Êµ¼ùµÄ±¼ÌÚ¡£
ÓÅ»¯Spark×÷ÒµÐèÒª¿ÆÑ§ÉèÖÃ×ÊÔ´¡£ºÏÀí»®·ÖPartition£¬È·±£×÷ÒµµÄ²¢ÐжÈÓ뼯Ⱥ×ÊÔ´Æ¥Å䣬ÊÇÐÔÄÜÌáÉýµÄ½¹µã¡£½¨Ò鯾֤ÊäÈëÊý¾ÝÁ¿ÉèÖúÏÊʵÄPartitionÊý£¬Ò»Ñùƽ³£½¨ÒéΪ×ܺËÊýµÄ2-3±¶£¬ÒÔ°ü¹Üÿ¸öExecutor¶¼Äܳä·ÖʹÓÃ×ÊÔ´¡£
Ҫƾ֤Êý¾ÝÌØÕ÷µ÷½âÄÚ´æ±ÈÀý¡¢shuffle»º³åÇø¾Þϸ£¬´Ó¶øïÔÌ×ÊÔ´ÕùÓÃºÍÆµÈԵĴÅÅÌI/O¡£
Ã÷È·ºÍÉÆÓÃSparkµÄ¸ß¼¶¹¦Ð§£¬¿ÉÒÔÏÔÖøÌáÉý¿ª·¢Ð§ÂÊ¡£ÀýÈ磬¹ã²¥±äÁ¿£¨Broadcast£©ÔÚÐèÒª¶à´ÎʹÓÃÏàͬ´ó¹æÄ£Êý¾Ýʱ£¬¿ÉÒÔÓÐÓÃïÔÌÊý¾ÝµÄÍøÂç´«Ê䣬ÌáÉýʹÃüÐÔÄÜ¡£ÀÛ¼ÓÆ÷£¨Accumulator£©ÔòÀû±ãÔÚÂþÑÜʽÇéÐÎϾÙÐмÆÊýͳ¼Æ¡£ºÏÀíʹÓÃÕâЩ¹¤¾ß£¬²»µ«¿ÉÒÔÓÅ»¯ÐÔÄÜ£¬»¹¿ÉÒÔ¼ò»¯´úÂë¡£
ÔÚÊý¾ÝÔ¤´¦Öóͷ£½×¶Î£¬Ê¹ÓÃSparkSQL¾ÙÐнṹ»¯´¦Öóͷ££¬¿ÉÒÔ¼«´óµØ½µµÍ¿ª·¢ÖØÆ¯ºó¡£Ê¹ÓÃCatalystÓÅ»¯Æ÷Ö´ÐÐÁвüô¡¢Î½´ÊÏÂÍÆµÈ²Ù×÷£¬ÄÜÏÔÖøÌá¸ßÅÌÎÊËÙÂÊ¡£Ö´ÐÐǰ¿ÉÒÔͨ¹ýExplainÆÊÎöÖ´ÐÐÍýÏ룬ÕÒ³öDZÔÚµÄÐÔÄÜÆ¿¾±£¬È»ºóµ÷½âÅÌÎÊÂß¼¡£
ÔÚ»úеѧϰӦÓÃÖУ¬MLlibÌṩÁËÒ»ÕûÌ×ÂþÑÜʽËã·¨¿â£¬°üÀ¨·ÖÀà¡¢»Ø¹é¡¢¾ÛÀàµÈ¡£Á¬ÏµÌØÕ÷¹¤³Ì¡¢Ä£×ÓѵÁ·Óëµ÷ÓÅÁ÷³Ì£¬¿ÉÒÔ¿ìËÙÍê³É´ÓÊý¾Ý×¼±¸µ½Ä£×ÓÉÏÏßµÄÈ«Àú³Ì¡£ÊµÕ½ÖУ¬ºÏÀí»®·ÖѵÁ·¼¯Óë²âÊÔ¼¯£¬µ÷Óų¬²ÎÊý£¬Á¬Ïµ½»Ö¯ÑéÖ¤£¬²Å»ª»ñµÃ·º»¯ÄÜÁ¦Ç¿µÄÄ£×Ó¡£
ʵʱÊý¾Ý´¦Öóͷ£·½Ã棬SparkStreamingÖ§³Ö¶àÖÖÊý¾ÝÔ´£¨Kafka¡¢Socket¡¢ÎļþµÈ£©£¬²¢Í¨¹ý΢Åú´¦Öóͷ£ÊµÏÖ½üʵʱÆÊÎö¡£ÔÚÏÖʵӦÓÃÖУ¬Éè¼ÆºÏÀíµÄ´°¿ÚºÍ״̬ÖÎÀíÕ½ÂÔ£¬Êǰü¹ÜЧ¹û׼ȷÐÔºÍϵͳÎȹÌÐÔµÄÒªº¦¡£ÀýÈ磬´¦Öóͷ£·ç¿Ø¼à¿Ø¡¢ÊµÊ±¹ã¸æÍƼöµÈ³¡¾°£¬ÒªÇóϵͳ¸ßÍÌÍ¡¢µÍÑÓ³Ù¡£
ÔÚÑÝÁ·ÖпÉÒÔÄ£Äâ²î±ðÊý¾ÝÁ÷£¬µ÷½âÅú¾àÀëºÍ´æ´¢¼¶±ð£¬ÓÅ»¯ÕûÌåÐÔÄÜ¡£
³ýÁ˵¥µãÓÅ»¯£¬ÂþÑÜʽÇéÐÎÏÂµÄ¼à¿ØºÍµ÷ÊÔÖÁ¹ØÖ÷Òª¡£Ê¹ÓÃSparkUI¡¢Ganglia¡¢PrometheusµÈ¼à¿Ø¹¤¾ß£¬ÊµÊ±ÕÆÎÕʹÃüÔËÐÐÇéÐΡ¢×ÊԴʹÓÃÂÊºÍÆ¿¾±µã¡£Í¨¹ýÈÕÖ¾ÆÊÎö¡¢Êý¾ÝÇãб¼ì²â£¬¿ÉÒÔ·¢Ã÷Òþ²ØµÄÐÔÄÜÆ¿¾±£¬²¢½ÓÄÉÓÅ»¯²½·¥¡£
°¸ÀýÑо¿·½Ã棬½«Ò»Ð©¾µäµÄÓ¦Óó¡¾°²ð½â£¬×ÊÖúÄãÃ÷È·ÏÖʵ²Ù×÷¡£ÀýÈ磬µçÉÌÆ½Ì¨µÄÓû§ÐÐΪÆÊÎö£¬Ê¹ÓÃSpark¾ÙÐдó¹æÄ£ÈÕÖ¾´¦Öóͷ££¬´ÓÊý¾ÝÊÕÂÞ¡¢´æ´¢¡¢Ï´åªµ½ÌØÕ÷ÌáÈ¡£¬ÔÙµ½Ä£×ÓѵÁ·ºÍʵʱչÍû£¬ÐγÉÍêÕû±Õ»·¡£Äã¿ÉÒÔ¹Ø×¢Êý¾ÝµÄ·ÖÇøÕ½ÂÔ¡¢ShuffleÓÅ»¯¡¢³¤ÆÚ»¯Õ½ÂÔµÈϸ½Ú¡£
ÔÚ´óÊý¾ÝÉú̬ÖУ¬SparkÒ²ÓëÆäËû¹¤¾ßÎÞ·ìÁ¬Ïµ¡£ºÃ±È£¬ÓëHBase¡¢Kafka¡¢FlinkµÄÁª¶¯£¬´ó´óÍØÕ¹ÁËÓ¦Óó¡¾°¡£ÏÖʵÊÂÇéÖУ¬Éè¼ÆÏµÍ³¼Ü¹¹Ê±£¬ÒªË¼Á¿Êý¾ÝÔ´¶àÑùÐÔ¡¢Ê¹ÃüµÄÖØÆ¯ºóºÍÑÓ³ÙÒªÇ󣬺ÏÀí°²Åź͵÷ÀíSparkʹÃü£¬È·±£ÓªÒµÒ»Á¬ÐÔ¡£
Ò»Á¬Ñ§Ï°ÊÇÓ²ÔÀí¡£¼ÓÈëÊÖÒÕÉçÇø¡¢ÔĶÁ¹Ù·½Îĵµ¡¢¸ú×Ù×îа汾¶¯Ì¬£¬¶¼ÊǼá³Ö¾ºÕùÓÅÊÆµÄ·½·¨¡£Ëæ×Ű汾µü´ú£¬SparkÒ»Ö±ÍÆ³öÐÂÌØÕ÷ºÍÐÔÄÜÓÅ»¯ÊֶΣ¬½ô¸úʱ´ú³ÌÐò£¬²Å»ªÔÚת±äÖÐÁ¢ÓÚ²»°ÜÖ®µØ¡£
×ܽáÀ´Ëµ£¬´ÓÔÀíµ½ÊµÕ½£¬ÕÆÎÕSparkµÄÿһ¸öϸ½Ú£¬¶¼ÎªÄã³ÉΪ´óÊý¾ÝÁìÓòµÄÄÜÊÖ´òϼáʵ»ù´¡¡£ÔÚÇ¿ÁÒµÄÊг¡¾ºÕùÖУ¬ÄÇЩÄܹ»Éî¿ÌÃ÷È·µ×²ãÔÀí²¢ÎÞаӦÓõÄÈË£¬²ÅÓпÉÄÜÔÚÊý¾ÝµÄº£ÑóÖÐ³Ë·çÆÆÀË¡£Î´À´£¬Ëæ×ÅÊý¾Ý¹æÄ£µÄÒ»Á¬ÔöÌí£¬SparkµÄ¼ÛÖµÖ»»áÔ½À´Ô½Í¹ÏÔ£¬Í¶ÉíÆäÖУ¬Ä㽫ӵÓÐÎÞ¾¡µÄ¿ÉÄÜ¡£