±à¼ÍƼö: |
±¾ÎÄ´ÓÍâµ½ÄÚ£¬ÒÀ´ÎÀ´½éÉÜpresto,Ê×ÏȽéÉÜprestodeµÄÔÀí£¬Êý¾ÝÄ£ÐÍ£¬ÒÔ¼°presto±àд²å¼þ£¬×îºóÀ´½éÉÜPrestoÄÚ´æ¹ÜÀí£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÖªºõ£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
¼ò½é
PrestoÊÇÒ»¸öfacebook¿ªÔ´µÄ·Ö²¼Ê½SQL²éѯÒýÇæ£¬ÊÊÓÃÓÚ½»»¥Ê½·ÖÎö²éѯ£¬Êý¾ÝÁ¿Ö§³ÖGBµ½PB×Ö½Ú¡£prestoµÄ¼Ü¹¹ÓɹØÏµÐÍÊý¾Ý¿âµÄ¼Ü¹¹ÑÝ»¯¶øÀ´¡£prestoÖ®ËùÒÔÄÜÔÚ¸÷¸öÄÚ´æ¼ÆËãÐÍÊý¾Ý¿âÖÐÍÑÓ±¶ø³ö£¬ÔÚÓÚÒÔϼ¸µã£º
ÇåÎúµÄ¼Ü¹¹£¬ÊÇÒ»¸öÄܹ»¶ÀÁ¢ÔËÐеÄϵͳ£¬²»ÒÀÀµÓÚÈÎºÎÆäËûÍⲿϵͳ¡£ÀýÈçµ÷¶È£¬presto×ÔÉíÌṩÁ˶Լ¯ÈºµÄ¼à¿Ø£¬¿ÉÒÔ¸ù¾Ý¼à¿ØÐÅÏ¢Íê³Éµ÷¶È¡£
¼òµ¥µÄÊý¾Ý½á¹¹£¬ÁÐʽ´æ´¢£¬Âß¼ÐУ¬´ó²¿·ÖÊý¾Ý¶¼¿ÉÒÔÇáÒ×µÄת»¯³ÉprestoËùÐèÒªµÄÕâÖÖÊý¾Ý½á¹¹¡£
·á¸»µÄ²å¼þ½Ó¿Ú£¬ÍêÃÀ¶Ô½ÓÍⲿ´æ´¢ÏµÍ³£¬»òÕßÌí¼Ó×Ô¶¨ÒåµÄº¯Êý¡£
¼Ü¹¹

