µÚÒ»Õ£ºÆóÒµ¼¶´óÊý¾Ýƽ̨½¨ÉèÍ´µãÆÊÎö
ÔÚÊý×Ö»¯×ªÐÍÀú³ÌÖУ¬¹Å°åÆóÒµ³£ÃæÁÙÊý¾Ý¹Âµº¡¢ÅÌËã×ÊÔ´ÆÌÕÅ¡¢ÊµÊ±´¦Öóͷ£ÄÜÁ¦È±·¦ÈýºÆ½ÙÌâ¡£×ÏÌÙׯ԰Sparkʵս°¸ÀýÖУ¬Í¨¹ýͳһԪÊý¾ÝÖÎÀíºÍDelta LakeÊÖÒÕʵÏֿ粿·ÖÊý¾Ý×ʲúÕûºÏ£¬ÕâÇ¡ÊÇÆóÒµ¼¶Êý¾ÝÖÐ̨½¨ÉèµÄ½¹µãËßÇó¡£½ÓÄÉSpark SQLÓëHudi£¨Hadoop Upserts Deletes and Incrementals£©ÏàÁ¬ÏµµÄ¼Ü¹¹£¬ÀÖ³ÉÍ»ÆÆ¹Å°åETL£¨³éȡת»»¼ÓÔØ£©Á÷³ÌÖеÄÅú´¦Öóͷ£ÐÔÄÜÆ¿¾±¡£ÔõÑù¹¹½¨¼ÈÄÜÖ§³ÖPB¼¶ÀëÏßÅÌË㣬ÓÖÄÜÖª×ãºÁÃ뼶ʵʱÆÊÎöÐèÇóµÄ»ìÏý¼Ü¹¹£¿ÕâÕýÊDZ¾Ì×ÊÓÆµ×ÅÖØ½â¾öµÄ¹¤³Ìʵ¼ùÎÊÌâ¡£
µÚ¶þÕ£ºSpark½¹µã×é¼þ½ø½×Ó¦ÓÃÆÊÎö
ÊÓÆµÉî¶È½â¹¹Spark ExecutorÄÚ´æÄ£×Óµ÷ÓÅÕ½ÂÔ£¬Õë¶ÔÆóÒµ³£¼ûµÄGC£¨À¬»ø½ÓÄÉ£©Í£ÁôÎÊÌ⣬Ìá³ö»ùÓÚRDD£¨µ¯ÐÔÂþÑÜʽÊý¾Ý¼¯£©ÑªÍ³¹ØÏµµÄ»º´æ¸´ÓûúÖÆ¡£ÔÚShuffleÀú³ÌÓÅ»¯»·½Ú£¬Í¨¹ý¶¯Ì¬µ÷Àíspark.sql.shuffle.partitions²ÎÊý£¬²¢Á¬ÏµÊý¾ÝÇãб¼ì²âËã·¨£¬Ê¹Ä³½ðÈÚ¿Í»§±¨±íÌìÉúЧÂÊÌáÉý4±¶¡£ÁîÈ˹Ø×¢µÄÊÇ£¬½Ì³Ì»¹Õ¹Ê¾ÁËStructured StreamingÔÚIoT×°±¸ÈÕÖ¾´¦Öóͷ£ÖеĶ˵½¶Ë£¨End-to-End£©ÊµÏÖ£¬Éæ¼°Exactly-OnceÓïÒå°ü¹ÜÓë¼ì²éµã£¨Checkpoint£©»Ö¸´»úÖÆµÈÒªº¦ÊÖÒյ㡣
µÚÈýÕ£ºÉú²úÇéÐθ߿ÉÓüܹ¹Éè¼Æ½ÒÃØ
ÆËÃæÁÙ¼¯Èº¹æÄ£µÖ´ï2000+½ÚµãµÄ³¬´óÐͰ²ÅÅʱ£¬×ÏÌÙׯ԰ÊÖÒÕÍŶÓÁ¢ÒìÐԵؽÓÄÉ·Ö²ã×ÊÔ´µ÷Àíϵͳ¡£Í¨¹ýYARN£¨Yet Another Resource Negotiator£©ÐÐÁÐÓÅÏȼ¶Õ½ÂÔÓëK8sµ¯ÐÔÀ©ÈÝ»úÖÆÁª¶¯£¬ÔÚ˫ʮһ´ó´Ùʱ´ú°ü¹ÜÁ˽¹µãÓªÒµ99.99%µÄSLA£¨Ð§ÀÍÆ·¼¶ÐÒ飩¡£±¾¶ÎÊÓÆµÍêÕû»¹ÔÁËZookeeper¼¯ÈºÄÔÁÑ£¨Split-Brain£©ÎÊÌâµÄÅŲéÀú³Ì£¬²¢Õ¹Ê¾»ùÓÚRaft¹²Ê¶Ë㷨ˢкóµÄHA£¨¸ß¿ÉÓ㩼ƻ®¡£¹ØÓÚÆóÒµÓû§×îÌåÌùµÄÇå¾²¹Ü¿ØÐèÇó£¬ÊÓÆµÌṩ´ÓKerberosÈÏÖ¤µ½Ï¸Á£¶ÈRBAC£¨»ùÓÚ½ÇÉ«µÄ»á¼û¿ØÖÆ£©µÄÍêÕûʵÏÖ·¾¶¡£
µÚËÄÕ£º´óÊý¾ÝÖÎÀíϵͳʵսÑݽø
ÔÚÊý¾ÝÖÊÁ¿¹Ü¿ØÁìÓò£¬½Ì³ÌÑÝʾÁËGreat Expectations¿ò¼ÜÓëSparkµÄÉî¶È¼¯³É£¬ÊµÏÖÊý¾Ý¼¯ÍêÕûÐÔУÑéµÄ×Ô¶¯»¯Á÷Ë®Ïß¡£Õë¶ÔÊý¾ÝѪԵ׷×Ù³¡¾°£¬½ÓÄÉApache AtlasÔªÊý¾ÝÖÎÀíϵͳ¹¹½¨¿ÉÊÓ»¯ÑªÔµÍ¼Æ×£¬ÕâÔÚij¿ç¹ú¼¯ÍŵÄGDPRºÏ¹æÉó¼ÆÖÐʩչҪº¦×÷Óá£ÌØÊâÖµµÃ¹Ø×¢µÄÊÇ£¬ÊÓÆµ´´Á¢ÐԵؽ«Êý¾ÝÖÎÀí£¨Data Governance£©Óë»úеѧϰƽ̨Á¬Ïµ£¬Í¨¹ý¶¯Ì¬ÌØÕ÷¼à¿ØÓÐÓÃÔ¤·ÀÄ£×ÓÆ¯ÒÆÎÊÌâ¡£ÕâÒ»Õ½ڻ¹Ïêϸ½â¶ÁÁËDelta LakeµÄACIDÊÂÎñÌØÕ÷ÔõÑù°ü¹ÜÆóÒµ¼¶Êý¾Ý¿ÍÕ»µÄ¶ÁдһÖÂÐÔ¡£
µÚÎåÕ£ºÆóÒµ¼¶¿ª·¢¹æ·¶ÓëЧÄÜÌáÉý
ÔÚÒ»Á¬¼¯³É»·½Ú£¬×ÏÌÙׯ԰Ìá³ö»ùÓÚJenkins PipelineµÄSpark×÷Òµ×Ô¶¯´ò°üÁ÷Ë®Ïß¡£Í¨¹ýSpark-TEA£¨Test Environment Automation£©¿ò¼ÜʵÏÖ²âÊÔÊý¾Ý×Ô¶¯ÌìÉúÓë¶àÇéÐÎÉèÖÃÖÎÀí£¬Ê¹Ä³µçÉ̿ͻ§µÄ°æ±¾Ðû²¼ÖÜÆÚËõ¶Ì60%¡£ÊÓÆµ»¹ÏµÍ³ÊáÀíÁËParquetÎļþÃûÌõÄÁÐʽ´æ´¢ÓÅ»¯¼¼ÇÉ£¬ÒÔ¼°Spark 3.0×Ô˳ӦÅÌÎÊÖ´ÐУ¨Adaptive Query Execution£©´øÀ´µÄÐÔÄÜÌáÉý°¸Àý¡£Õ½ÚÍêÕû·ºÆðÁËÒ»¸öÈÕ´¦Öóͷ£10ÒÚ¶©µ¥µÄʵʱ·´Ú²ÆÏµÍ³¹¹½¨È«Àú³Ì£¬º¸Ç´ÓFlinkÓëSparkÐͬÅÌËãµ½¶àÎ¬ÌØÕ÷ÒýÇæ¿ª·¢µÄÈ«ÊÖÒÕջʵ¼ù¡£
ÕâÌ×ÍêÕû°æ×ÏÌÙׯ԰Sparkʵ¼ùÊÓÆµµÄ¼ÛÖµ£¬ÔÚÓÚÂòͨÁË¿ªÔ´ÊÖÒÕµ½ÆóÒµ¼¶Â䵨µÄÒ»¹«Àï¡£Ëü²»µ«º¸ÇÅúÁ÷Ò»Ì壨Batch-Stream Unification£©¡¢ÅÌËã´æ´¢ÊèÉ¢µÈÇ°ÑØ¼Ü¹¹Éè¼Æ£¬¸üÉî¶ÈÆÊÎöÁËÉú²úÇéÐÎÖÐ×ÊÔ´µ÷Àí¡¢ÔÖ±¸»Ö¸´µÈÒªº¦ÔËάÊÖÒÕ¡£¹ØÓÚÍýÏë¹¹½¨±ê×¼»¯Êý¾ÝÖÐ̨µÄÆóÒµ£¬±¾½Ì³Ì¿É×÷ΪÍêÕûµÄÊÖÒÕʵÑéÖ¸ÄÏ£¬×ÊÖúÍŶӿìËٴÇкϽðÈÚ¼¶¿É¿¿ÐÔÒªÇóµÄ´óÊý¾Ý´¦Öóͷ£Æ½Ì¨¡£µÚÒ»ÕÂ֪ʶ»ØÊ×Óë±¾ÕÂÖØµãÏνÓ
ÔÚ×ÏÌÙׯ԰SparkϵÁн̵̳ÄÊ×ÕÂÖУ¬ÎÒÃǽ¨ÉèÁË»ù´¡¿ª·¢ÇéÐβ¢Íê³ÉÁËÊý¾ÝÊÕÂÞ¡£±¾Ðò´Î2ÕÂ×îÐÂÊÓÆµ×ÅÖØÕ¹Ê¾RDD£¨µ¯ÐÔÂþÑÜʽÊý¾Ý¼¯£©ºÍDataFrame£¨½á¹¹»¯Êý¾ÝÁýͳ£©ÔÚÂþ»Êý¾Ý´¦Öóͷ£ÖеÄÐͬӦÓá£Í¨¹ýBilibiliÂþ»ÕæÊÊÓû§»ÏñÊý¾Ý£¬½Ì³ÌÑÝʾÁËÔõÑùʵÏÖÍòÍò¼¶Âþ»±êÇ©µÄ¿ìËÙÏ´åªÓëͳ¼Æ£¬ÕâÕýÊǹ¹½¨ÍƼöϵͳµÄÒªº¦Ô¤´¦Öóͷ£°ì·¨¡£
Âþ»ÌØÕ÷¹¤³ÌÈ«Á÷³Ì½âÃÜ
ÊÓÆµÖÐÌØÊâÒýÈËעĿµÄÊÇSpark MLlibÔÚÌØÕ÷ÌáÈ¡ÖеÄÓ¦ÓÃʵ¼ù¡£Õë¶ÔÂþ»Æ½Ì¨µÄ¶àÔª»¯Êý¾Ý£¨°üÀ¨ÔĶÁʱ³¤¡¢µãÔÞÐÐΪ¡¢¸¶·Ñ¼Í¼µÈ£©£¬½²Ê¦ÏêϸÑÝʾÁËÔõÑù¹¹½¨TF-IDFÌØÕ÷¾ØÕó£¨´ÊÆµ-ÄæÎĵµÆµÂÊͳ¼ÆÒªÁ죩¡£ÄãÊÇ·ñÒÉÐÄÓÚº£Á¿Âþ»±êÇ©µÄ¹ØÁªÆÊÎö£¿½Ì³ÌÌá³öµÄ»ùÓÚFP-GrowthËã·¨µÄƵÈÔÏÍÚ¾ò¼Æ»®£¬ÄÜÓÐÓ÷¢Ã÷Óû§Æ«ºÃµÄÂþ»×éºÏ¼ÍÂÉ¡£
ÂþÑÜÊ½ÍÆ¼öË㷨ʵÏÖϸ½Ú
ÔÚÂþ»ÍƼö³¡¾°Ï£¬ÊÓÆµÉîÈë½â˵ÁËÐͬ¹ýÂËËã·¨ÔÚSparkÂþÑÜʽ¼¯ÈºÉϵÄʵÏÖÔÀí¡£ÌØÊâÖµµÃ¹Ø×¢µÄÊǽÓÄÉALS£¨½»Ìæ×îС¶þ³Ë·¨£©´¦Öóͷ£Óû§-Âþ»ÆÀ·Ö¾ØÕóµÄÕ½ÂÔ¡£½Ì³ÌչʾÁËÔõÑùÔÚBilibiliÂþ»°ÙÒÚ¼¶Óû§ÐÐΪÊý¾ÝÖУ¬Í¨¹ýºÏÀíµÄ·ÖÇøÉè¼Æ£¨Partition Strategy£©½«ÅÌËãºÄʱ½µµÍ63%£¬ÕâÖÖÐÔÄÜÓÅ»¯¶ÔÊµÊ±ÍÆ¼öϵͳÓÈΪÖ÷Òª¡£
ʵʱÊý¾Ý´¦Öóͷ£ÓëÐÔÄܵ÷ÓÅ
µÚ2ÕÂ×îиüÐÂÕ½ÚÐÂÔöÁËStructured StreamingÓ¦Óð¸Àý¡£Í¨¹ýÄ£ÄâÂþ»Æ½Ì¨µÄʵʱÔĶÁÊý¾ÝÁ÷£¬½Ì³ÌÑÝʾÁËÔõÑùʵÏÖ·ÖÖÓ¼¶¸üеÄÂþ»ÈȶȰñµ¥¡£Õë¶Ôпª·¢Õß³£¼ûµÄOOM£¨ÄÚ´æÒç³ö£©ÎÊÌ⣬½²Ê¦ÌØÊâÖ¸³öºÏÀíÉèÖÃexecutorÄÚ´æ²ÎÊýÓëÐòÁл¯·½·¨£¬ÕâÊÇÈ·±£Spark×÷ÒµÎȹÌÔËÐеÄÒªº¦ÉèÖá£
ÏîĿЧ¹ûÓëÉÌÒµ»¯Ó¦ÓÃÑéÖ¤
ͨ¹ýÍêÕû¸´ÏÖBilibiliÂþ»ÍƼöϵͳµÄ½¹µãÄ£¿é£¬¸ÃSparkʵ¼ùÏîÄ¿ÒÑʵÏÖµã»÷ÂÊÕ¹Íû׼ȷÂÊ82%µÄÉÌÒµ»¯»ù×¼¡£ÊÓÆµ×îºó´¦Õ¹Ê¾µÄA/B²âÊÔ£¨±ÈÕÕÊÔÑ飩Êý¾ÝÅú×¢£¬ÐÂÍÆ¼öË㷨ʹƽ̨Óû§ÈÕ¾ùÔĶÁʱ³¤ÌáÉý27%¡£ÕâÖÖ´ÓʵÑéÇéÐε½Éú²úϵͳµÄǨáãÂÄÀú£¬ÕýÊDZ¾½Ì³ÌÇø±ðÓÚͬÀà¿Î³ÌµÄ½¹µã¼ÛÖµ¡£
±¾´Î×ÏÌÙׯ԰Sparkʵ¼ùÊÓÆµµÚ2ÕÂ×îÐÂÄÚÈÝ£¬Í¨¹ýBilibiliÂþ»ÕæÊµÓªÒµ³¡¾°µÄÍêÕû»¹Ô£¬¹¹½¨ÁËÂþÑÜʽÅÌËã¿ò¼ÜÓ뻥ÁªÍø²úÆ·µÄÊÖÒÕÇÅÁº¡£½Ì³ÌÖÐÑÝʾµÄÊý¾Ý´¦Öóͷ£·¶Ê½¡¢Ë㷨ʵÏÖ¼¼ÇÉÓëÐÔÄܵ÷Óżƻ®£¬Îª¿ª·¢ÕßÌṩÁ˿ɸ´ÓõĹ¤Òµ»¯½â¾ö¼Æ»®Ä£°å¡£Ëæ×ÅÂþ»Æ½Ì¨Êý¾Ý¹æÄ£µÄÒ»Á¬ÔöÌí£¬ÕÆÎÕÕâЩSparkʵսÊÖÒÕ½«³ÉΪ¹¤³ÌʦµÄ½¹µã¾ºÕùÁ¦¡£