±à¼ÍƼö: |
±¾ÎÄÖØµã½éÉÜzeppelinÕûÌå¼Ü¹¹·ÖÎö,Interpreter×é¼þÒÔ¼°NoteÄ£¿éÖ÷Òª¹¦ÄÜ£¬SparkInterpreterµÄ¹¤×÷ÔÀí£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×Ô³ÌÐòÔ±´ó±¾Óª£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
Ò»¡¢ZeppelinÕûÌå¼Ü¹¹·ÖÎö
Ê×ÏÈÉÏÒ»ÕŹٷ½¸ø³öµÄZeppelinÕûÌå¼Ü¹¹Í¼

Apache ZeppelinµÄ¼Ü¹¹±È½Ï¼òµ¥Ö±¹Û£¬×ܹ²·ÖΪ3²ã£º
1.Zeppelin ǰ¶Ë
2.Zeppelin Server
3.Zeppelin Interpreter
Zeppelinǰ¶ËÊÇ»ùÓÚAngularJS£¨Ä¿Ç°ÉçÇøÕýÔÚÉý¼¶¸ÄÔìǰ¶Ë£¬µ«ÊǶÔÓû§ÌåÑé²»»áÓÐÓ°Ï죩¡£
Zeppelin ServerÊÇÒ»¸ö»ùÓÚJettyµÄÇáÁ¿¼¶Web Server£¬Ö÷Òª¸ºÔðÒÔÏÂһЩ¹¦ÄÜ£º
1.µÇ½ȨÏÞ¹ÜÀí
2.ZeppelinÅäÖÃÐÅÏ¢¹ÜÀí
3.Interpreter ÅäÖÃÐÅÏ¢ºÍÉúÃüÖÜÆÚ¹ÜÀí
4.Note´æ´¢¹ÜÀí
5.²å¼þ»úÖÆ¹ÜÀí
Zeppelinǰ¶ËºÍZeppelin ServerÖ®¼äµÄͨÐÅ»úÖÆÖ÷ÒªÓÐRest apiºÍWebSocketÁ½ÖÖ¡£Zeppelin
ServerºÍZeppelin InterpreterÊÇͨ¹ýThrift RPCÀ´Í¨ÐÅ£¬¶øÇÒËûÃDZ˴ËÖ®¼äÊÇË«ÏòͨÐÅ£¬Zeppelin
Server¿ÉÒÔÏòZeppelin Interpreter·¢ËÍÇëÇó£¬Zeppelin InterpreterÒ²¿ÉÒÔÏòZeppelin
Server·¢ËÍÇëÇó¡£
¹ØÓÚzeppelin²ÉÓÃWebSocket¼¼ÊõµÄ±ØÒªÐÔÎÊÌ⣬ÕâÀïÒ²×öһϼòµ¥·ÖÎö¡£zeppelinÊǹ²Ïíʽ¡¢NotebookʽµÄ´óÊý¾Ý·ÖÎö»·¾³£¬ÒÔreplµÄ·½Ê½Ö´ÐÐÒÔParagraphΪ×îСÁ£¶ÈµÄ´úÂë¶Î¡£
1. Ê×ÏÈreplµÄ·½Ê½Ç¿µ÷ʵʱ·´À¡Ö´Ðнá¹û£¬ÌرðÊÇÔÚ´óÊý¾Ý»·¾³Ï£¬Ò»¶Î´úÂë¿ÉÄÜÐèÒªÖ´Ðкܳ¤Ê±¼ä£¬ÔÚÖ´ÐеĹý³ÌÖУ¬zeppelinµÄÓû§ÆÚÍû¿´µ½Ö´Ðнø¶ÈºÍÖмä½á¹û£¬ÐèÒªÔÚǰºó¶ËÖ®¼ä½¨Á¢Ò»¸ö³¤Á¬½Ó£¬±ãÓÚʵʱ´«µÝÊý¾Ý¡£
2. ÁíÍâzeppelinµÄÁíÒ»¸öÁÁµãÊÇÆä½á¹û¿ÉÊÓ»¯ÄÜÁ¦£¬ÐèÒªÔÚǰºǫ́´«µÝͼƬ£¬²¢ÇÒÖ§³Ö½Ï´óÊý¾ÝÁ¿µÄ´«ÊäµÄÄÜÁ¦£¨Ïà¶Ô´«Í³http¼¼Êõ£©¡£
3. ÔÙÕߣ¬ÓÉÓÚÊǹ²Ïíʽ»·¾³£¬Ò»¸öNote¿ÉÄܱ»¶à¸öÓû§Í¬Ê±¿´µ½¡¢ÉõÖÁ±à¼£¬ÐèÒªÔÚ¸÷¸öÒѾ´ò¿ªÁËͬһ¸öNoteµÄweb¿Í»§¶ËÖ®¼äͬ²½NoteµÄ´úÂë¡¢Ö´Ðнá¹ûºÍ½ø¶ÈÐÅÏ¢¡£
»ùÓÚÒÔÉÏ3µã£¬zeppelin²ÉÓÃWebSocket¼¼ÊõÊÇË®µ½Çþ³ÉµÄÊÂÇé¡£

