| Apache
SparkÊÇÒ»¸ö¿ªÔ´µÄͨÓü¯Èº¼ÆËãϵͳ£¬ËüÌṩÁËHigh-level±à³ÌAPI£¬Ö§³ÖScala¡¢JavaºÍPythonÈýÖÖ±à³ÌÓïÑÔ¡£SparkÄÚºËʹÓÃScalaÓïÑÔ±àд£¬Í¨¹ý»ùÓÚScalaµÄº¯Êýʽ±à³ÌÌØÐÔ£¬ÔÚ²»Í¬µÄ¼ÆËã²ãÃæ½øÐгéÏ󣬴úÂëÉè¼Æ·Ç³£ÓÅÐã¡£
RDD³éÏó
RDD£¨Resilient Distributed Datasets£©£¬µ¯ÐÔ·Ö²¼Ê½Êý¾Ý¼¯£¬ËüÊǶԷֲ¼Ê½Êý¾Ý¼¯µÄÒ»ÖÖÄÚ´æ³éÏó£¬Í¨¹ýÊÜÏ޵Ĺ²ÏíÄڴ淽ʽÀ´ÌṩÈÝ´íÐÔ£¬Í¬Ê±ÕâÖÖÄÚ´æÄ£ÐÍʹµÃ¼ÆËã±È´«Í³µÄÊý¾ÝÁ÷Ä£ÐÍÒª¸ßЧ¡£RDD¾ßÓÐ5¸öÖØÒªµÄÌØÐÔ£¬ÈçÏÂͼËùʾ£º

ÉÏͼչʾÁË2¸öRDD½øÐÐJOIN²Ù×÷£¬ÌåÏÖÁËRDDËù¾ß±¸µÄ5¸öÖ÷ÒªÌØÐÔ£¬ÈçÏÂËùʾ£º
1.Ò»×é·ÖÇø
2.¼ÆËãÿһ¸öÊý¾Ý·ÖƬµÄº¯Êý
3.RDDÉϵÄÒ»×éÒÀÀµ
4.¿ÉÑ¡£¬¶ÔÓÚ¼üÖµ¶ÔRDD£¬ÓÐÒ»¸öPartitioner£¨Í¨³£ÊÇHashPartitioner£©
5.¿ÉÑ¡£¬Ò»×éPreferred locationÐÅÏ¢£¨ÀýÈ磬HDFSÎļþµÄBlockËùÔÚlocationÐÅÏ¢£©
ÓÐÁËÉÏÊöÌØÐÔ£¬Äܹ»·Ç³£ºÃµØÍ¨¹ýRDDÀ´±í´ï·Ö²¼Ê½Êý¾Ý¼¯£¬²¢×÷Ϊ¹¹½¨DAGͼµÄ»ù´¡£ºÊ×ÏȳéÏóÒ»´Î·Ö²¼Ê½¼ÆËãÈÎÎñµÄÂß¼±íʾ£¬×îÖÕ½«ÈÎÎñÔÚʵ¼ÊµÄÎïÀí¼ÆËã»·¾³ÖнøÐд¦ÀíÖ´ÐС£
¼ÆËã³éÏó
ÔÚÃèÊöSparkÖеļÆËã³éÏó£¬ÎÒÃÇÊ×ÏÈÐèÒªÁ˽âÈçϼ¸¸ö¸ÅÄ
1.Application
Óû§±àдµÄSpark³ÌÐò£¬Íê³ÉÒ»¸ö¼ÆËãÈÎÎñµÄ´¦Àí¡£ËüÊÇÓÉÒ»¸öDriver³ÌÐòºÍÒ»×éÔËÐÐÓÚSpark¼¯ÈºÉϵÄExecutor×é³É¡£
2.Job
Óû§³ÌÐòÖУ¬Ã¿´Îµ÷ÓÃActionʱ£¬Âß¼ÉÏ»áÉú³ÉÒ»¸öJob£¬Ò»¸öJob°üº¬Á˶à¸öStage¡£
3.Stage
Stage°üÀ¨Á½ÀࣺShuffleMapStageºÍResultStage£¬Èç¹ûÓû§³ÌÐòÖе÷ÓÃÁËÐèÒª½øÐÐShuffle¼ÆËãµÄOperator£¬ÈçgroupByKeyµÈ£¬¾Í»áÒÔShuffleΪ±ß½ç·Ö³ÉShuffleMapStageºÍResultStage¡£
4.TaskSet
»ùÓÚStage¿ÉÒÔÖ±½ÓÓ³ÉäΪTaskSet£¬Ò»¸öTaskSet·â×°ÁËÒ»´ÎÐèÒªÔËËãµÄ¡¢¾ßÓÐÏàͬ´¦ÀíÂß¼µÄTask£¬ÕâЩTask¿ÉÒÔ²¢ÐмÆË㣬´ÖÁ£¶ÈµÄµ÷¶ÈÊÇÒÔTaskSetΪµ¥Î»µÄ¡£
5.Task
TaskÊÇÔÚÎïÀí½ÚµãÉÏÔËÐеĻù±¾µ¥Î»£¬Task°üº¬Á½ÀࣺShuffleMapTaskºÍResultTask£¬·Ö±ð¶ÔÓ¦ÓÚStageÖÐShuffleMapStageºÍResultStageÖеÄÒ»¸öÖ´Ðлù±¾µ¥Ôª¡£
ÏÂÃæ£¬ÎÒÃÇ¿´Ò»Ï£¬ÉÏÃæÕâЩ»ù±¾¸ÅÄîÖ®¼äµÄ¹ØÏµ£¬ÈçÏÂͼËùʾ£º

