±à¼ÍƼö: |
±¾ÎÄÖ÷Òª¼ÛÉÜÁËDatabricksºÍDeltÒª½â¾öµÄºËÐÄÎÊÌ⣬UberºÍApache
HudiÒµÎñ³¡¾°£¬NetflixºÍApache IcebergµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔApache Iceberg¼¼ÊõÉçÇø£¨ID£ºapache-iceberg£©£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£
|
|
ĿǰÊÐÃæÉÏÁ÷ÐеÄÈý´ó¿ªÔ´Êý¾Ýºþ·½°¸·Ö±ðΪ£ºdelta¡¢Apache
IcebergºÍApache Hudi¡£
ÆäÖУ¬ÓÉÓÚApache SparkÔÚÉÌÒµ»¯ÉÏÈ¡µÃ¾Þ´ó³É¹¦£¬ËùÒÔÓÉÆä±³ºóÉÌÒµ¹«Ë¾DatabricksÍÆ³öµÄdeltaÒ²ÏԵøñÍâÁÁÑÛ¡£
Apache HudiÊÇÓÉUberµÄ¹¤³ÌʦΪÂú×ãÆäÄÚ²¿Êý¾Ý·ÖÎöµÄÐèÇó¶øÉè¼ÆµÄÊý¾ÝºþÏîÄ¿£¬ËüÌṩµÄfast
upsert/deleteÒÔ¼°compactionµÈ¹¦ÄÜ¿ÉÒÔ˵ÊǾ«×¼ÃüÖйã´óÈËÃñȺÖÚµÄÍ´µã£¬¼ÓÉÏÏîÄ¿¸÷³ÉÔ±»ý¼«µØÉçÇø½¨É裬°üÀ¨¼¼Êõϸ½Ú·ÖÏí¡¢¹úÄÚÉçÇøÍÆ¹ãµÈµÈ£¬Ò²ÔÚÖð²½µØÎüÒýDZÔÚÓû§µÄÄ¿¹â¡£
Apache IcebergĿǰ¿´Ôò»áÏÔµÃÏà¶ÔƽӹһЩ£¬¼òµ¥ËµÉçÇø¹Ø×¢¶ÈÔÝʱ±È²»ÉÏdelta£¬¹¦ÄÜÒ²²»ÈçHudi·á¸»£¬µ«È´ÊÇÒ»¸öÒ°ÐIJª²ªµÄÏîÄ¿£¬ÒòΪËü¾ßÓи߶ȳéÏóºÍ·Ç³£ÓÅÑŵÄÉè¼Æ£¬Îª³ÉΪһ¸öͨÓõÄÊý¾Ýºþ·½°¸µì¶¨ÁËÁ¼ºÃ»ù´¡¡£
ºÜ¶àÓû§»áÏ룬¿´×ÅÈý´óÏîÄ¿Òì²Ê·×³Ê£¬µ½µ×Ó¦¸ÃÔÚʲôÑùµÄ³¡¾°Ï£¬Ñ¡ÔñºÏÊÊÊý¾Ýºþ·½°¸ÄØ£¿½ñÌìÎÒÃǾÍÀ´½â¹¹Êý¾ÝºþµÄºËÐÄÐèÇó£¬Éî¶È¶Ô±ÈÈý´ó²úÆ·£¬°ïÖúÓû§¸üºÃµØÕë¶Ô×ÔÉí³¡¾°À´×öÊý¾Ýºþ·½°¸Ñ¡ÐÍ¡£
Ê×ÏÈ£¬ÎÒÃÇÀ´ÖðÒ»·ÖÎöΪºÎ¸÷¼¼Êõ¹«Ë¾ÒªÍƳöËûÃǵĿªÔ´Êý¾Ýºþ½â¾ö·½°¸£¬ËûÃÇÅöµ½µÄÎÊÌâÊÇʲô£¬Ìá³öµÄ·½°¸ÓÖÊÇÈçºÎ½â¾öÎÊÌâµÄ¡£ÎÒÃÇÏ£Íû¿Í¹ÛµØ·ÖÎöÒµÎñ³¡¾°£¬À´ÀíÐÔÅжϵ½µ×ÄÄЩ¹¦ÄܲÅÊǿͻ§µÄÍ´µãºÍ¸ÕÐè¡£
DatabricksºÍDelta
ÒÔDatabricksÍÆ³öµÄdeltaΪÀý£¬ËüÒª½â¾öµÄºËÐÄÎÊÌâ»ù±¾Éϼ¯ÖÐÔÚÏÂͼ £º