Presto²ÉÓõäÐ͵Ämaster-slaveÄ£ÐÍ£º
coordinator(master)¸ºÔðmeta¹ÜÀí,worker¹ÜÀí£¬queryµÄ½âÎöºÍµ÷¶È
workerÔò¸ºÔð¼ÆËãºÍ¶Áд¡£
discovery server£¬ ͨ³£ÄÚǶÓÚcoordinator½ÚµãÖУ¬Ò²¿ÉÒÔµ¥¶À²¿Êð£¬ÓÃÓÚ½ÚµãÐÄÌø¡£ÔÚÏÂÎÄÖУ¬Ä¬ÈÏdiscoveryºÍcoordinator¹²Ïíһ̨»úÆ÷¡£
ÔÚworkerµÄÅäÖÃÖУ¬¿ÉÒÔÑ¡ÔñÅäÖãº
discoveryµÄip:port¡£
Ò»¸öhttpµØÖ·£¬ÄÚÈÝÊÇservice inventory£¬°üº¬discoveryµØÖ·¡£
Ò»¸ö±¾µØÎļþµØÖ·
{
"environment": "production",
"services": [
{ "id": "ffffffff-ffff-ffff-ffff-ffffffffffff",
"type": "discovery", "location":
"/ffffffff-ffff-ffff-ffff-ffffffffffff",
"pool": "general", "state":
"RUNNING", "properties":
{ "http": "http://192.168.1.1:8080"
}
}
]
} |
2ºÍ3µÄÔÀíÊÇ»ùÓÚservice inventory, worker »á¶¯Ì¬¼àÌýÕâ¸öÎļþ£¬Èç¹ûÓб仯£¬load³ö×îеÄÅäÖã¬Ö¸Ïò×îеÄdiscovery½Úµã¡£
ÔÚÉè¼ÆÉÏ£¬discoveryºÍcoordinator¶¼Êǵ¥½Úµã¡£Èç¹ûÓжà¸öcoordinatorͬʱ´æ»î£¬worker
»áËæ»úµÄÏòÆäÖÐÒ»¸ö»ã±¨½ø³ÌºÍtask״̬£¬µ¼ÖÂÄÔÁÑ¡£µ÷¶ÈqueryʱÓпÉÄܻᷢÉúËÀËø¡£
discoveryºÍcoordinator¿ÉÓÃÐÔÉè¼Æ¡£ÓÉÓÚservice inventoryµÄʹÓã¬¼à¿Ø³ÌÐò¿ÉÒÔÔÚ·¢ÏÖdiscovery¹Òµôºó£¬ÐÞ¸Äservice
inventoryÖеÄÄÚÈÝ£¬Ö¸Ïò±¸»úµÄdiscovery¡£ÎÞ·ìµÄÍê³ÉÇл»¡£coordiantorµÄÅäÖñØÐëÒªÔÚ½ø³ÌÆô¶¯Ê±Ö¸¶¨£¬Í¬Ò»¸ö¼¯ÈºÖÐÎÞ·¨´æ»î¶à¸öcoordinator¡£Òò´Ë×îºÃµÄ°ì·¨ÊǺÍdiscoveryÅäÖõ½Ò»Ì¨»úÆ÷¡£
secondary»úÆ÷²¿Êð±¸ÓõÄdiscoveryºÍcoordinator¡£ÔÚÆ½Ê±£¬secondary»úÆ÷ÊÇÒ»¸öÖ»°üº¬Ò»Ì¨»úÆ÷µÄ¼¯Èº£¬ÔÚprimaryå´»úʱ£¬workerµÄÐÄÌøË²¼äÇл»µ½secondary¡£
Êý¾ÝÄ£ÐÍ
presto²ÉÈ¡Èý²ã±í½á¹¹£º
1.catalog ¶ÔӦijһÀàÊý¾ÝÔ´£¬ÀýÈçhiveµÄÊý¾Ý£¬»òmysqlµÄÊý¾Ý
2.schema ¶ÔÓ¦mysqlÖеÄÊý¾Ý¿â
3.table ¶ÔÓ¦mysqlÖеıí