ÉÏͼ£¬ÎªÁ˼òµ¥£¬Ã¿¸öJob¼ÙÉè¶¼ºÜ¼òµ¥£¬²¢ÇÒÖ»ÐèÒª½øÐÐÒ»´ÎShuffle´¦Àí£¬ËùÒÔ¶¼¶ÔÓ¦2¸öStage¡£Êµ¼ÊÓ¦ÓÃÖУ¬Ò»¸öJob¿ÉÄܰüº¬Èô¸É¸öStage£¬»òÕßÊÇÒ»¸öÏà¶Ô¸´ÔÓµÄStage
DAG¡£
ÔÚStandaloneģʽÏ£¬Ä¬ÈÏʹÓõÄÊÇFIFOÕâÖÖ¼òµ¥µÄµ÷¶È²ßÂÔ£¬ÔÚ½øÐе÷¶ÈµÄ¹ý³ÌÖУ¬´ó¸ÅÁ÷³ÌÈçÏÂͼËùʾ£º

´ÓÓû§Ìá½»Spark³ÌÐò£¬×îÖÕÉú³ÉTaskSet£¬¶øÔÚµ÷¶Èʱ£¬Í¨¹ýTaskSetManagerÀ´¹ÜÀíÒ»¸öTaskSet£¨°üº¬Ò»×é¿ÉÔÚÎïÀí½ÚµãÉÏÖ´ÐеÄTask£©£¬ÕâÀïÃæTaskSet±ØÐëÒª°´ÕÕ˳ÐòÖ´ÐвÅÄܱ£Ö¤¼ÆËã½á¹ûµÄÕýÈ·ÐÔ£¬ÒòΪTaskSetÖ®¼äÊÇÓÐÐòÒÀÀµµÄ£¨ÉÏËݵ½ShuffleMapStageºÍResultStage£©£¬Ö»ÓÐÒ»¸öTaskSetÖеÄËùÓÐTask¶¼ÔËÐÐÍê³Éºó£¬²ÅÄܵ÷¶ÈÏÂÒ»¸öTaskSetÖеÄTaskÈ¥Ö´ÐС£
¼¯ÈºÄ£Ê½
Spark¼¯ÈºÔÚÉè¼ÆµÄʱºò£¬²¢Ã»ÓÐÔÚ×ÊÔ´¹ÜÀíµÄÉè¼ÆÉ϶ÔÍâ·â±Õ£¬¶øÊdzä·Ö¿¼ÂÇÁËδÀ´¶Ô½ÓһЩ¸üÇ¿´óµÄ×ÊÔ´¹ÜÀíϵͳ£¬ÈçYARN¡¢MesosµÈ£¬ËùÒÔSpark¼Ü¹¹Éè¼Æ½«×ÊÔ´¹ÜÀíµ¥¶À³éÏó³öÒ»²ã£¬Í¨¹ýÕâÖÖ³éÏóÄܹ»¹¹½¨Ò»ÖÖÊÊºÏÆóÒµµ±Ç°¼¼ÊõÕ»µÄ²å¼þʽ×ÊÔ´¹ÜÀíÄ£¿é£¬´Ó¶øÎª²»Í¬µÄ¼ÆË㳡¾°Ìṩ²»Í¬µÄ×ÊÔ´·ÖÅäÓëµ÷¶È²ßÂÔ¡£Spark¼¯ÈºÄ£Ê½¼Ü¹¹£¬ÈçÏÂͼËùʾ£º
ÉÏͼÖУ¬Spark¼¯ÈºCluster ManagerĿǰ֧³ÖÈçÏÂÈýÖÖģʽ£º
1.Standaloneģʽ
StandaloneģʽÊÇSparkÄÚ²¿Ä¬ÈÏʵÏÖµÄÒ»ÖÖ¼¯Èº¹ÜÀíģʽ£¬ÕâÖÖģʽÊÇͨ¹ý¼¯ÈºÖеÄMasterÀ´Í³Ò»¹ÜÀí×ÊÔ´£¬¶øÓëMaster½øÐÐ×ÊÔ´ÇëÇóÐÉ̵ÄÊÇDriverÄÚ²¿µÄStandaloneSchedulerBackend£¨Êµ¼ÊÉÏÊÇÆäÄÚ²¿µÄStandaloneAppClientÕæÕýÓëMasterͨÐÅ£©£¬ºóÃæ»áÏêϸ˵Ã÷¡£
2.YARNģʽ
YARNģʽÏ£¬¿ÉÒÔ½«×ÊÔ´µÄ¹ÜÀíͳһ½»¸øYARN¼¯ÈºµÄResourceManagerÈ¥¹ÜÀí£¬Ñ¡ÔñÕâÖÖģʽ£¬¿ÉÒÔ¸ü´óÏ޶ȵÄÊÊÓ¦ÆóÒµÄÚ²¿ÒÑÓеļ¼ÊõÕ»£¬Èç¹ûÆóÒµÄÚ²¿ÒѾÔÚʹÓÃHadoop¼¼Êõ¹¹½¨´óÊý¾Ý´¦ÀíÆ½Ì¨¡£
3.Mesosģʽ
Ëæ×ÅApache MesosµÄ²»¶Ï³ÉÊ죬һЩÆóÒµÒѾÔÚ³¢ÊÔʹÓÃMesos¹¹½¨Êý¾ÝÖÐÐĵIJÙ×÷ϵͳ£¨DCOS£©£¬Spark¹¹½¨ÔÚMesosÖ®ÉÏ£¬Äܹ»Ö§³ÖϸÁ£¶È¡¢´ÖÁ£¶ÈµÄ×ÊÔ´µ÷¶È²ßÂÔ£¨MesosµÄÓÅÊÆ£©£¬Ò²¿ÉÒÔ¸üºÃµØÊÊÓ¦ÆóÒµÄÚ²¿ÒÑÓм¼ÊõÕ»¡£
ÄÇô£¬SparkÖÐÊÇÔõô¿¼ÂÇÂú×ãÕâÒ»ÖØÒªµÄÉè¼Æ¾ö²ßµÄÄØ£¿Ò²¾ÍÊÇ˵£¬ÈçºÎÄܹ»±£Ö¤Spark·Ç³£ÈÝÒ×µÄÈõÚÈý·½×ÊÔ´¹ÜÀíϵͳÇáËɵؽÓÈë½øÀ´¡£ÎÒÃÇÉîÈëµ½ÀàÉè¼ÆµÄ²ãÃæ¿´Ò»Ï£¬ÈçÏÂͼÀàͼËùʾ£º