ͼƬÀ´Ô´£ºslideshare.net
ÔÚûÓÐdeltaÊý¾Ýºþ֮ǰ£¬DatabricksµÄ¿Í»§Ò»°ã»á²ÉÓþµäµÄlambda¼Ü¹¹À´¹¹½¨ËûÃǵÄÁ÷Åú´¦Àí³¡¾°¡£
ÒÔÓû§µã»÷ÐÐΪ·ÖÎöΪÀý£¬µã»÷ʼþ¾Kafka±»ÏÂÓεÄSpark Streaming×÷ÒµÏû·Ñ£¬·ÖÎö´¦Àí£¨ÒµÎñ²ãÃæ¾ÛºÏµÈ£©ºóµÃµ½Ò»¸öʵʱµÄ·ÖÎö½á¹û£¬Õâ¸öʵʱ½á¹ûÖ»Êǵ±Ç°Ê±¼äËù¿´µ½µÄÒ»¸ö״̬£¬ÎÞ·¨·´Ó¦Ê±¼äÖáÉϵÄËùÓеã»÷ʼþ¡£
ËùÒÔΪÁ˱£´æÈ«Á¿µã»÷ÐÐΪ£¬Kafka»¹»á±»ÁíÍâÒ»¸öSpark Batch×÷Òµ·ÖÎö´¦Àí£¬µ¼Èëµ½ÎļþϵͳÉÏ£¨Ò»°ã¾ÍÊÇparquet¸ñʽдHDFS»òÕßS3£¬¿ÉÒÔÈÏΪÕâ¸öÎļþϵͳÊÇÒ»¸ö¼òÅä°æµÄÊý¾Ýºþ£©£¬¹©ÏÂÓεÄBatch×÷Òµ×öÈ«Á¿µÄÊý¾Ý·ÖÎöÒÔ¼°AI´¦ÀíµÈ¡£
ÕâÌ×·½°¸Æäʵ´æÔںܶàÎÊÌâ :
µÚÒ»¡¢ÅúÁ¿µ¼Èëµ½ÎļþϵͳµÄÊý¾ÝÒ»°ã¶¼È±·¦È«¾ÖµÄÑϸñschema¹æ·¶£¬ÏÂÓεÄSpark×÷Òµ×ö·ÖÎöʱÅöµ½¸ñʽ»ìÂÒµÄÊý¾Ý»áºÜÂé·³£¬Ã¿Ò»¸ö·ÖÎö×÷Òµ¶¼Òª¹ýÂË´¦Àí´íÂÒȱʧµÄÊý¾Ý£¬³É±¾½Ï´ó¡£
µÚ¶þ¡¢Êý¾ÝдÈëÎļþϵͳÕâ¸ö¹ý³ÌûÓÐACID±£Ö¤£¬Óû§¿ÉÄܶÁµ½µ¼ÈëÖмä״̬µÄÊý¾Ý¡£ËùÒÔÉϲãµÄÅú´¦Àí×÷ҵΪÁ˶㿪Õâ¸ö¿Ó£¬Ö»Äܵ÷¶È±Ü¿ªÊý¾Ýµ¼Èëʱ¼ä¶Î£¬¿ÉÒÔÏëÏóÕâ¶ÔÒµÎñ·½ÊǶàô²»ÓѺã»Í¬Ê±Ò²ÎÞ·¨±£Ö¤¶à´Îµ¼ÈëµÄ¿ìÕÕ°æ±¾£¬ÀýÈçÒµÎñ·½Ïë¶Á×î½ü5´Îµ¼ÈëµÄÊý¾Ý°æ±¾£¬ÆäʵÊÇ×ö²»µ½µÄ¡£
µÚÈý¡¢Óû§ÎÞ·¨¸ßЧupsert/deleteÀúÊ·Êý¾Ý£¬parquetÎļþÒ»µ©Ð´ÈëHDFSÎļþ£¬ÒªÏë¸ÄÊý¾Ý£¬¾ÍÖ»ÄÜÈ«Á¿ÖØÐÂдһ·ÝµÄÊý¾Ý£¬³É±¾ºÜ¸ß¡£ÊÂʵÉÏ£¬ÕâÖÖÐèÇóÊǹ㷺´æÔڵģ¬ÀýÈçÓÉÓÚ³ÌÐòÎÊÌ⣬µ¼Ö´íÎóµØÐ´ÈëһЩÊý¾Ýµ½Îļþϵͳ£¬ÏÖÔÚÒµÎñ·½ÏëÒª°ÑÕâЩÊý¾Ý¾ÀÕý¹ýÀ´£»ÏßÉϵÄMySQL
binlog²»¶ÏµØµ¼Èëupdate/deleteÔöÁ¿¸üе½ÏÂÓÎÊý¾ÝºþÖУ»Ä³Ð©Êý¾ÝÉó²é¹æ·¶ÒªÇó×öÇ¿ÖÆÊý¾Ýɾ³ý£¬ÀýÈçÅ·ÖÞ³ǫ̈µÄGDPRÒþ˽±£»¤µÈµÈ¡£
µÚËÄ¡¢Æµ·±µØÊý¾Ýµ¼Èë»áÔÚÎļþϵͳÉϲúÉú´óÁ¿µÄСÎļþ£¬µ¼ÖÂÎļþϵͳ²»¿°Öظº£¬ÓÈÆäÊÇHDFSÕâÖÖ¶ÔÎļþÊýÓÐÏÞÖÆµÄÎļþϵͳ¡£
ËùÒÔ£¬ÔÚDatabricks¿´À´£¬ÒÔÏÂËĸöµãÊÇÊý¾Ýºþ±Ø±¸µÄ£º