prestoµÄ´æ´¢µ¥Ôª°üÀ¨£º
Page£º ¶àÐÐÊý¾ÝµÄ¼¯ºÏ£¬°üº¬¶à¸öÁеÄÊý¾Ý£¬ÄÚ²¿½öÌṩÂß¼ÐУ¬Êµ¼ÊÒÔÁÐʽ´æ´¢¡£
Block£ºÒ»ÁÐÊý¾Ý£¬¸ù¾Ý²»Í¬ÀàÐ͵ÄÊý¾Ý£¬Í¨³£²ÉÈ¡²»Í¬µÄ±àÂ뷽ʽ£¬Á˽âÕâЩ±àÂ뷽ʽ£¬ÓÐÖúÓÚ×Ô¼ºµÄ´æ´¢ÏµÍ³¶Ô½Ópresto¡£
²»Í¬ÀàÐ͵Äblock£º
arrayÀàÐÍblock£¬Ó¦ÓÃÓڹ̶¨¿í¶ÈµÄÀàÐÍ£¬ÀýÈçint£¬long£¬double¡£blockÓÉÁ½²¿·Ö×é³É
boolean valueIsNull[]±íʾÿһÐÐÊÇ·ñÓÐÖµ¡£
T values[] ÿһÐеľßÌåÖµ¡£
2. ¿É±ä¿í¶ÈµÄblock£¬Ó¦ÓÃÓÚstringÀàÊý¾Ý£¬ÓÉÈý²¿·ÖÐÅÏ¢×é³É
Slice £º ËùÓÐÐеÄÊý¾ÝÆ´½ÓÆðÀ´µÄ×Ö·û´®¡£
int offsets[] :ÿһÐÐÊý¾ÝµÄÆðʼ±ãÒËλÖá£Ã¿Ò»Ðеij¤¶ÈµÈÓÚÏÂÒ»ÐÐµÄÆðʼ±ãÒ˼õÈ¥µ±Ç°ÐÐµÄÆðʼ±ãÒË¡£
boolean valueIsNull[] ±íʾijһÐÐÊÇ·ñÓÐÖµ¡£Èç¹ûÓÐijһÐÐÎÞÖµ£¬ÄÇôÕâÒ»ÐеıãÒËÁ¿µÈÓÚÉÏÒ»ÐÐµÄÆ«ÒÆÁ¿¡£
3. ¹Ì¶¨¿í¶ÈµÄstringÀàÐ͵Äblock£¬ËùÓÐÐеÄÊý¾ÝÆ´½Ó³ÉÒ»³¤´®Slice£¬Ã¿Ò»Ðеij¤¶È¹Ì¶¨¡£
4. ×Öµäblock£º¶ÔÓÚijЩÁУ¬distinctÖµ½ÏÉÙ£¬ÊʺÏʹÓÃ×ֵ䱣´æ¡£Ö÷ÒªÓÐÁ½²¿·Ö×é³É£º
×ֵ䣬¿ÉÒÔÊÇÈÎÒâÒ»ÖÖÀàÐ͵Äblock(ÉõÖÁ¿ÉÒÔǶÌ×Ò»¸ö×Öµäblock)£¬blockÖеÄÿһÐа´ÕÕ˳ÐòÅÅÐò±àºÅ¡£
int ids[] ±íʾÿһÐÐÊý¾Ý¶ÔÓ¦µÄvalueÔÚ×ÖµäÖеıàºÅ¡£ÔÚ²éÕÒʱ£¬Ê×ÏÈÕÒµ½Ä³Ò»ÐеÄid£¬È»ºóµ½×ÖµäÖлñÈ¡ÕæÊµµÄÖµ¡£
²å¼þ
Á˽âÁËprestoµÄÊý¾ÝÄ£ÐÍ£¬¾Í¿ÉÒÔ¸øpresto±àд²å¼þ£¬À´¶Ô½Ó×Ô¼ºµÄ´æ´¢ÏµÍ³¡£prestoÌṩÁËÒ»Ì×connector½Ó¿Ú£¬´Ó×Ô¶¨Òå´æ´¢ÖжÁȡԪÊý¾Ý£¬ÒÔ¼°Áд洢Êý¾Ý¡£ÏÈ¿´connectorµÄ»ù±¾¸ÅÄ
ConnectorMetadata: ¹ÜÀí±íµÄÔªÊý¾Ý£¬±íµÄÔªÊý¾Ý£¬partitionµÈÐÅÏ¢¡£ÔÚ´¦ÀíÇëÇóʱ£¬ÐèÒª»ñȡԪÐÅÏ¢£¬ÒÔ±ãÈ·È϶ÁÈ¡µÄÊý¾ÝµÄλÖá£Presto»á´«ÈëfilterÌõ¼þ£¬ÒÔ±ã¼õÉÙ¶ÁÈ¡µÄÊý¾ÝµÄ·¶Î§¡£ÔªÐÅÏ¢¿ÉÒÔ´Ó´ÅÅÌÉ϶ÁÈ¡£¬Ò²¿ÉÒÔ»º´æÔÚÄÚ´æÖС£
ConnectorSplit: Ò»¸öIO Task´¦ÀíµÄÊý¾ÝµÄ¼¯ºÏ£¬Êǵ÷¶ÈµÄµ¥Ôª¡£Ò»¸ösplit¿ÉÒÔ¶ÔÓ¦Ò»¸öpartition£¬»ò¶à¸öpartition¡£
SplitManager : ¸ù¾Ý±íµÄmeta£¬¹¹Ôìsplit¡£
SlsPageSource : ¸ù¾ÝsplitµÄÐÅÏ¢ÒÔ¼°Òª¶ÁÈ¡µÄÁÐÐÅÏ¢£¬´Ó´ÅÅÌÉ϶ÁÈ¡0¸ö»ò¶à¸öpage£¬¹©¼ÆËãÒýÇæ¼ÆËã¡£
²å¼þÄܹ»°ïÖú¿ª·¢ÕßÌí¼ÓÕâЩ¹¦ÄÜ£º
¶Ô½Ó×Ô¼ºµÄ´æ´¢ÏµÍ³¡£
Ìí¼Ó×Ô¶¨ÒåÊý¾ÝÀàÐÍ¡£
Ìí¼Ó×Ô¶¨Òå´¦Àíº¯Êý¡£
×Ô¶¨ÒåȨÏÞ¿ØÖÆ¡£
×Ô¶¨Òå×ÊÔ´¿ØÖÆ¡£
Ìí¼Óqueryʼþ´¦ÀíÂß¼¡£
PrestoÌṩÁËÒ»¸ö¼òµ¥µÄconnector : local file connector ,¿ÉÓÃÓڲο¼ÈçºÎʵÏÖ×Ô¼ºµÄconnector¡£²»¹ýlocal
file connectorÖÐʹÓõıéÀúÊý¾ÝµÄµ¥ÔªÊÇcursor,¼´Ò»ÐÐÊý¾Ý£¬¶ø²»ÊÇÒ»¸öpage¡£
hive µÄconnectorÖÐʵÏÖÁËÈýÖÖÀàÐÍ£¬parquet connector, orc connector,
rc file connector¡£