¿ÉÒÔ¿´³ö£¬Taskµ÷¶ÈÖ±½ÓÒÀÀµSchedulerBackend£¬SchedulerBackendÓëʵ¼Ê×ÊÔ´¹ÜÀíÄ£¿é½»»¥ÊµÏÖ×ÊÔ´ÇëÇó¡£ÕâÀïÃæ£¬CoarseGrainedSchedulerBackendÊÇSparkÖÐÓë×ÊÔ´µ÷¶ÈÏà¹ØµÄ×îÖØÒªµÄ³éÏó£¬ËüÐèÒª³éÏó³öÓëTaskSchedulerͨÐŵÄÂß¼£¬Í¬Ê±»¹ÒªÄܹ»Óë¸÷ÖÖ²»Í¬µÄµÚÈý·½×ÊÔ´¹ÜÀíϵͳÎÞ·ìµØ½»»¥¡£Êµ¼ÊÉÏ£¬CoarseGrainedSchedulerBackendÄÚ²¿²ÉÓÃÁËÒ»ÖÖResourceOfferµÄ·½Ê½À´´¦Àí×ÊÔ´ÇëÇó¡£
RPCÍøÂçͨÐųéÏó
Spark RPC²ãÊÇ»ùÓÚÓÅÐãµÄÍøÂçͨÐÅ¿ò¼ÜNettyÉè¼Æ¿ª·¢µÄ£¬µ«ÊÇSparkÌṩÁËÒ»ÖֺܺõسéÏó·½Ê½£¬½«µ×²ãµÄͨÐÅϸ½ÚÆÁ±ÎÆðÀ´£¬¶øÇÒÒ²Äܹ»»ùÓÚ´ËÀ´Éè¼ÆÂú×ãÀ©Õ¹ÐÔ£¬±ÈÈ磬Èç¹ûÓÐÆäËû²»»ùÓÚNettyµÄÍøÂçͨÐÅ¿ò¼ÜµÄеÄRPC½ÓÈëÐèÇ󣬿ÉÒԺܺõØÀ©Õ¹¶ø²»Ó°ÏìÉϲãµÄÉè¼Æ¡£RPC²ãÉè¼Æ£¬ÈçÏÂͼÀàͼËùʾ£º