ÊÂʵÉÏ, DatabricksÔÚÉè¼Ædeltaʱ£¬Ï£Íû×öµ½Á÷Åú×÷ÒµÔÚÊý¾Ý²ãÃæ×öµ½½øÒ»²½µÄͳһ(ÈçÏÂͼ)¡£ÒµÎñÊý¾Ý¾¹ýKafkaµ¼È뵽ͳһµÄÊý¾ÝºþÖУ¨ÎÞÂÛÅú´¦Àí£¬»¹ÊÇÁ÷´¦Àí£©£¬ÉϲãÒµÎñ¿ÉÒÔ½èÖú¸÷ÖÖ·ÖÎöÒýÇæ×ö½øÒ»²½µÄÉÌÒµ±¨±í·ÖÎö¡¢Á÷ʽ¼ÆËãÒÔ¼°AI·ÖÎöµÈµÈ¡£

ËùÒÔ£¬×ܽáÆðÀ´£¬ÎÒÈÏΪdatabricksÉè¼ÆdeltaʱÖ÷Òª¿¼ÂÇʵÏÖÒÔϺËÐŦÄÜÌØÐÔ£º

UberºÍApache Hudi
UberµÄÒµÎñ³¡¾°Ö÷ҪΪ£º½«ÏßÉϲúÉúµÄÐг̶©µ¥Êý¾Ý£¬Í¬²½µ½Ò»¸öͳһµÄÊý¾ÝÖÐÐÄ£¬È»ºó¹©Éϲã¸÷¸ö³ÇÊÐÔËӪͬÊÂÓÃÀ´×ö·ÖÎöºÍ´¦Àí¡£
ÔÚ2014ÄêµÄʱºò£¬UberµÄÊý¾Ýºþ¼Ü¹¹Ïà¶Ô±È½Ï¼òµ¥£¬ÒµÎñÈÕÖ¾¾ÓÉKafkaͬ²½µ½S3ÉÏ£¬ÉϲãÓÃEMR×öÊý¾Ý·ÖÎö£»ÏßÉϵĹØÏµÐÍÊý¾Ý¿âÒÔ¼°NoSQLÔò»áͨ¹ýETL£¨ETLÈÎÎñÒ²»áÀȥһЩKakfaͬ²½µ½S3µÄÊý¾Ý£©ÈÎÎñͬ²½µ½±ÕÔ´µÄVertica·ÖÎöÐÍÊý¾Ý¿â£¬³ÇÊÐÔËӪͬѧÖ÷Ҫͨ¹ýVertica
SQLʵÏÖÊý¾Ý¾ÛºÏ¡£µ±Ê±Ò²Åöµ½Êý¾Ý¸ñʽ»ìÂÒ¡¢ÏµÍ³À©Õ¹³É±¾¸ß£¨ÒÀÀµÊÕVerticaÉÌÒµÊÕ·ÑÈí¼þ£©¡¢Êý¾Ý»ØÌîÂé·³µÈÎÊÌâ¡£
ºóÐøÇ¨ÒÆµ½¿ªÔ´µÄHadoopÉú̬£¬½â¾öÁËÀ©Õ¹ÐÔÎÊÌâµÈÎÊÌ⣬µ«ÒÀÈ»Åöµ½DatabricksÉÏÊöµÄһЩÎÊÌ⣬ÆäÖÐ×îºËÐĵÄÎÊÌâÊÇÎÞ·¨¿ìËÙupsert´æÁ¿Êý¾Ý¡£