ÉÏͼÊÇzeppelinµÄǰºǫ́½»»¥Ä£ÐÍ£¬zeppelin²ÉÓõ¥¶ÀµÄjvmÀ´Æô¶¯interpreter½ø³Ì£¬¸ÃInterpreter½ø³ÌÓëzeppelinServer½ø³ÌÖ®¼ä²ÉÓÃThriftÐÒéͨÐÅ£¬ÆäÖÐRemoteInterpreterProcessÊÇThrift-Client¶Ë£¬¶øÏàÓ¦µÄRemoteInterpreterServerÊÇThrift-Server¶Ë¡£Ã¿Ò»¸öInterpreter¶¼ÊôÓÚ»»Ò»¸öInterpreterGroup£¬Í¬Ò»¸öInterpreterGroupµÄInterpreters¿ÉÒÔÏ໥ÒýÓã¬ÀýÈçSparkSqlInterpreter
¿ÉÒÔÒýÓà SparkInterpreter ÒÔ»ñÈ¡ SparkContext£¬ÒòΪËûÃÇÊôÓÚͬһ¸öInterpreterGroup¡£µ±Ç°ÒѾʵÏÖµÄInterpreterÓÐspark½âÊÍÆ÷£¬python½âÊÍÆ÷£¬SparkSQL½âÊÍÆ÷,JDBC£¬MarkdownºÍshellµÈ¡£
¶þ¡¢Zeppelin-interpreter
2.1¡¢Interpreter¸ÅÄî
Interpreter×é¼þÊÇÖ¸¸÷¸ö¼ÆËãÒýÇæÔÚZeppelinÕâ±ßµÄÊÊÅä¡£±ÈÈçPython£¬Spark£¬FlinkµÈµÈ¡£Ã¿¸öInterpreter¶¼runÔÚÒ»¸öJVM½ø³ÌÀÕâ¸öJVM½ø³Ì¿ÉÒÔÊǺÍZeppelin
ServerÔÚͬһ̨»úÆ÷ÉÏ£¨Ä¬ÈÏ·½Ê½£©£¬Ò²¿ÉÒÔrunÔÚZeppelin¼¯ÈºÀïµÄÆäËûÈκλúÆ÷ÉÏ»òÕßK8s¼¯ÈºµÄÒ»¸öPodÀÕâ¸öÓÉZeppelinµÄ²»Í¬InterpreterLauncher²å¼þÀ´ÊµÏÖ¡£InterpreterLauncherÊÇZeppelinµÄÒ»ÖÖ²å¼þÀàÐÍ¡£
InterpreterÖ§³Ö¶¯Ì¬¼ÓÔØmaven¸ñʽÒÀÀµ°üµÄÄÜÁ¦£¬¶àJVM¸ôÀëruntimeÒÀÀµ¡£Thrift-Based¿çÓïÑÔIPC(Inter-Process-Communication)»úÖÆ£¨¹æ¶¨repl½âÊÍÆ÷¼¯³ÉºÍƽ̨֮¼äµÄÊý¾Ý½»»»µÄ¸ñʽºÍʱÐò£©¡£³éÏó³örepl½âÊÍÆ÷ÉúÃüÖÜÆÚ¹ÜÀí½Ó¿Ú£¬¸÷repl½âÊÍÆ÷ÊÜzeppelinServer¶Ë¿ØÖÆ¡£
ÿһ¸öInterpreter¶¼ÓÐÒ»¸ö¶ÔÓ¦µÄSchedulerʵÀý£¬Scheduler½«JobµÄÌá½»ÓëÖ´Ðбä³ÉÁËÒ»¸öÒì²½µÄ¹ý³Ì£¬¼´JobÔÚScheduler´¦½øÈë¶ÓÁеȴýÌá½»£¬Óû§¿ÉÒÔ¶¨ÆÚÊÕµ½JobÖ´ÐÐÏà¹ØµÄÐÅÏ¢¡£ZeppelinÄÚ²¿ÓÐÈýÖÖScheduler£º
1.FIFOScheduler: ÊÊÓÃÓÚParagraphÖ»ÄÜ˳ÐòÖ´ÐеÄInterpreter£¬ÈçSparkInterpreter,
ShellInterpreterµÈ¡£
2.ParallelScheduler: ÊÊÓÃÓÚParagraph¿É²¢ÐÐÖ´ÐеÄInterpreter£¬ÈçSparkSqlInterpreter,
MarkdownInterpreterµÈ¡£
3.RemoteScheduler: ÓëRemoteInterpreterProcessÅäºÏʹÓõģ¬RemoteInterpreterProcessÒÔ¶ÀÁ¢µÄ½ø³ÌÆô¶¯Interpreter£¬ÆäÄÚ²¿Í¬ÑùÔËÐÐÁ˵÷¶ÈÆ÷£¬ÓÉÓÚzeppelinServerÔËÐÐÔÚÖ÷½ø³ÌÖУ¬ÓëÔ¶³ÌInterpreter½ø³Ì£¨Í¨¹ýRemoteInterpreterServerÆô¶¯µÄjvm£¬×¢Ò⣺²»ÊÇÔËÐÐInterpreterProcessÀàËùÔڵĽø³Ì£¬InterpreterProcessÈÔÈ»ÔËÐÐÔÚÓëZeppelinServerÏàͬµÄÖ÷½ø³ÌÖУ©²»ÔÚͬһ¸ö½ø³Ì¡£RemoteSchedulerµÄ×÷ÓþÍ×÷ΪÔËÐÐÔÚÔ¶³ÌInterpreter½ø³ÌµÄÔ¶³Ì´úÀí£¬RemoteSchedulerÓëZeppelinServerÔËÐÐÔÚͬһ¸öJVM½ø³ÌÖУ¬¸ºÔðÏòZeppelinServerÌṩԶ³ÌInterpreter½ø³ÌÖе÷¶ÈÆ÷µÄÄÚ²¿ÔËÐÐÇé¿ö¡£
¹ØÓÚΪʲôҪ²ÉÓõ¥¶ÀµÄJVM½ø³ÌÀ´Æô¶¯repl½âÊÍÆ÷£¬ÔÒòÓÐÒÔÏÂÁ½µã£º
1.zeppelinÖ¼ÔÚÌṩһ¸ö¿ª·ÅµÄ¿ò¼Ü£¬Ö§³Ö¶àÖÖÓïÑԺͲúÆ·£¬ÓÉÓÚÿÖÖÓïÑԺͲúÆ·¶¼ÊǸ÷×Ô¶ÀÁ¢ÑݽøµÄ£¬¸÷×ÔµÄÔËÐÐʱÒÀÀµÒ²¸÷²»Ïàͬ£¬ÉõÖÁÊÇÏ໥³åÍ»µÄ£¬Èç¹û·ÅÔÚͬһJVMÖУ¬½ö½â¾ö³åÍ»£¬Î¬»¤¸÷¸ö²úÆ·Ö®¼äµÄ¼æÈÝÐÔ¶¼ÊÇÒ»Ïî¼è¾ÞµÄÈÎÎñ£¬Ä³Ð©²úÆ·°æ±¾ÉõÖÁÊÇÍêÈ«²»ÄܼæÈݵġ£
2.´óÊý¾Ý·ÖÎö£¬ÊÇ·ñ¾ßÓкáÏòÀ©Õ¹ÄÜÁ¦ÊÇproduction-readyÒ»ÏîÖØÒªµÄºâÁ¿Ö¸±ê£¬Èç¹û½«repl½ø³ÌÓëÖ÷½ø³ÌºÏÔÚÒ»Æð£¬»áÑéÖ¤Ó°ÏìϵͳÐÔÄÜ¡£
Òò´Ë£¬ÔÚÓбØÒªµÄʱºò£¬zeppelin²ÉÓöÀÁ¢JVMµÄ·½Ê½À´Æô¶¯repl½ø³Ì£¬²¢ÇÒ²ÉÓÃThriftÐÒ鶨ÒåÁËÖ÷½ø³ÌZeppelinServiceÓëRemoteInterpreterService½ø³Ì£¨½âÊÍÆ÷½ø³Ì£©Ö®¼äµÄͨÐÅÐÒé¡£
2.2¡¢InterpreterÄ£¿éÆäËû²¿·Ö¸ÅÄî
InterpreterFactory£ºÎ¬»¤ËùÓÐInterpreterµÄÅäÖÃÐÅÏ¢²¢´æ´¢ÔÚinterpreter.jsonÎļþÖУ¬²¢¹ÜÀíËùÓеÄInterpreter
InterpreterGroup£ºÒ»¸öInterpreterGroupÖаüº¬¶à¸öInterpreter£¬Í¬×éÄÚµÄInterperter¹²ÏíÏàͬµÄÅäÖÃÐÅÏ¢£¬ÀýÈçSparkºÍSparkSQL
interpreterÔÚÒ»¸öInterpreterGroupÄÚ¡£
InterpreterSetting£ºÒ»¸öInterpreterGroup»áÓÐÒ»¸öInterpreterSetting£¬ÆäÖаüº¬×ÅÏàÓ¦µÄÅäÖÃÐÅÏ¢£¬ÀýÈçSpark
Master¡£
ËùÓеÄInterpreterSetting¶¼±»³Ö¾Ã»¯ÔÚInterpreter.jsonÎļþÀï¡£ÓÃÓÚά»¤NoteÓëInterpreterGroupÖ±½ÓµÄ°ó¶¨¹ØÏµ£¬¼´Ã¿ÆªNote¿ÉÒ԰󶨲»Í¬µÄInterpreterGroup.
InterpreterContext£ºÓÃÓÚ´æ´¢ParagraphÏà¹ØµÄÐÅÏ¢£¬InterpreterÔÚ¾ßÌå½âÎöÖ´ÐÐParagraphʱ»áÓõ½InterpreterContext¡£
InterpreterResult£ºÓÃÓÚ´æ´¢JobµÄ״̬ÐÅÏ¢ÒÔ¼°Ö´Ðнá¹û£¬¾ßÌå°üÀ¨£º
״̬Â룺SUCCESS£¬INCOMPLETE£¬ERROR£¬KEEP_PREVIOUS_RESULT
ÀàÐÍ£ºText£¨Default£©£¬Table£¬Html£¬AngularµÈ
ÄÚÈÝ£º×Ö·û´®Êý×é
Èý¡¢Zeppelin-Note
3.1¡¢NoteÄ£¿é¸ÅÄî
Notebook²¿·ÖÓÐÒ»Ð©ÖØÒªµÄ¸ÅÄîÊÇÐèÒªÀí½âµÄ£º
Notebook Server£ºÓÃÓÚ½¨Á¢²¢Î¬»¤Ç°¶ËÍøÒ³Óëºó¶Ë·þÎñÆ÷Ö®¼äµÄWebsocketÁ¬½Ó£»ËüÆäʵÊÇÒ»¸öjob
listener£¬½ÓÊÕ²¢´¦Àíǰ¶ËÍøÒ³·¢À´µÄNoteÖ´ÐÐÇëÇó£¬ÔÚºó¶ËÉú³É²¢Ö´ÐÐÏàÓ¦µÄjob£¬²¢½«jobÖ´ÐеÄ״̬ÐÅÏ¢¹ã²¥µ½ËùÓеÄǰ¶ËÒ³Ãæ¡£
Message£ºMessageÀàÊÇǰ¶ËÍøÒ³Óëºó¶ËNotebook ServerÖ®¼äµÄͨÐÅÐÒ飬´«ÊäÔÚWebsocketÉÏ£¬Ö÷ÒªÓÃÓÚÃèÊöNoteÖ´ÐÐÏà¹ØµÄÐÅÏ¢¡£
Notebook£¬Note£¬Paragraph£¬Job£º
Notebook£ºZeppelinÈÏΪÕû¸öÔËÐÐʵÀýÊÇÒ»¸öNotebook£¬ÆäÖпÉÒÔÓÃºÜ¶àÆªNote¡£
Note£ºÃ¿Ò»ÆªNote¾ÍÊÇÒ»¸ö¾ßÌåµÄÒ³Ãæ£¬ÆäÖпÉÒÔÓкܶà¸öParagraph£¬¾ÍÊÇ´úÂë¶ÎÂä¡£
Paragraph£ºÃ¿Ò»¸öParagraph¾ÍÊÇÒ»¸ö´úÂë¶ÎÂ䣬Òò´ËParagraphÊÇÒ»¸ö¿ÉÖ´Ðе¥Ôª£¬µÈͬÓÚÒ»¸öJob¡£
Job£ºJobÊÇZeppelinºó¶Ëµ÷¶ÈºÍÖ´Ðеĵ¥Î»£¬»áÔÚ¾ßÌåµÄInterpreterÉÏÔËÐС£
3.2¡¢NoteÄ£¿éÖ÷Òª¹¦ÄÜ
NoteÊǵ¥¸ö¡¯¼Çʱ¾¡¯µÄÄÚ´æ¶ÔÏó£¬ÊÇzeppelin¹ÜÀíµÄ×îСµ¥Î»£¬ÎÞÂÛÊÇ×öȨÏÞ¿ØÖÆ¡¢¹²Ïí¡¢»¹Êdz־û¯£¬¶¼ÊÇÒÔNoteΪÁ£¶ÈµÄ¡£´ÓÀà¹ØÏµÉÏ¿´£¬NoteÊÇÓÉһЩÁеÄÓÐÐòParagraph×é³É£¬Òò´ËÆä¾ø´ó²¿·ÖÖ°Ôð¶¼ÊÇÓë¹ÜÀíParagraphÓйأº
1. ParagraphµÄCRUD¡¢Ïà¶Ô˳Ðò¿ØÖÆ
2. Óë´¦Àíǰºó¶ËÊý¾ÝË«ÏòÍÆË͵ÄAngularObjectµÄ¹ÜÀí
3. ÕûÌåºÍµ¥¸öParagraph Ö´ÐУ¬ÒÔ¼°Ö´Ðйý³ÌµÄ»ùÓÚObserverģʽµÄÖ´Ðйý³ÌHook
4. Note»ù±¾µÄÑùʽÍâ¹Û¿ØÖÆ
ΪÁË¡°·ÖÀë¹Ø×¢µã¡±£¬ÆäËûµÄ¹¦ÄÜ£¬È磺
1. NoteÏà¹ØµÄInterpreter¼ÓÔØºÍ³õʼ»¯
2. ³Ö¾Ã»¯Óë·´³Ö¾Ã»¯£¬°üÀ¨Ñӳٳ־û¯
3. ȨÏÞ¿ØÖÆ
ËÄ¡¢Zeppelin-paragraph
Paragraph´ú±í×ÅÒ»¶Î´úÂëÒÔ¼°Ö§³ÅÆäÖ´ÐÐËùÐèÒªµÄ¡°»·¾³ÐÅÏ¢¡±£¬ÊÇ´úÂëÖ´ÐеÄ×îСµ¥Î»¡£ParagraphµÄÖ°ÔðÈçÏ£º
1. »ñÈ¡´úÂëÎı¾£¬²¢½âÎö·ÖÀëÀàËÆ%sparkµÄinterpreterÉùÃ÷¶ÎºÍ¿ÉÖ´ÐдúÂë¶Î¡£
2. ´úÂëÖ´ÐУ¬ÒÔ¼°Ö´Ðйý³Ì¿ØÖÆ£¨½ø¶ÈºÍÖÕÖ¹£©
3. ´úÂëÖ´Ðнá¹û»ñÈ¡
4. ´úÂëÖбäÁ¿²éÕÒÒÔ¼°Ìæ»»
Îå¡¢Ò»´ÎQueryµÄÖ´Ðйý³Ì
ÒÔSparkInterpreter¾ÙÀý
SparkInterpreterµÄ¹¤×÷ÔÀíÈçÏ£º
1.ÄÚ²¿»ùÓÚSparkILoopÒÔ¼°SparkIMainʵÏÖ£¬¹¦ÄÜÀàËÆÓÚSpark-Shell£¬¼´ÖðÐеĽâÎö´úÂë¡£
2.ÓÃzeppelin-<Interpreter hash
code>-<Paragraph Id>×÷ΪSparkÖеÄJob Group Id£¬½ø¶øÓÃJob
Group IdÀ´´ÓSparkContextÖлñȡִÐнø¶ÈÐÅÏ¢¡£
3.½«SparkInterpreter½ø³ÌÄÚ´´½¨µÄSparkContext°ó¶¨µ½SparkIMainÀïÃæ£¬½ø¶øÔ¤¶¨ÒåһЩ»·¾³ÅäÖÃÒÔ¼°Óï·¨ÌÇ£¬ÀýÈçZepplinContext¡£
4.ÓÃByteArrayOutputStreamÀ´²¶»ñSparkIMainµÄÊä³ö£¬²¢×ª»¯Îª¿ÉÏÔʾµÄÊä³ö½á¹û¡£
SparkSqlInterpreterµÄ¹¤×÷ÔÀíÈçÏ£º
1.ÔËÐÐÔÚSparkInterpreterÖ®ÉÏ£¬¼´ÔÚSparkInterpreterÖÐÔËÐÐSqlContext»òÕßHiveContest
2.SparkSqlInterpreterµÄÖ´Ðнá¹û¶¼»áÒÔTableµÄÀàÐÍ·µ»Ø¸øÇ°¶Ë£¬Òò´Ëǰ¶ËÒ³Ãæ»áÓÃÏàÓ¦µÄAngular
JS´úÂ뽫½á¹û³ÊÏÖΪͼ±í¡£ |