ÈκÎÁ½¸öEndpointÖ»ÄÜͨ¹ýÏûÏ¢½øÐÐͨÐÅ£¬¿ÉÒÔʵÏÖÒ»¸öRpcEndpointºÍÒ»¸öRpcEndpointRef£ºÏëÒªÓëRpcEndpointͨÐÅ£¬ÐèÒª»ñÈ¡µ½¸ÃRpcEndpoint¶ÔÓ¦µÄRpcEndpointRef¼´¿É£¬¶øÇÒ¹ÜÀíRpcEndpointºÍRpcEndpointRef´´½¨¼°ÆäͨÐŵÄÂß¼£¬Í³Ò»ÔÚRpcEnv¶ÔÏóÖйÜÀí¡£
Æô¶¯Standalone¼¯Èº
StandaloneģʽÏ£¬Spark¼¯Èº²ÉÓÃÁ˼òµ¥µÄMaster-Slave¼Ü¹¹Ä£Ê½£¬Masterͳһ¹ÜÀíËùÓеÄWorker£¬ÕâÖÖģʽºÜ³£¼û£¬ÎÒÃǼòµ¥µØ¿´ÏÂSpark
Standalone¼¯ÈºÆô¶¯µÄ»ù±¾Á÷³Ì£¬ÈçÏÂͼËùʾ£º