ÈçÉÏͼËùʾ£¬ETLÈÎÎñÿ¸ô30·ÖÖÓ¶¨ÆÚµØ°ÑÔöÁ¿¸üÐÂÊý¾Ýͬ²½µ½·ÖÎö±íÖУ¬È«²¿¸ÄдÒÑ´æÔÚµÄÈ«Á¿¾ÉÊý¾ÝÎļþ£¬µ¼ÖÂÊý¾ÝÑÓ³ÙºÍ×ÊÔ´ÏûºÄ¶¼ºÜ¸ß¡£
´ËÍ⣬ÔÚÊý¾ÝºþµÄÏÂÓΣ¬»¹´æÔÚÁ÷ʽ×÷Òµ»áÔöÁ¿µØÏû·ÑÐÂдÈëµÄÊý¾Ý£¬Êý¾ÝºþµÄÁ÷ʽÏû·Ñ¶ÔËûÃÇÀ´ËµÒ²ÊDZر¸µÄ¹¦ÄÜ¡£ËùÒÔ£¬ËûÃǾÍÏ£ÍûÉè¼ÆÒ»ÖÖºÏÊʵÄÊý¾Ýºþ·½°¸£¬ÔÚ½â¾öͨÓÃÊý¾ÝºþÐèÇóµÄǰÌáÏ£¬»¹ÄÜʵÏÖ¿ìËÙµÄupsertÒÔ¼°Á÷ʽÔöÁ¿Ïû·Ñ¡£

UberÍŶÓÔÚHudiÉÏͬʱʵÏÖÁËCopy On WriteºÍMerge On ReadµÄÁ½ÖÖÊý¾Ý¸ñʽ£¬ÆäÖÐMerge
On Read¾ÍÊÇΪÁ˽â¾öËûÃǵÄfast upsert¶øÉè¼ÆµÄ¡£
¼òµ¥À´Ëµ£¬¾ÍÊÇÿ´Î°ÑÔöÁ¿¸üеÄÊý¾Ý¶¼Ð´Èëµ½Ò»Åú¶ÀÁ¢µÄdeltaÎļþ¼¯£¬¶¨ÆÚµØÍ¨¹ýcompactionºÏ²¢deltaÎļþºÍ´æÁ¿µÄdataÎļþ¡£Í¬Ê±¸øÉϲã·ÖÎöÒýÇæÌṩÈýÖÖ²»Í¬µÄ¶ÁÈ¡Êӽǣº½ö¶ÁÈ¡deltaÔöÁ¿Îļþ¡¢½ö¶ÁÈ¡dataÎļþ¡¢ºÏ²¢¶ÁÈ¡deltaºÍdataÎļþ¡£Âú×ã¸÷ÖÖÒµÎñ·½¶ÔÊý¾ÝºþµÄÁ÷ÅúÊý¾Ý·ÖÎöÐèÇó¡£
×îÖÕ£¬ÎÒÃÇ¿ÉÒÔÌáÁ¶³öUberµÄÊý¾ÝºþÐèÇóΪÈçÏÂͼ£¬ÕâÒ²ÕýºÃÊÇHudiËù²àÖØµÄºËÐÄÌØÐÔ£º

NetflixºÍApache Iceberg
NetflixµÄÊý¾ÝºþÔÏÈÊǽèÖúHiveÀ´¹¹½¨£¬µ«·¢ÏÖHiveÔÚÉè¼ÆÉϵÄÖî¶àȱÏÝÖ®ºó£¬¿ªÊ¼×ªÎª×ÔÑÐIceberg£¬²¢×îÖÕÑÝ»¯³ÉApacheÏÂÒ»¸ö¸ß¶È³éÏóͨÓõĿªÔ´Êý¾Ýºþ·½°¸¡£
NetflixÓÃÄÚ²¿µÄÒ»¸öʱÐòÊý¾ÝÒµÎñµÄ°¸ÀýÀ´ËµÃ÷HiveµÄÕâЩÎÊÌ⣬²ÉÓÃHiveʱ°´ÕÕʱ¼ä×Ö¶Î×öpartition£¬ËûÃÇ·¢ÏÖ½öÒ»¸öÔ»á²úÉú2688¸öpartitionºÍ270Íò¸öÊý¾ÝÎļþ¡£ËûÃÇÖ´ÐÐÒ»¸ö¼òµ¥µÄselect²éѯ£¬·¢ÏÖ½öÔÚ·ÖÇø²Ã¼ô½×¶Î¾ÍºÄ·ÑÊýÊ®·ÖÖÓ¡£