ÉÏÎÄ´Óºê¹ÛÉϽéÉÜÁËprestoµÄһЩÔÀí£¬½ÓÏÂÀ´¼¸ÆªÎÄÕÂÈÃÎÒÃÇÉîÈëpresto ÄÚ²¿£¬Á˽âһЩÄÚ²¿µÄÉè¼Æ£¬Õâ¶ÔÐÔÄܵ÷ÓÅ»áÓбȽϴóµÄÓô¦£¬Ò²ÓÐÖúÓÚÌí¼Ó×Ô¶¨ÒåµÄoperator¡£
ÄÚ´æ¹ÜÀí
PrestoÊÇÒ»¿îÄÚ´æ¼ÆËãÐ͵ÄÒýÇæ£¬ËùÒÔ¶ÔÓÚÄÚ´æ¹ÜÀí±ØÐë×öµ½¾«Ï¸£¬²ÅÄܱ£Ö¤queryÓÐÐò¡¢Ë³ÀûµÄÖ´ÐУ¬²¿·Ö·¢Éú¶öËÀ¡¢ËÀËøµÈÇé¿ö¡£
ÄÚ´æ³Ø
Presto²ÉÓÃÂß¼µÄÄÚ´æ³Ø£¬À´¹ÜÀí²»Í¬ÀàÐ͵ÄÄÚ´æÐèÇó¡£
Presto°ÑÕû¸öÄÚ´æ»®·Ö³ÉÈý¸öÄÚ´æ³Ø£¬·Ö±ðÊÇSystem Pool ,Reserved Pool,
General Pool¡£

System Pool ÊÇÓÃÀ´±£Áô¸øÏµÍ³Ê¹Óõģ¬Ä¬ÈÏΪ40%µÄÄÚ´æ¿Õ¼äÁô¸øÏµÍ³Ê¹Óá£
Reserved PoolºÍGeneral Pool ÊÇÓÃÀ´·ÖÅäqueryÔËÐÐʱÄÚ´æµÄ¡£
ÆäÖд󲿷ֵÄqueryʹÓÃgeneral Pool¡£ ¶ø×î´óµÄÒ»¸öquery£¬Ê¹ÓÃReserved
Pool£¬ ËùÒÔReserved PoolµÄ¿Õ¼äµÈͬÓÚÒ»¸öqueryÔÚÒ»¸ö»úÆ÷ÉÏÔËÐÐʹÓõÄ×î´ó¿Õ¼ä´óС£¬Ä¬ÈÏÊÇ10%µÄ¿Õ¼ä¡£
GeneralÔòÏíÓгýÁËSystem PoolºÍGeneral PoolÖ®ÍâµÄÆäËûÄÚ´æ¿Õ¼ä¡£
ΪʲôҪʹÓÃÄÚ´æ³Ø
System PoolÓÃÓÚϵͳʹÓõÄÄڴ棬ÀýÈç»úÆ÷Ö®¼ä´«µÝÊý¾Ý£¬ÔÚÄÚ´æÖлáά»¤buffer£¬Õⲿ·ÖÄÚ´æ¹ÒÔØsystemÃûÏ¡£
ÄÇô£¬ÎªÊ²Ã´ÐèÒª±£ÁôÇøÄÚ´æÄØ£¿²¢ÇÒ±£ÁôÇøÄÚ´æÕýºÃµÈÓÚqueryÔÚ»úÆ÷ÉÏʹÓõÄ×î´óÄڴ棿
Èç¹ûûÓÐReserved Pool£¬ ÄÇôµ±query·Ç³£¶à£¬²¢ÇÒ°ÑÄÚ´æ¿Õ¼ä¼¸ºõ¿ìÒªÕ¼ÍêµÄʱºò£¬Ä³Ò»¸öÄÚ´æÏûºÄ±È½Ï´óµÄquery¿ªÊ¼ÔËÐС£µ«ÊÇÕâʱºòÒѾûÓÐÄÚ´æ¿Õ¼ä¿É¹©Õâ¸öqueryÔËÐÐÁË£¬Õâ¸öqueryÒ»Ö±´¦ÓÚ¹ÒÆð״̬£¬µÈ´ý¿ÉÓõÄÄÚ´æ¡£
µ«ÊÇÆäËûµÄСÄÚ´æqueryÅÜÍêºó£¬ÓÖÓÐеÄСÄÚ´æquery¼Ó½øÀ´¡£ÓÉÓÚСÄÚ´æqueryÕ¼ÓÃÄÚ´æÐ¡£¬ºÜÈÝÒ×ÕÒµ½¿ÉÓÃÄÚ´æ¡£
ÕâÖÖÇé¿öÏ£¬´óÄÚ´æquery¾ÍÒ»Ö±¹ÒÆðÖ±µ½¶öËÀ¡£
ËùÒÔΪÁË·ÀÖ¹³öÏÖÕâÖÖ¶öËÀµÄÇé¿ö£¬±ØÐëÔ¤Áô³öÀ´Ò»¿é¿Õ¼ä£¬¹²´óÄÚ´æqueryÔËÐС£ Ô¤ÁôµÄ¿Õ¼ä´óСµÈÓÚqueryÔÊÐíʹÓõÄ×î´óÄÚ´æ¡£PrestoÿÃëÖÓ£¬Ìô³öÀ´Ò»¸öÄÚ´æÕ¼ÓÃ×î´óµÄquery£¬ÔÊÐíËüʹÓÃreserved
pool£¬±ÜÃâһֱûÓпÉÓÃÄڴ湩¸ÃqueryÔËÐС£
ÄÚ´æ¹ÜÀí