¿ÉÒÔ¿´µ½£¬Spark¼¯Èº²ÉÓõÄÏûÏ¢µÄģʽ½øÐÐͨÐÅ£¬Ò²¾ÍÊÇEDA¼Ü¹¹Ä£Ê½£¬½èÖúÓÚRPC²ãµÄÓÅÑÅÉè¼Æ£¬ÈκÎÁ½¸öEndpointÏëҪͨÐÅ£¬·¢ËÍÏûÏ¢²¢Ð¯´øÊý¾Ý¼´¿É¡£ÉÏͼµÄÁ÷³ÌÃèÊöÈçÏÂËùʾ£º
1.MasterÆô¶¯Ê±Ê×ÏÈ´´Ò»¸öRpcEnv¶ÔÏ󣬸ºÔð¹ÜÀíËùÓÐͨÐÅÂß¼
2.Masterͨ¹ýRpcEnv¶ÔÏó´´½¨Ò»¸öEndpoint£¬Master¾ÍÊÇÒ»¸öEndpoint£¬Worker¿ÉÒÔÓëÆä½øÐÐͨÐÅ
3.WorkerÆô¶¯Ê±Ò²ÊÇ´´Ò»¸öRpcEnv¶ÔÏó
4.Workerͨ¹ýRpcEnv¶ÔÏó´´½¨Ò»¸öEndpoint
5.Workerͨ¹ýRpcEnv¶Ô£¬½¨Á¢µ½MasterµÄÁ¬½Ó£¬»ñÈ¡µ½Ò»¸öRpcEndpointRef¶ÔÏó£¬Í¨¹ý¸Ã¶ÔÏó¿ÉÒÔÓëMasterͨÐÅ
6.WorkerÏòMaster×¢²á£¬×¢²áÄÚÈݰüÀ¨Ö÷»úÃû¡¢¶Ë¿Ú¡¢CPU
CoreÊýÁ¿¡¢ÄÚ´æÊýÁ¿
7.Master½ÓÊÕµ½WorkerµÄ×¢²á£¬½«×¢²áÐÅϢά»¤ÔÚÄÚ´æÖеÄTableÖУ¬ÆäÖл¹°üº¬ÁËÒ»¸öµ½WorkerµÄRpcEndpointRef¶ÔÏóÒýÓÃ
8.Master»Ø¸´WorkerÒѾ½ÓÊÕµ½×¢²á£¬¸æÖªWorkerÒѾע²á³É¹¦
9.´ËʱÈç¹ûÓÐÓû§Ìá½»Spark³ÌÐò£¬MasterÐèҪе÷Æô¶¯Driver£»¶øWorker¶ËÊÕµ½³É¹¦×¢²áÏìÓ¦ºó£¬¿ªÊ¼ÖÜÆÚÐÔÏòMaster·¢ËÍÐÄÌø
ºËÐÄ×é¼þ
¼¯Èº´¦Àí¼ÆËãÈÎÎñµÄÔËÐÐʱ£¨Óû§Ìá½»ÁËSpark³ÌÐò£©£¬×îºËÐĵĶ¥²ã×é¼þ¾ÍÊÇDriverºÍExecutor£¬ËüÃÇÄÚ²¿¹ÜÀíºÜ¶àÖØÒªµÄ×é¼þÀ´ÐͬÍê³É¼ÆËãÈÎÎñ£¬ºËÐÄ×é¼þÕ»ÈçÏÂͼËùʾ£º
DriverºÍExecutor¶¼ÊÇÔËÐÐʱ´´½¨µÄ×é¼þ£¬Ò»µ©Óû§³ÌÐòÔËÐнáÊø£¬ËûÃǶ¼»áÊÍ·Å×ÊÔ´£¬µÈ´ýÏÂÒ»¸öÓû§³ÌÐòÌá½»µ½¼¯Èº¶ø½øÐкóÐøµ÷¶È¡£ÉÏͼ£¬ÎÒÃÇÁгöÁË´ó¶àÊý×é¼þ£¬ÆäÖÐSparkEnvÊÇÒ»¸öÖØÁ¿¼¶×é¼þ£¬ËûÃÇÄÚ²¿°üº¬¼ÆËã¹ý³ÌÖÐÐèÒªµÄÖ÷Òª×é¼þ£¬¶øÇÒ£¬DriverºÍExecutor¹²Í¬ÐèÒªµÄ×é¼þÔÚSparkEnvÖÐÒ²°üº¬Á˺ܶࡣÕâÀÎÒÃDz»×ö¹ý¶àÏêÊö£¬ºóÃæ½»»¥Á÷³ÌµÈ´¦»á˵Ã÷´ó²¿·Ö×é¼þ¸ºÔðµÄ¹¦ÄÜ¡£
ºËÐÄ×é¼þ½»»¥Á÷³Ì
ÔÚStandaloneģʽÏ£¬SparkÖи÷¸ö×é¼þÖ®¼ä½»»¥»¹ÊDZȽϸ´Ôӵ쬵«ÊǶÔÓÚÒ»¸öͨÓõķֲ¼Ê½¼ÆËãϵͳÀ´Ëµ£¬ÕâЩ¶¼ÊǷdz£ÖØÒª¶øÇұȽϻù´¡µÄ½»»¥¡£Ê×ÏÈ£¬ÎªÁËÀí½â×é¼þÖ®¼äµÄÖ÷Òª½»»¥Á÷³Ì£¬ÎÒÃǸø³öһЩ»ù±¾Òªµã£º
Ò»¸öApplication»áÆô¶¯Ò»¸öDriver
Ò»¸öDriver¸ºÔð¸ú×Ù¹ÜÀí¸ÃApplicationÔËÐйý³ÌÖÐËùÓеÄ×ÊԴ״̬ºÍÈÎÎñ״̬
Ò»¸öDriver»á¹ÜÀíÒ»×éExecutor
Ò»¸öExecutorÖ»Ö´ÐÐÊôÓÚÒ»¸öDriverµÄTask
ºËÐÄ×é¼þÖ®¼äµÄÖ÷Òª½»»¥Á÷³Ì£¬ÈçÏÂͼËùʾ£º