ËûÃÇ·¢ÏÖHiveµÄÔªÊý¾ÝÒÀÀµÒ»¸öÍⲿµÄMySQLºÍHDFSÎļþϵͳ£¬Í¨¹ýMySQLÕÒµ½Ïà¹ØµÄparitionÖ®ºó£¬ÐèҪΪÿ¸öpartitionÈ¥HDFSÎļþϵͳÉϰ´ÕÕ·ÖÇø×öĿ¼µÄlist²Ù×÷¡£ÔÚÎļþÁ¿´óµÄÇé¿öÏ£¬ÕâÊÇÒ»¸ö·Ç³£ºÄʱµÄ²Ù×÷¡£
ͬʱ£¬ÓÉÓÚÔªÊý¾Ý·ÖÊôMySQLºÍHDFS¹ÜÀí£¬Ð´Èë²Ù×÷±¾ÉíµÄÔ×ÓÐÔÄÑÒÔ±£Ö¤¡£¼´Ê¹ÔÚ¿ªÆôHive ACIDÇé¿öÏ£¬ÈÔÓкܶàϸС³¡¾°ÎÞ·¨±£Ö¤Ô×ÓÐÔ¡£ÁíÍ⣬Hive
MetastoreûÓÐÎļþ¼¶±ðµÄͳ¼ÆÐÅÏ¢£¬ÕâʹµÃfilterÖ»ÄÜÏÂÍÆµ½partition¼¶±ð£¬¶øÎÞ·¨ÏÂÍÆµ½Îļþ¼¶±ð£¬¶ÔÉϲã·ÖÎöÐÔÄÜËðºÄÎ޿ɱÜÃâ¡£
×îºó£¬Hive¶Ôµ×²ãÎļþϵͳµÄ¸´ÔÓÓïÒåÒÀÀµ£¬Ê¹µÃÊý¾ÝºþÄÑÒÔ¹¹½¨Ôڳɱ¾¸üµÍµÄS3ÉÏ¡£
ÓÚÊÇ£¬NetflixΪÁ˽â¾öÕâЩʹµã£¬Éè¼ÆÁË×Ô¼ºµÄÇáÁ¿¼¶Êý¾ÝºþIceberg¡£ÔÚÉè¼ÆÖ®³õ£¬×÷ÕßÃǽ«Æä¶¨Î»ÎªÒ»¸öͨÓõÄÊý¾ÝºþÏîÄ¿£¬ËùÒÔÔÚʵÏÖÉÏ×öÁ˸߶ȵijéÏó¡£
ËäȻĿǰ´Ó¹¦ÄÜÉÏ¿´²»ÈçÇ°ÃæÁ½Õ߷ḻ£¬µ«ÓÉÓÚËüÀι̼áʵµÄµ×²ãÉè¼Æ£¬Ò»µ©¹¦Äܲ¹Æë£¬½«³ÉΪһ¸ö·Ç³£ÓÐDZÁ¦µÄ¿ªÔ´Êý¾Ýºþ·½°¸¡£
×ÜÌåÀ´Ëµ£¬NetflixÉè¼ÆIcebergµÄºËÐÄËßÇó¿ÉÒÔ¹éÄÉΪÈçÏ£º

Í´µãС½á
ÎÒÃÇ¿ÉÒÔ°ÑÉÏÊöÈý¸öÏîÄ¿Õë¶ÔµÄÍ´µã£¬·Åµ½Ò»ÕÅͼÉÏÀ´¿´¡£¿ÉÒÔ·¢ÏÖ±êºìµÄ¹¦Äܵ㣬»ù±¾ÉÏÊÇÒ»¸öºÃµÄÊý¾Ýºþ·½°¸Ó¦¸ÃÈ¥×öµ½µÄ¹¦Äܵ㣺

Æß´óά¶È¶Ô±È
ÔÚÀí½âÁËÉÏÊöÈý´ó·½°¸¸÷×ÔÉè¼ÆµÄ³õÖÔºÍÃæÏòµÄÍ´µãÖ®ºó£¬½ÓÏÂÀ´ÎÒÃÇ´Ó7¸öά¶ÈÀ´¶Ô±ÈÆÀ¹ÀÈý´óÏîÄ¿µÄ²îÒ졣ͨ³£ÈËÃÇÔÚ¿¼ÂÇÊý¾Ýºþ·½°¸Ñ¡ÐÍʱ£¬Hive
ACIDÒ²ÊÇÒ»¸öÇ¿ÓÐÁ¦µÄºòÑ¡ÈË£¬ÒòΪËüÌṩÁËÈËÃÇÐèÒªµÄ½ÏΪÍêÉÆ¹¦Äܼ¯ºÏ£¬ËùÒÔÕâÀïÎÒÃǰÑHive ACIDÄÉÈëµ½¶Ô±ÈÐÐÁÐÖС£
µÚÒ»¡¢ACIDºÍ¸ôÀë¼¶±ðÖ§³Ö