PrestoÄÚ´æ¹ÜÀí£¬·ÖÁ½²¿·Ö£º
1.queryÄÚ´æ¹ÜÀí
query»®·Ö³ÉºÜ¶àtask£¬ ÿ¸ötask»áÓÐÒ»¸öÏß³ÌÑ»·»ñÈ¡taskµÄ״̬£¬°üÀ¨taskËùÓÃÄÚ´æ¡£»ã×ܳÉqueryËùÓÃÄÚ´æ¡£
Èç¹ûqueryµÄ»ã×ÜÄڴ泬¹ýÒ»¶¨´óС£¬ÔòÇ¿ÖÆÖÕÖ¹¸Ãquery¡£
2.»úÆ÷ÄÚ´æ¹ÜÀí
coordinatorÓÐÒ»¸öỊ̈߳¬¶¨Ê±µÄÂÖѵÿ̨»úÆ÷£¬²é¿´µ±Ç°µÄ»úÆ÷ÄÚ´æ×´Ì¬¡£
µ±queryÄÚ´æºÍ»úÆ÷ÄÚ´æ»ã×ÜÖ®ºó£¬coordinator»áÌôÑ¡³öÒ»¸öÄÚ´æÊ¹ÓÃ×î´óµÄquery£¬·ÖÅ䏸Reserved
Pool¡£
ÄÚ´æ¹ÜÀíÊÇÓÉcoordinatorÀ´¹ÜÀíµÄ£¬ coordinatorÿÃëÖÓ×öÒ»´ÎÅжϣ¬Ö¸¶¨Ä³¸öqueryÔÚËùÓеĻúÆ÷É϶¼ÄÜʹÓÃreserved
ÄÚ´æ¡£ÄÇôÎÊÌâÀ´ÁË£¬Èç¹ûij̨»úÆ÷ÉÏ£¬£¬Ã»ÓÐÔËÐиÃquery£¬ÄÇÆñ²»ÊǸûúÆ÷Ô¤ÁôµÄÄÚ´æÀË·ÑÁË£¿ÎªÊ²Ã´²»ÔÚµ¥Ì¨»úÆ÷ÉÏÌô³öÀ´Ò»¸ö×î´óµÄtaskÖ´ÐС£ÔÒò»¹ÊÇËÀËø£¬¼ÙÈçquery£¬ÔÚÆäËû»úÆ÷ÉÏÏíÓÐreservedÄڴ棬ºÜ¿ìÖ´ÐнáÊø¡£µ«ÊÇÔÚijһ̨»úÆ÷Éϲ»ÊÇ×î´óµÄtask£¬Ò»Ö±µÃ²»µ½ÔËÐУ¬µ¼Ö¸ÃqueryÎÞ·¨½áÊø¡£ |