ÉÏͼÖУ¬Í¨¹ý²»Í¬ÑÕÉ«»òÀàÐ͵ÄÏßÌõ£¬¸ø³öÁËÈçÏÂ6¸öºËÐĵĽ»»¥Á÷³Ì£¬ÎÒÃÇ»áÏêϸ˵Ã÷£º
³ÈÉ«£ºÌá½»Óû§Spark³ÌÐò
Óû§Ìá½»Ò»¸öSpark³ÌÐò£¬Ö÷ÒªµÄÁ÷³ÌÈçÏÂËùʾ£º
1.Óû§spark-submit½Å±¾Ìá½»Ò»¸öSpark³ÌÐò£¬»á´´½¨Ò»¸öClientEndpoint¶ÔÏ󣬸öÔÏó¸ºÔðÓëMasterͨÐŽ»»¥
2.ClientEndpointÏòMaster·¢ËÍÒ»¸öRequestSubmitDriverÏûÏ¢£¬±íʾÌá½»Óû§³ÌÐò
3.MasterÊÕµ½RequestSubmitDriverÏûÏ¢£¬ÏòClientEndpoint»Ø¸´SubmitDriverResponse£¬±íʾÓû§³ÌÐòÒѾÍê³É×¢²á
4.ClientEndpointÏòMaster·¢ËÍRequestDriverStatusÏûÏ¢£¬ÇëÇóDriver״̬
5.Èç¹ûµ±Ç°Óû§³ÌÐò¶ÔÓ¦µÄDriverÒѾÆô¶¯£¬ÔòClientEndpointÖ±½ÓÍ˳ö£¬Íê³ÉÌá½»Óû§³ÌÐò
×ÏÉ«£ºÆô¶¯Driver½ø³Ì
µ±Óû§Ìá½»Óû§Spark³ÌÐòºó£¬ÐèÒªÆô¶¯DriverÀ´´¦ÀíÓû§³ÌÐòµÄ¼ÆËãÂß¼£¬Íê³É¼ÆËãÈÎÎñ£¬ÕâʱMasterе÷ÐèÒªÆô¶¯Ò»¸öDriver£¬¾ßÌåÁ÷³ÌÈçÏÂËùʾ£º
1.MaserÄÚ´æÖÐά»¤×ÅÓû§Ìá½»¼ÆËãµÄÈÎÎñApplication£¬Ã¿´ÎÄÚ´æ½á¹¹±ä¸ü¶¼»á´¥·¢µ÷¶È£¬ÏòWorker·¢ËÍLaunchDriverÇëÇó
2. WorkerÊÕµ½LaunchDriverÏûÏ¢£¬»áÆô¶¯Ò»¸öDriverRunnerÏß³ÌÈ¥Ö´ÐÐLaunchDriverµÄÈÎÎñ
3.DriverRunnerÏß³ÌÔÚWorkerÉÏÆô¶¯Ò»¸öеÄJVMʵÀý£¬¸ÃJVMʵÀýÄÚÔËÐÐÒ»¸öDriver½ø³Ì£¬¸ÃDriver»á´´½¨SparkContext¶ÔÏó
ºìÉ«£º×¢²áApplication
DirverÆô¶¯ÒÔºó£¬Ëü»á´´½¨SparkContext¶ÔÏ󣬳õʼ»¯¼ÆËã¹ý³ÌÖбØÐèµÄ»ù±¾×é¼þ£¬²¢ÏòMaster×¢²áApplication£¬Á÷³ÌÃèÊöÈçÏ£º
1.´´½¨SparkEnv¶ÔÏ󣬴´½¨²¢¹ÜÀíһЩÊý»ù±¾×é¼þ
2.´´½¨TaskScheduler£¬¸ºÔðTaskµ÷¶È
3.´´½¨StandaloneSchedulerBackend£¬¸ºÔðÓëClusterManager½øÐÐ×ÊÔ´ÐÉÌ
4.´´½¨DriverEndpoint£¬ÆäËü×é¼þ¿ÉÒÔÓëDriver½øÐÐͨÐÅ
5.ÔÚStandaloneSchedulerBackendÄÚ²¿´´½¨Ò»¸öStandaloneAppClient£¬¸ºÔð´¦ÀíÓëMasterµÄͨÐŽ»»¥
6.StandaloneAppClient´´½¨Ò»¸öClientEndpoint£¬Êµ¼Ê¸ºÔðÓëMasterͨÐÅ
7.ClientEndpointÏòMaster·¢ËÍRegisterApplicationÏûÏ¢£¬×¢²áApplication
8.MasterÊÕµ½RegisterApplicationÇëÇóºó£¬»Ø¸´ClientEndpointÒ»¸öRegisteredApplicationÏûÏ¢£¬±íʾÒѾע²á³É¹¦
À¶É«£ºÆô¶¯Executor½ø³Ì
1.MasterÏòWorker·¢ËÍLaunchExecutorÏûÏ¢£¬ÇëÇóÆô¶¯Executor£»Í¬Ê±Master»áÏòDriver·¢ËÍExecutorAddedÏûÏ¢£¬±íʾMasterÒѾÐÂÔöÁËÒ»¸öExecutor£¨´Ëʱ»¹Î´Æô¶¯£©
2.WorkerÊÕµ½LaunchExecutorÏûÏ¢£¬»áÆô¶¯Ò»¸öExecutorRunnerÏß³ÌÈ¥Ö´ÐÐLaunchExecutorµÄÈÎÎñ
3.WorkerÏòMaster·¢ËÍExecutorStageChangedÏûÏ¢£¬Í¨ÖªExecutor״̬ÒÑ·¢Éú±ä»¯
4.MasterÏòDriver·¢ËÍExecutorUpdatedÏûÏ¢£¬´ËʱExecutorÒѾÆô¶¯
·ÛÉ«£ºÆô¶¯TaskÖ´ÐÐ
1.StandaloneSchedulerBackendÆô¶¯Ò»¸öDriverEndpoint
2.DriverEndpointÆô¶¯ºó£¬»áÖÜÆÚÐԵؼì²éDriverά»¤µÄExecutorµÄ״̬£¬Èç¹ûÓпÕÏеÄExecutor±ã»áµ÷¶ÈÈÎÎñÖ´ÐÐ
3.DriverEndpointÏòTaskScheduler·¢ËÍResource
OfferÇëÇó
4.Èç¹ûÓпÉÓÃ×ÊÔ´Æô¶¯Task£¬ÔòDriverEndpointÏòExecutor·¢ËÍLaunchTaskÇëÇó
5.Executor½ø³ÌÄÚ²¿µÄCoarseGrainedExecutorBackendµ÷ÓÃÄÚ²¿µÄExecutorÏ̵߳ÄlaunchTask·½·¨Æô¶¯Task
6.ExecutorÏß³ÌÄÚ²¿Î¬»¤Ò»¸öÏ̳߳أ¬´´½¨Ò»¸öTaskRunnerÏ̲߳¢Ìá½»µ½Ï̳߳ØÖ´ÐÐ
ÂÌÉ«£ºTaskÔËÐÐÍê³É
1.Executor½ø³ÌÄÚ²¿µÄExecutorÏß³Ì֪ͨCoarseGrainedExecutorBackend£¬TaskÔËÐÐÍê³É
2.CoarseGrainedExecutorBackendÏòDriverEndpoint·¢ËÍStatusUpdatedÏûÏ¢£¬Í¨ÖªDriverÔËÐеÄTask״̬·¢Éú±ä¸ü
3.StandaloneSchedulerBackendµ÷ÓÃTaskSchedulerµÄupdateStatus·½·¨¸üÐÂTask״̬
4.StandaloneSchedulerBackend¼ÌÐøµ÷ÓÃTaskSchedulerµÄresourceOffers·½·¨£¬µ÷¶ÈÆäËûÈÎÎñÔËÐÐ
Block¹ÜÀí
Block¹ÜÀí£¬Ö÷ÒªÊÇΪSparkÌṩµÄBroadcast»úÖÆÌṩ·þÎñÖ§³ÅµÄ¡£SparkÖÐÄÚÖòÉÓÃTorrentBroadcastʵÏÖ£¬¸ÃBroadcast±äÁ¿¶ÔÓ¦µÄÊý¾Ý£¨TaskÊý¾Ý£©»òÊý¾Ý¼¯£¨ÈçRDD£©£¬Ä¬ÈϻᱻÇзֳÉÈô¸É4M´óСµÄBlock£¬TaskÔËÐйý³ÌÖжÁÈ¡µ½¸ÃBroadcast±äÁ¿£¬»áÒÔ4MΪµ¥Î»µÄBlockΪÀÈ¡Êý¾ÝµÄ×îСµ¥Î»£¬×îºó½«ËùÓеÄBlockºÏ²¢³ÉBroadcast±äÁ¿¶ÔÓ¦µÄÍêÕûÊý¾Ý»òÊý¾Ý¼¯¡£½«Êý¾ÝÇзֳÉ4M´óСµÄBlock£¬Task´Ó¶à¸öExecutorÀÈ¡Block£¬¿ÉÒԷdz£ºÃµØ¾ùºâÍøÂç´«Êä¸ºÔØ£¬Ìá¸ßÕû¸ö¼ÆË㼯ȺµÄÎȶ¨ÐÔ¡£
ͨ³££¬Óû§³ÌÐòÔÚ±àд¹ý³ÌÖУ¬»á¶Ôij¸ö±äÁ¿½øÐÐBroadcast£¬¸Ã±äÁ¿³ÆÎªBroadcast±äÁ¿¡£ÔÚʵ¼ÊÎïÀí½ÚµãµÄExecutorÉÏÖ´ÐÐTaskʱ£¬ÐèÒª¶ÁÈ¡Broadcast±äÁ¿¶ÔÓ¦µÄÊý¾Ý¼¯£¬ÄÇô´Ëʱ»á¸ù¾ÝÐèÒªÀÈ¡DAGÖ´ÐÐÁ÷ÉÏÓÎÒѾÉú³ÉµÄÊý¾Ý¼¯¡£²ÉÓÃBroadcast»úÖÆ£¬¿ÉÒÔÓÐЧµØ½µµÍÊý¾ÝÔÚ¼ÆË㼯Ⱥ»·¾³Öд«ÊäµÄ¿ªÏú¡£¾ßÌ嵨£¬Èç¹ûÒ»¸öÓû§¶ÔÓ¦µÄ³ÌÐòÖеÄBroadcast±äÁ¿£¬¶ÔÓ¦×ÅÒ»¸öÊý¾Ý¼¯£¬ËüÔÚ¼ÆËã¹ý³ÌÖÐÐèÒªÀÈ¡¶ÔÓ¦µÄÊý¾Ý£¬Èç¹ûÔÚͬһ¸öÎïÀí½ÚµãÉÏÔËÐÐ×Ŷà¸öTask£¬¶à¸öTask¶¼ÐèÒª¸ÃÊý¾Ý£¬ÓÐÁËBroadcast»úÖÆ£¬Ö»ÐèÒªÀȡһ·Ý´æ´¢ÔÚ±¾µØÎïÀí»ú´ÅÅ̼´¿É£¬¹©¶à¸öTask¼ÆËã¹²Ïí¡£
ÁíÍ⣬Óû§³ÌÐòÔÚ½øÐе÷¶È¹ý³ÌÖУ¬»á¸ù¾Ýµ÷¶È²ßÂÔ½«Task¼ÆËãÂß¼Êý¾Ý£¨´úÂë£©ÒÆ¶¯µ½¶ÔÓ¦µÄWorker½ÚµãÉÏ£¬×îÓÅÇé¿öÊǶԱ¾µØÊý¾Ý½øÐд¦Àí£¬ÄÇô´úÂ루ÐòÁл¯¸ñʽ£©Ò²ÐèÒªÔÚÍøÂçÉÏ´«Ê䣬ҲÊÇͨ¹ýBroadcast»úÖÆ½øÐд«Ê䣬²»¹ýÕâÖÖ·½Ê½ÊÇÊ×ÏȽ«´úÂëÐòÁл¯µ½DriverËùÔÚWorker½Úµã£¬ºóÐøÈç¹ûTaskÔÚÆäËûWorkerÖÐÖ´ÐУ¬ÐèÒª¶ÁÈ¡¶ÔÓ¦´úÂëµÄBroadcast±äÁ¿£¬Ê×ÏȾÍÊÇ´ÓDriverÉÏÀÈ¡´úÂëÊý¾Ý£¬½Ó×ÅÆäËûÍíһЩ±»µ÷¶ÈµÄTask¿ÉÄÜÖ±½Ó´ÓÆäËûWorkerÉϵÄExecutorÖÐÀÈ¡´úÂëÊý¾Ý¡£
ÎÒÃÇͨ¹ýÒÔBroadcast±äÁ¿taskBinaryΪÀý£¬ËµÃ÷BlockÊÇÈçºÎ¹ÜÀíµÄ£¬ÈçÏÂͼËùʾ£º