ÕâÀïÖ÷Òª½âÊÍÏ£¬¶ÔÊý¾ÝºþÀ´ËµÈýÖÖ¸ôÀë·Ö±ð´ú±íµÄº¬Ò壺
SerializationÊÇ˵ËùÓеÄreaderºÍwriter¶¼±ØÐë´®ÐÐÖ´ÐУ»
Write Serialization: ÊÇ˵¶à¸öwriter±ØÐëÑϸñ´®ÐУ¬readerºÍwriterÖ®¼äÔò¿ÉÒÔͬʱÅÜ£»
Snapshot Isolation: ÊÇ˵Èç¹û¶à¸öwriterдµÄÊý¾ÝÎÞ½»¼¯£¬Ôò¿ÉÒÔ²¢·¢Ö´ÐУ»·ñÔòÖ»ÄÜ´®ÐС£ReaderºÍwriter¿ÉÒÔͬʱÅÜ¡£
×ÛºÏÆðÀ´¿´£¬Snapshot Isolation¸ôÀë¼¶±ðµÄ²¢·¢ÐÔÊÇÏà¶Ô±È½ÏºÃµÄ¡£
µÚ¶þ¡¢Schema±ä¸üÖ§³ÖºÍÉè¼Æ

ÕâÀïÓÐÁ½¸ö¶Ô±ÈÏһ¸öÊÇschema±ä¸üµÄÖ§³ÖÇé¿ö£¬ÎÒµÄÀí½âÊÇhudi½öÖ§³ÖÌí¼Ó¿ÉÑ¡ÁкÍɾ³ýÁÐÕâÖÖÏòºó¼æÈݵÄDDL²Ù×÷£¬¶øÆäËû·½°¸ÔòûÓÐÕâ¸öÏÞÖÆ¡£ÁíÍâÒ»¸öÊÇÊý¾ÝºþÊÇ·ñ×Ô¶¨Òåschema½Ó¿Ú£¬ÒÔÆÚ¸ú¼ÆËãÒýÇæµÄschema½âñî¡£ÕâÀïicebergÊÇ×öµÄ±È½ÏºÃµÄ£¬³éÏóÁË×Ô¼ºµÄschema£¬²»°ó¶¨ÈκμÆËãÒýÇæ²ãÃæµÄschema¡£
µÚÈý¡¢Á÷Åú½Ó¿ÚÖ§³Ö

ĿǰIcebergºÍHiveÔÝʱ²»Ö§³ÖÁ÷ʽÏû·Ñ£¬²»¹ýIcebergÉçÇøÕýÔÚissue 179ÉÏ¿ª·¢Ö§³Ö¡£
µÚËÄ¡¢½Ó¿Ú³éÏó³Ì¶ÈºÍ²å¼þ»¯

ÕâÀïÖ÷Òª´Ó¼ÆËãÒýÇæµÄдÈëºÍ¶Áȡ·¾¶¡¢µ×²ã´æ´¢¿É²å°Î¡¢Îļþ¸ñʽËĸö·½ÃæÀ´×ö¶Ô±È¡£ÕâÀïIcebergÊdzéÏó³Ì¶È×öµÃ×îºÃµÄÊý¾Ýºþ·½°¸£¬Ëĸö·½Ãæ¶¼×öÁ˷dz£¸É¾»µÄ½âñî¡£deltaÊÇdatabricks±³ºóÖ÷ÍÆµÄ£¬±ØÐëÌìÈ»°ó¶¨spark£»hudiµÄ´úÂë¸údeltaÀàËÆ£¬Ò²ÊÇÇ¿°ó¶¨spark¡£
´æ´¢¿É²å°ÎµÄÒâ˼ÊÇ˵£¬ÊÇ·ñ·½±ãÇ¨ÒÆµ½ÆäËû·Ö²¼Ê½ÎļþϵͳÉÏ£¨ÀýÈçS3£©£¬ÕâÐèÒªÊý¾Ýºþ¶ÔÎļþϵͳAPI½Ó¿ÚÓÐ×îÉÙµÄÓïÒåÒÀÀµ£¬ÀýÈçÈôÊý¾ÝºþµÄACIDÇ¿ÒÀÀµÎļþϵͳrename½Ó¿ÚÔ×ÓÐԵϰ£¬¾ÍÄÑÒÔÇ¨ÒÆµ½S3ÕâÑùÁ®¼Û´æ´¢ÉÏ£¬Ä¿Ç°À´¿´Ö»ÓÐHiveûÓÐÌ«¿¼ÂÇÕâ·½ÃæµÄÉè¼Æ£»Îļþ¸ñʽָµÄÊÇÔÚ²»ÒÀÀµÊý¾Ýºþ¹¤¾ßµÄÇé¿öÏ£¬ÊÇ·ñÄܶÁÈ¡ºÍ·ÖÎöÎļþÊý¾Ý£¬Õâ¾ÍÒªÇóÊý¾Ýºþ²»¶îÍâÉè¼Æ×Ô¼ºµÄÎļþ¸ñʽ£¬Í³Ò»ÓÿªÔ´µÄparquetºÍavroµÈ¸ñʽ¡£ÕâÀÓÐÒ»¸öºÃ´¦¾ÍÊÇ£¬Ç¨ÒƵijɱ¾ºÜµÍ£¬²»»á±»Ä³Ò»¸öÊý¾Ýºþ·½°¸¸ø°óËÀ¡£
µÚÎå¡¢²éѯÐÔÄÜÓÅ»¯

µÚÁù¡¢ÆäËû¹¦ÄÜ

ÕâÀïOne line demoÖ¸µÄÊÇ£¬Ê¾ÀýdemoÊÇ·ñ×ã¹»¼òµ¥£¬ÌåÏÖÁË·½°¸µÄÒ×ÓÃÐÔ£¬IcebergÉÔ΢¸´ÔÓÒ»µã£¨ÎÒÈÏΪÖ÷ÒªÊÇIceberg×Ô¼º³éÏó³öÁËschema£¬ËùÒÔ²Ù×÷ǰÐèÒª¶¨ÒåºÃ±íµÄschema£©¡£×öµÃ×îºÃµÄÆäʵÊÇdelta£¬ÒòΪËüÉî¶È¸úËæsparkÒ×ÓÃÐԵĽŲ½¡£
PythonÖ§³ÖÆäʵÊǺܶà»ùÓÚÊý¾ÝºþÖ®ÉÏ×ö»úÆ÷ѧϰµÄ¿ª·¢Õ߻ῼÂǵÄÎÊÌ⣬¿ÉÒÔ¿´µ½IcebergºÍDeltaÊÇ×öµÄºÜºÃµÄÁ½¸ö·½°¸¡£
³öÓÚÊý¾Ý°²È«µÄ¿¼ÂÇ£¬Iceberg»¹ÌṩÁËÎļþ¼¶±ðµÄ¼ÓÃܽâÃܹ¦ÄÜ£¬ÕâÊÇÆäËû·½°¸Î´Ôø¿¼Âǵ½µÄÒ»¸ö±È½ÏÖØÒªµÄµã¡£
µÚÆß¡¢ÉçÇøÏÖ×´£¨½ØÖ¹µ½2020-01-08£©

ÕâÀïÐèҪ˵Ã÷µÄÊÇ£¬DeltaºÍHudiÁ½¸öÏîÄ¿ÔÚ¿ªÔ´ÉçÇøµÄ½¨ÉèºÍÍÆ¶¯·½Ã棬×öµÄ±È½ÏºÃ¡£DeltaµÄ¿ªÔ´°æºÍÉÌÒµ°æ±¾£¬ÌṩÁËÏêϸµÄÄÚ²¿Éè¼ÆÎĵµ£¬Óû§·Ç³£ÈÝÒ×Àí½âÕâ¸ö·½°¸µÄÄÚ²¿Éè¼ÆºÍºËÐŦÄÜ£¬Í¬Ê±Databricks»¹ÌṩÁË´óÁ¿¶ÔÍâ·ÖÏíµÄ¼¼ÊõÊÓÆµºÍÑݽ²£¬ÉõÖÁÑûÇëÁËËûÃÇµÄÆóÒµÓû§À´·ÖÏíDeltaµÄÏßÉϾÑé¡£
UberµÄ¹¤³ÌʦҲ·ÖÏíÁË´óÁ¿HudiµÄ¼¼Êõϸ½ÚºÍÄÚ²¿·½°¸Â䵨£¬Ñо¿¹ÙÍøµÄ½ü10¸öPPTÒѾÄܽÏΪÇáËÉÀí½âÄÚ²¿Ï¸½Ú£¬´ËÍâ¹úÄÚµÄС»ï°éÃÇÒ²ÔÚ»ý¼«µØÍƶ¯ÉçÇø½¨É裬ÌṩÁ˹ٷ½µÄ¼¼Êõ¹«ÖںźÍÓʼþÁбíÖܱ¨¡£
IcebergÏà¶Ô»áƽ¾²Ò»Ð©£¬ÉçÇøµÄ´ó²¿·ÖÌÖÂÛ¶¼ÔÚGithubµÄissuesºÍpull requestÉÏ£¬ÓʼþÁбíµÄÌÖÂÛ»áÉÙÒ»µã£¬ºÜ¶àÓмÛÖµµÄ¼¼ÊõÎĵµÒª×Ðϸ¸ú×ÙissuesºÍPR²ÅÄÜ¿´µ½£¬ÕâÒ²Ðí¸úÉçÇøºËÐÄ¿ª·¢Õߵķç¸ñÓйء£
×ܽá
ÎÒÃǰÑÈý¸ö²úÆ·£¨ÆäÖÐdelta·ÖΪdatabricksµÄ¿ªÔ´°æºÍÉÌÒµ°æ£©×ܽá³ÉÈçÏÂͼ£º