ÉÏͼÖУ¬Driver¸ºÔð¹ÜÀíËùÓеÄBroadcast±äÁ¿¶ÔÓ¦µÄÊý¾ÝËùÔÚµÄExecutor£¬¼´Ò»¸öExecutorά»¤Ò»¸öBlockÁÐ±í¡£ÔÚExecutorÖÐÔËÐÐÒ»¸öTaskʱ£¬Ö´Ðе½¶ÔÓ¦µÄBroadcast±äÁ¿taskBinary£¬Èç¹û±¾µØÃ»ÓжÔÓ¦µÄÊý¾Ý£¬Ôò»áÏòDriverÇëÇó»ñÈ¡Broadcast±äÁ¿¶ÔÓ¦µÄÊý¾Ý£¬°üÀ¨Ò»¸ö»ò¶à¸öBlockËùÔÚµÄExecutorÁÐ±í£¬È»ºó¸ÃExecutor¸ù¾ÝDriver·µ»ØµÄExecutorÁÐ±í£¬Ö±½Óͨ¹ýµ×²ãµÄBlockTransferService×é¼þÏò¶ÔÓ¦ExecutorÇëÇóÀÈ¡Block¡£ExecutorÀÈ¡µ½µÄBlock»á»º´æµ½±¾µØ£¬Í¬Ê±ÏòDriver±¨¸æ¸ÃExecutorÉÏ´æÔÚµÄBlockÐÅÏ¢£¬ÒÔ¹©ÆäËûExecutorÖ´ÐÐTaskʱ»ñÈ¡Broadcast±äÁ¿¶ÔÓ¦µÄÊý¾Ý¡£ |