Èç¹ûÓÃÒ»¸ö±ÈÓ÷À´ËµÃ÷delta¡¢iceberg¡¢hudi¡¢hive-acidËÄÕß²îÒìµÄ»°£¬¿ÉÒÔ°ÑËĸöÏîÄ¿±È×ö½¨·¿×Ó¡£ÓÉÓÚ¿ªÔ´µÄdeltaÊÇdatabricks±ÕÔ´deltaµÄÒ»¸ö¼ò»¯°æ±¾£¬ËüÖ÷ҪΪÓû§Ìṩһ¸ötable
formatµÄ¼¼Êõ±ê×¼£¬±ÕÔ´°æ±¾µÄdelta»ùÓÚÕâ¸ö±ê׼ʵÏÖÁËÖî¶àÓÅ»¯£¬ÕâÀïÎÒÃÇÖ÷ÒªÓñÕÔ´µÄdeltaÀ´×ö¶Ô±È¡£

DeltaµÄ·¿×Óµ××ùÏà¶Ô½áʵ£¬¹¦ÄÜÂ¥²ãÒ²½¨µÃÏà¶Ô±È½Ï¸ß£¬µ«Õâ¸ö·¿×ÓÆäʵ¿ÉÒÔ˵ÊÇdatabricksµÄ£¬±¾ÖÊÉÏÊÇΪÁ˸üºÃµØ×³´óSparkÉú̬£¬ÔÚdeltaÉÏÆäËûµÄ¼ÆËãÒýÇæÄÑÒÔÌæ»»SparkµÄλÖã¬ÓÈÆäÊÇдÈë·¾¶²ãÃæ¡£
IcebergµÄ½¨Öþ»ù´¡·Ç³£Ôúʵ£¬À©Õ¹µ½ÐµļÆËãÒýÇæ»òÕßÎļþϵͳ¶¼·Ç³£µÄ·½±ã£¬µ«ÊÇÏÖÔÚ¹¦ÄÜÂ¥²ãÏà¶ÔµÍÒ»µã£¬Ä¿Ç°×îȱµÄ¹¦ÄܾÍÊÇupsertºÍcompactionÁ½¸ö£¬IcebergÉçÇøÕýÔÚÒÔ×î¸ßÓÅÏȼ¶Íƶ¯ÕâÁ½¸ö¹¦ÄܵÄʵÏÖ¡£
HudiµÄÇé¿öÒªÏà¶Ô²»Ò»Ñù£¬ËüµÄ½¨Öþ»ù´¡Éè¼Æ²»Èçiceberg½áʵ£¬¾Ù¸öÀý×Ó£¬Èç¹ûÒª½ÓÈëFlink×÷ΪSinkµÄ»°£¬ÐèÒª°ÑÕû¸ö·¿×Ó´Óµ×ÏòÉÏ·Ò»±é£¬°Ñ½Ó¿Ú³éÏó³öÀ´£¬Í¬Ê±»¹Òª¿¼ÂDz»Ó°ÏìÆäËû¹¦ÄÜ£¬µ±È»HudiµÄ¹¦ÄÜÂ¥²ã»¹ÊDZȽÏÍêÉÆµÄ£¬ÌṩµÄupsertºÍcompaction¹¦ÄÜÖ±½ÓÃüÖйã´óȺÖÚµÄÍ´µã¡£
HiveµÄ·¿×Ó£¬¿´ÆðÀ´ÊÇÒ»¶°ºÀÕ¬£¬¾ø´ó²¿·Ö¹¦Äܶ¼ÓУ¬°ÑËü×öΪÊý¾ÝºþÓеãÏñ¿¿×źÀÕ¬µÄÒ»¶Âǽ½¨·¿×Ó£¬ÏÔµÃÏà¶ÔÖØÁ¿¼¶Ò»µã£¬ÁíÍâÕýÈçNetflixÉÏÊöµÄ·ÖÎö£¬Ï¸¿´Õâ¸öºÀÕ¬µÄÇ½ÃæÊÇÆäʵÊÇÓÐһЩÎÊÌâµÄ¡£
|