1
¼ò½é
Hive×÷ΪHadoop¼Ò×åÀúÊ·×îÓƾõÄ×é¼þÖ®Ò»£¬Ò»Ö±ÒÔÆäÓÅÐãµÄ¼æÈÝÐÔÖ§³ÖºÍÎȶ¨ÐÔ¶øÖø³Æ£¬Ô½À´Ô½¶àµÄÆóÒµ½«ÒµÎñÊý¾Ý´Ó´«Í³Êý¾Ý¿âǨÒÆÖÁHadoopƽ̨£¬²¢Í¨¹ýHiveÀ´½øÐÐÊý¾Ý·ÖÎö¡£µ«ÊÇÎÒÃÇÔÚǨÒƵĹý³ÌÖÐÄÑÃâ»áÅöµ½ÈçºÎ½«´«Í³Êý¾Ý¿âµÄ¹¦ÄÜҲǨÒƵ½HadoopµÄÎÊÌ⣬±ÈÈç˵ÊÂÎñ¡£ÊÂÎñ×÷Ϊ´«Í³Êý¾Ý¿âºÜÖØÒªµÄÒ»¸ö¹¦ÄÜ£¬ÔÚHiveÖÐÊÇÈçºÎʵÏÖµÄÄØ£¿HiveµÄʵÏÖÓÐʲô²»Ò»ÑùµÄµØ·½ÄØ£¿ÎÒÃǽ«´«Í³Êý¾Ý¿âµÄÓ¦ÓÃǨÒƵ½HiveÈç¹ûÓÐÊÂÎñÏà¹ØµÄ³¡¾°ÎÒÃǸÃÈçºÎȥת»»²¢Òª×¢ÒâʲôÎÊÌâÄØ£¿
±¾ÎÄ»áͨ¹ýºÜ¶àÕæʵ²âÊÔ°¸ÀýÀ´±È½ÏHiveÓ봫ͳÊý¾Ý¿âÊÂÎñµÄÇø±ð£¬²¢ÔÚÎÄÄ©¸ø³öһЩÔÚHiveƽ̨ÉÏʹÓÃÊÂÎñÏà¹ØµÄ¹¦ÄÜʱµÄÖ¸µ¼ºÍ½¨Òé¡£
2 ACIDÓëʵÏÖÔÀí
ΪÁË·½±ã½âÊͺÍ˵Ã÷ºóÃæµÄһЩÎÊÌ⣬ÕâÀïÖØÌᴫͳÊý¾Ý¿âÊÂÎñÏà¹ØµÄ¸ÅÄÒÔÏÂÄÚÈÝÀ´Ô´ÓÚÍøÂç¡£
2.1 ACID˵Ã÷
1.Ô×ÓÐÔ£¨Atomicity£©
2.Ò»¸öÊÂÎñÊÇÒ»¸ö²»¿ÉÔÙ·Ö¸îµÄ¹¤×÷µ¥Î»£¬ÊÂÎñÖеÄËùÓвÙ×÷Ҫô¶¼·¢Éú£¬ÒªÃ´¶¼²»·¢Éú¡£
3.Ò»ÖÂÐÔ£¨Consistency£©
4.ÊÂÎñ¿ªÊ¼Ö®Ç°ºÍÊÂÎñ½áÊøÒÔºó£¬Êý¾Ý¿âµÄÍêÕûÐÔÔ¼ÊøûÓб»ÆÆ»µ¡£ÕâÊÇ˵Êý¾Ý¿âÊÂÎñ²»ÄÜÆÆ»µ¹ØϵÊý¾ÝµÄÍêÕûÐÔÒÔ¼°ÒµÎñÂß¼ÉϵÄÒ»ÖÂÐÔ¡£
5.¸ôÀëÐÔ£¨Isolation£©
6.¶à¸öÊÂÎñ²¢·¢·ÃÎÊ£¬ÊÂÎñÖ®¼äÊǸôÀëµÄ£¬Ò»¸öÊÂÎñ²»Ó°ÏìÆäËüÊÂÎñÔËÐÐЧ¹û¡£ÕâÖ¸µÄÊÇÔÚ²¢·¢»·¾³ÖУ¬µ±²»Í¬µÄÊÂÎñͬʱ²Ù×÷ÏàͬµÄÊý¾Ýʱ£¬Ã¿¸öÊÂÎñ¶¼Óи÷×ÔÍêÕûµÄÊý¾Ý¿Õ¼ä¡£ÊÂÎñ²é¿´Êý¾Ý¸üÐÂʱ£¬Êý¾ÝËù´¦µÄ״̬ҪôÊÇÁíÒ»ÊÂÎñÐÞ¸ÄËü֮ǰµÄ״̬£¬ÒªÃ´ÊÇÁíÒ»ÊÂÎñÐ޸ĺóµÄ״̬£¬ÊÂÎñ²»»á²é¿´µ½Öмä״̬µÄÊý¾Ý¡£
7.ÊÂÎñÖ®¼äµÄÏàÓ¦Ó°Ï죬·Ö±ðΪ£ºÔà¶Á¡¢²»¿ÉÖظ´¶Á¡¢»Ã¶Á¡¢¶ªÊ§¸üС£
8.³Ö¾ÃÐÔ£¨Durability£©
9.Òâζ×ÅÔÚÊÂÎñÍê³ÉÒԺ󣬸ÃÊÂÎñËø¶ÔÊý¾Ý¿âËù×÷µÄ¸ü¸Ä±ã³Ö¾ÃµÄ±£´æÔÚÊý¾Ý¿âÖ®ÖУ¬²¢²»»á±»»Ø¹ö¡£
2.2 ACIDµÄʵÏÖÔÀí
ÊÂÎñ¿ÉÒÔ±£Ö¤ACIDÔÔòµÄ²Ù×÷£¬ÄÇôÊÂÎñÊÇÈçºÎ±£Ö¤ÕâЩÔÔòµÄ£¿½â¾öACIDÎÊÌâµÄÁ½´ó¼¼ÊõµãÊÇ£º
1.ԤдÈÕÖ¾£¨Write-ahead logging£©±£Ö¤Ô×ÓÐԺͳ־ÃÐÔ
2.Ëø£¨locking£©±£Ö¤¸ôÀëÐÔ
ÕâÀﲢûÓÐÌáµ½Ò»ÖÂÐÔ£¬ÊÇÒòΪһÖÂÐÔÊÇÓ¦ÓÃÏà¹ØµÄ»°Ì⣬ËüµÄ¶¨ÒåÒ»¸öÓÉÒµÎñϵͳÀ´¶¨Ò壬ʲôÑùµÄ״̬²ÅÊÇÒ»Ö£¿¶øʵÏÖÒ»ÖÂÐԵĴúÂëͨ³£ÔÚÒµÎñÂß¼µÄ´úÂëÖеÃÒÔÌåÏÖ¡£
×¢£ºËøÊÇÖ¸ÔÚ²¢·¢»·¾³ÖÐͨ¹ý¶ÁдËøÀ´±£Ö¤²Ù×÷µÄ»¥³âÐÔ¡£¸ù¾Ý¸ôÀë³Ì¶È²»Í¬£¬ËøµÄÔËÓÃÒ²²»Í¬¡£
3 ²âÊÔ»·¾³

4 HiveµÄACID²âÊÔ
4.1 HiveÖеÄËø£¨²»¿ªÆôÊÂÎñ£©
HiveÖж¨ÒåÁËÁ½ÖÖËøµÄģʽ£º¹²ÏíËø£¨S£©ºÍÅÅËüËø£¨X£©£¬¹ËÃû˼Ò壬¶à¸ö¹²ÏíËø(S)¿ÉÒÔͬʱ»ñÈ¡£¬µ«ÊÇÅÅËüËø(X)»á×èÈûÆäËüËùÓÐËø¡£ÔÚ±¾´Î²âÊÔÖУ¬CDH5.9µÄConcurrency²ÎÊýÊÇĬÈÏ¿ªÆôµÄ£¨hive.support.concurrency=true£©£¬ÒÔÏ·ֱð¶Ô¿ªÆôConcurrencyºÍ¹Ø±Õ½øÐÐÏà¹Ø²âÊÔ¡£
Ê×ÏÈÔÚ²âÊÔ֮ǰ£¬´´½¨Ò»¸öÆÕͨµÄhive±í£º
create table test_notransaction(user_id Int,name String);
|
Ïòtest_transaction±íÖвåÈë²âÊÔÊý¾Ý£º
insert into test_notransaction values(1,'peach1'),(2,'peach2'),(3, 'peach3'),(4, 'peach4');
|
²é¿´²åÈëµÄÊý¾Ý£º
(µã»÷·Å´óͼÏñ)

4.1.1 ¿ªÆôConcurrency
1. ¶Ôcatalog_sales±í½øÐв¢·¢select²Ù×÷
Ö´ÐеÄsqlÓï¾ä£ºselect count(*) from catalog_sales;
Ö´Ðе¥Ìõsql²éѯʱ£¬»ñÈ¡Ò»¸ö¹²ÏíËø£¨S£©£¬sqlÓï¾äÕý³£Ö´ÐÐ

ͬʱִÐÐÁ½Ìõsql²éѯÊÇ£¬»ñÈ¡Á½¸ö¹²ÏíËø£¬²¢ÇÒsqlÓï¾ä¾ùÕý³£Ö´ÐÐ

·ÖÎö£ºÓɴ˶ԱȿɵóöhiveÔÚÖ´ÐÐsql²éѯʱ»ñÈ¡ShareËø£¬ÔÚ²¢·¢µÄÇé¿öÏ¿ɻñÈ¡¶à¸ö¹²ÏíËø¡£
2. ¶Ôtest±í½øÐв¢·¢Insert²Ù×÷
´´½¨±í£º
create table test(name string, id int);
|
Ö´ÐÐsqlÓï¾ä£º
insert into test values('test11aaa1',1252); insert into test values('test1',52);
|
Ö´Ðе¥ÌõinsertÓï¾äʱ£¬»ñÈ¡Ò»¸öXËø£¬sqlÓï¾äÕý³£Ö´ÐÐ

ͬʱִÐÐÁ½ÌõinsertÓï¾äʱ£¬Ö»ÄÜ»ñÈ¡Ò»¸ötest±íXËø£¬µÚÒ»ÌõinsertÓï¾äÕý³£Ö´ÐУ¬µÚ¶þÌõinsertÓï¾ä´¦Óڵȴý״̬£¬ÔÚµÚÒ»ÌõinsertÓï¾äÊÍ·Åtest±íµÄXËø£¬µÚ¶þÌõsqlÓï¾äÕý³£Ö´ÐÐ.
·ÖÎö£ºÓɴ˶ԱȿɵóöhiveÔÚÖ´ÐÐinsert²Ù×÷ʱ£¬Ö»ÄÜ»ñÈ¡Ò»¸öXËøÇÒËø²»Äܹ²Ïí£¬Ö»ÄÜÔÚsqlÖ´ÐÐÍê³ÉÊÍ·ÅËøºó£¬ºóÐøsql·½¿É¼ÌÐøÖ´ÐС£
3. ¶Ôtest±íÖ´ÐÐselectµÄͬʱִÐÐinsert²Ù×÷
Ö´ÐÐsqlÓï¾ä£º
select count(*) from test; insert into test values("test123",123);
|
²½Ö裺
1) Ö´ÐÐselectÓï¾ä£¬ÔÚselectδÔËÐÐÍêʱ£¬ÔÚеĴ°¿ÚͬʱִÐÐinsertÓï¾ä¹Û²ìÁ½ÌõsqlÖ´ÐÐÇé¿ö£¬selectÓï¾äÕý³£Ö´ÐУ¬insertÓï¾ä´¦Óڵȴý״̬¡£
2) ´Ëʱ²é¿´test±íËø״̬

ÔÚ²½Öè1µÄÖ´Ðйý³ÌÖУ¬»ñÈ¡µ½test±íµÄËøΪ¹²ÏíËø£¨S£©
3) ÔÚselectÓï¾äÖ´ÐÐÍê³Éºó£¬¹Û²ìinsertÓï¾ä¿ªÊ¼Õý³£Ö´ÐУ¬´Ëʱ»ñÈ¡test±íËøΪÅÅËüËø£¨X£©¡£×¢Ò⣺ÔÚselectÓï¾äÖ´ÐÐÍê³Éºó£¬´ó¸Å¹ý40s×óÓÒinsertÓï¾ä²ÅÕý³£Ö´ÐУ¬ÕâÊÇÓÉhive.lock.sleep.between.retries²ÎÊý¿ØÖÆ£¬Ä¬ÈÏ60

·ÖÎö£º ÓÉÉÏÊö²Ù×÷¿ÉµÃ³ö£¬hiveÖÐÒ»¸ö±íÖ»ÄÜÓÐÒ»¸öÅÅËüËø(X)ÇÒËø²»Äܹ²Ïí£¬ÔÚ»ñÈ¡ÅÅËüËøʱ£¬±íÉϲ»ÄÜÓÐÆäËüËø°üÀ¨¹²ÏíËø(S)£¬Ö»ÓÐÔÚ±íÉÏËùÓеÄËø¶¼Êͷźó£¬insert²Ù×÷²ÅÄܼÌÐø£¬·ñÔò´¦Óڵȴý״̬¡£
¶Ô×¢Òⲿ·Ö½øÐвÎÊýµ÷Õû£¬½«hive.lock.sleep.between.retriesÉèÖÃΪ10s£¬ÔٴνøÐвâÊÔ·¢ÏÖ£¬ÔÚselectÓï¾äÖ´ÐÐÍê³Éºó£¬´ó¸Å¹ý6s×óÓÒinsertÓï¾ä¿ªÊ¼Ö´ÐÐ,ͨ¹ýÁ½´Î²âÊÔ·¢ÏÖ£¬µÈ´ýʱ¼ä¾ùÔÚ10sÒÔÄÚ£¬ÓÉ´Ë¿ÉÒԵóö´Ë²ÎÊýÓ°Ïìsql²Ù×÷»ñÈ¡ËøµÄ¼ä¸ô£¨ÔÚδ»ñÈ¡µ½ËøµÄÇé¿öÏ£©£¬Èç¹û´Ëʱδµ½»ñÈ¡Ëø´¥·¢ÖÜÆÚ£¬Ö´ÐÐÆäËüsqlÔò£¬¸Ãsql»áÓÅÓڵȴýµÄsqlÖ´ÐС£
4. ¶Ôtest±íÖ´ÐÐinsertµÄͬʱִÐÐselect²Ù×÷
Ö´ÐÐsqlÓï¾ä£º
insert into test values("test123",123); select count(*) from test;
|
²Ù×÷²½Ö裺
1) ÔÚÃüÁî´°¿ÚÖ´ÐÐinsertÓï¾ä£¬ÔÚinsert²Ù×÷δִÐÐÍê³Éʱ£¬ÔÚеÄÃüÁî´°¿ÚÖ´ÐÐselectÓï¾ä£¬¹Û²ìÁ½¸ö´°¿ÚµÄsqlÖ´ÐÐÇé¿ö£¬insertÓï¾äÕý³£Ö´ÐУ¬selectÓï¾ä´¦Óڵȴý״̬¡£
2) ´Ëʱ²é¿´test±íËø״̬£¬Ö»ÓÐinsert²Ù×÷»ñÈ¡µÄÅÅËüËø£¨X£©

3) ÔÚinsertÓï¾äÖ´ÐÐÍê³Éºó£¬¹Û²ìselectÓï¾ä¿ªÊ¼Õý³£Ö´ÐУ¬´Ëʱ²é¿´test±íËø״̬Ϊ¹²ÏíËø£¨S£©£¬Ö®Ç°µÄinsert²Ù×÷»ñÈ¡µÄÅÅËüËø£¨X£©Òѱ»ÊÍ·Å

·ÖÎö£ºÔÚtest±íËø״̬ΪÅÅËüËø(X)ʱ£¬ËùÓеIJÙ×÷¾ù±»×èÈû´¦Óڵȴý״̬£¬Ö»ÓÐÔÚÅÅËüËø(X)ÊÍ·ÅÆäËü²Ù×÷¿É¼ÌÐø½øÐС£
5. ²âÊÔupdateºÍdeleteÐÞ¸Ätest±íÊý¾Ý
sqlÓï¾ä£º
update test set name='aaaa' where id=1252; delete test set name='bbbb' where id=123;
|
1) ±íÖÐÊý¾Ý£¬¸üÐÂÇ°

2) ÔÚbeeline´°¿ÚÖ´ÐÐupdate²Ù×÷

Ö´ÐÐupdate²Ù×÷±¨´í£¬Òì³£Ìáʾ¡°Attempt to do update or delete using
transaction manager that does not support these operations¡±£¬ÔÚ·ÇÊÂÎñģʽϲ»Ö§³Öupdate
ºÍ delete¡£
4.1.2 ¹Ø±ÕConcurrency
1. Ö´ÐÐinsert²Ù×÷µÄͬʱִÐÐselect²Ù×÷
sqlÓï¾ä£º
insert into test_notransaction values(1,'peach1'),(2,'peach2'),(3, 'peach3'),(4, 'peach4'); select count(*) from test_notransaction;
|
²Ù×÷sqlÇ°£¬²é¿´±íÊý¾Ý

²é¿´test_notransaction±í»ñÈ¡Çé¿ö£¬show locks;

hiveÔÚ먦Æôconcurrency µÄÇé¿öÏÂ,show locks²»ÄÜÕý³£»ñÈ¡±íµÄËø£¬Í¬Ê±¶ÔͬһÕűíÖ´ÐÐinsertºÍselect²Ù×÷ʱ²¢·¢Ö´ÐУ¬»ñÈ¡Êý¾ÝÈ¡¾öÓÚsqlÖ´ÐÐËٶȣ¬Òò´ËÔÚselect
µÄʱºòδ»ñÈ¡µ½²åÈëÊý¾Ý¡£
2. Ö´ÐÐselect²Ù×÷µÄͬʱִÐÐinsert²Ù×÷
sqlÓï¾ä£º
select count(*) from test_notransaction; insert into test_notransaction values(1,'peach1'),(2,'peach2'),(3, 'peach3'),(4, 'peach4');
|
ÔÚÖ´ÐÐselectµÄͬʱִÐÐinsert²Ù×÷£¬²Ù×÷¿ÉÒÔͬʱ²¢ÐвÙ×÷£¬Î´²úÉú×èÈûµÈ´ýµÄ¹ý³Ì¡£
3. ͬʱִÐжàÌõinsert²Ù×÷
sqlÓï¾ä£º
insert into test_notransaction values(1,'peach1'),(2,'peach2'),(3, 'peach3'),(4, 'peach4'); insert into test_notransaction values(1,'peach1'),(2,'peach2'),(3, 'peach3'),(4, 'peach4');
|
ͬʱִÐÐinsert²Ù×÷ʱ£¬¿ÉͬʱִÐÐδ²úÉú×èÈûµÈ´ýµÄ¹ý³Ì¡£
4. Ö´ÐÐupdate²Ù×÷£¬½«±íÖÐuser_idΪ2µÄÓû§ÃûÐÞ¸ÄΪpeach22
sqlÓï¾ä£º
update test_notransaction set name='peach22' where user_id=2;
|
Ö´ÐÐupdate²Ù×÷£¬Ö´Ðнá¹ûÈçÏ£º

ÔÚδÅäÖÃhiveµÄTransactionºÍACIDʱ£¬²»Ö§³Öupdate²Ù×÷¡£
5. Ö´ÐÐdelete²Ù×÷£¬½«±íÖÐuser_idΪ1ÐÅϢɾ³ý
sqlÓï¾ä£º
delete from test_notransaction where user_id=1;
|
Ö´ÐÐdelete²Ù×÷£¬Ö´Ðнá¹ûÈçÏ£º

hiveδÅäÖÃTransactionºÍACID£¬²»Ö§³Ödelete²Ù×÷¡£
6. ²é¿´±í»ñÈ¡ËøÀàÐÍ
show locks;
ÎÞ·¨Õý³£Ö´ÐУ»
4.2 HiveµÄÊÂÎñ
4.2.1 HiveµÄÊÂÎñÅäÖÃ
Hive´Ó0.13¿ªÊ¼¼ÓÈëÁËÊÂÎñÖ§³Ö£¬ÔÚÐ춱ðÌṩÍêÕûµÄACIDÌØÐÔ£¬HiveÔÚ0.14ʱ¼ÓÈëÁ˶ÔINSERT...VALUES,UPDATE,and
DELETEµÄÖ§³Ö¡£¶ÔÓÚÔÚHiveÖÐʹÓÃACIDºÍTransactions£¬Ö÷ÒªÓÐÒÔÏÂÏÞÖÆ£º
²»Ö§³ÖBEGIN,COMMITºÍROLLBACK
Ö»Ö§³ÖORCÎļþ¸ñʽ
±í±ØÐë·ÖÍ°
²»ÔÊÐí´ÓÒ»¸ö·ÇACIDÁ¬½ÓдÈë/¶ÁÈ¡ACID±í
ΪÁËʹHiveÖ§³ÖÊÂÎñ²Ù×÷£¬Ð轫ÒÔϲÎÊý¼ÓÈëµ½hive-site.xmlÎļþÖС£
<property><name>hive.support.concurrency</name> <value>true</value> </property> <property> <name>hive.enforce.bucketing</name> <value>true</value> </property> <property> <name>hive.exec.dynamic.partition.mode</name> <value>nonstrict</value> </property> <property> <name>hive.txn.manager</name> <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value> </property> <property> <name>hive.compactor.initiator.on</name> <value>true</value> </property> <property> <name>hive.compactor.worker.threads </name> <value>1</value> </property>
|
¿ÉÒÔÔÚCloudera Manager½øÐÐÒÔÏÂÅäÖãº

ΪÁËÈÃbeelineÖ§³Ö»¹ÐèÒªÅäÖãº

4.2.2 HiveÊÂÎñ²âÊÔ
»·¾³×¼±¸
1¡¢´´½¨Ò»¸öÖ§³ÖACIDµÄ±í
½¨±íÓï¾ä£º
create table test_trancaction (user_id Int,name String) clustered by (user_id) into 3 buckets stored as orc TBLPROPERTIES ('transactional'='true');
|
½«±íÃûÐÞ¸ÄΪtest_transaction
alter table test_trancaction rename to test_transaction;
|
2¡¢×¼±¸²âÊÔÊý¾Ý£¬ÏòÊý¾Ý¿âÖвåÈëÊý¾Ý
insert into test_transaction values(1,'peach'),(2,'peach2'),(3,'peach3'),(4,'peach4'),(5,'peach5');
|
ÓÃÀý²âÊÔ
1.Ö´ÐÐupdate²Ù×÷£¬½«user_idµÄnameÐÞ¸ÄΪpeach_update
sqlÓï¾ä£º
update test_transaction set name='peach_update' where user_id=1;
|
Ö´ÐÐÐ޸IJÙ×÷£¬²é¿´±í»ñÈ¡ËøÀàÐÍ

Êý¾ÝÐ޸ijɹ¦£¬ÇÒ²»Ó°ÏìÆäËüÊý¾Ý¡£

2.ͬʱÐÞ¸ÄͬһÌõÊý¾Ý£¬½«user_idΪ1µÄÓû§Ãû×ÖÐÞ¸ÄΪpeach£¬ÁíÒ»Ìõsql½«Ãû×ÖÐÞ¸ÄΪpeach_
sqlÓï¾ä£º
update test_transaction set name='peach' where user_id=1;update test_transaction set name='peach_' where user_id=1;
|
sqlÖ´ÐÐ˳ÐòΪpeach£¬Æä´ÎΪpeach_
´Ëʱ²é¿´±í»ñÈ¡µ½µÄËø

ͨ¹ý»ñÈ¡µ½Ëø·ÖÎö£¬ÔÚͬʱÐÞ¸ÄͬһÌõÊý¾Ýʱ£¬ÓÅÏÈÖ´ÐеÄsql»ñÈ¡µ½ÁËSHARED_WRITE£¬¶øºóÖ´ÐеÄsql»ñÈ¡ËøµÄ״̬ΪWAITING״̬£¬±íʾ»¹Î´»ñÈ¡µ½SHARED_WRITEËø£¬µÈ´ýµÚÒ»ÌõsqlÖ´ÐнáÊøºó·½¿É»ñÈ¡µ½Ëø¶ÔÊý¾Ý½øÐвÙ×÷¡£
ͨ¹ýÉϲ»Ö´ÐвÙ×÷·ÖÎö£¬Êý¾Ýuser_idΪ1µÄÓû§Ãû×ÖÓ¦±»ÐÞ¸ÄΪpeach_

3.ͬʱÐ޸IJ»Í¬Êý¾Ý£¬ÐÞ¸ÄidΪ2µÄnameΪpeachtest£¬ÐÞ¸ÄidΪ3µÄnameΪpeach_test
sqlÓï¾ä£º
update test_transaction set name='peachtest' where user_id=2; update test_transaction set name='peach_test' where user_id=3;
|
sqlÖ´ÐÐ˳ÐòΪpeachtest£¬Æä´ÎΪpeach_test
´Ëʱ²é¿´±í»ñÈ¡µ½µÄËø

ͨ¹ýsql²Ù×÷»ñÈ¡Ëø·ÖÎö£¬ÔÚͬʱÐ޸IJ»Í¬Êý¾Ýʱ£¬ÓÅÏÈÖ´ÐеÄsql»ñÈ¡µ½ÁËSHARED_WRITE£¬¶øºóÖ´ÐеÄsql»ñÈ¡ËøµÄ״̬ΪWAITING״̬£¬±íʾ»¹Î´»ñÈ¡µ½SHARED_WRITEËø£¬µÈ´ýµÚÒ»ÌõsqlÖ´ÐнáÊøºó·½¿É»ñÈ¡µ½Ëø¶ÔÊý¾Ý½øÐвÙ×÷¡£
4.Ö´ÐÐselect²Ù×÷µÄͬʱִÐÐinsert²Ù×÷
sqlÓï¾ä£º
select count(*) from test_transaction; insert into test_transaction values(3,'peach3');
|
²½Ö裺
ÏÈÖ´ÐÐselect²Ù×÷£¬ÔÙÖ´ÐÐinsert²Ù×÷£¬Ö´ÐÐÍê³Éºó²é¿´±í»ñÈ¡µ½µÄËø

ÓÉÓÚselectºÍinsert²Ù×÷¾ù»ñÈ¡µÄÊÇSHARED_READËø£¬¶ÁËøΪ²¢ÐУ¬ËùÒÔselect²éѯºÍinsertͬʱִÐУ¬»¥²»Ó°Ïì¡£
5.updateͬһÌõÊý¾ÝµÄͬʱselect¸ÃÌõÊý¾Ý
sqlÓï¾ä£º
update test_transaction set name='peach_update' where user_id=1; select * from test_transaction where user_id=1;
|
²½Ö裺
ÏÈÖ´ÐÐupdate²Ù×÷£¬ÔÙÖ´ÐÐselect²Ù×÷£¬»ñÈ¡´Ëʱ±í»ñÈ¡µ½µÄËø

ͨ¹ý»ñÈ¡ËøµÄÇé¿ö·ÖÎö£¬ ÔÚupdate²Ù×÷ʱ£¬»ñÈ¡µ½SHARED_WRITEËø£¬Ö´ÐÐselect²Ù×÷ʱ»ñÈ¡µ½SHARED_READËø£¬ÔÚ½øÐÐÐÞ¸ÄÊý¾Ýʱδ×èÈûselect²éѯ²Ù×÷£¬updateδִÐÐÍê³Éʱ£¬select²éѯµ½µÄÊý¾ÝΪδÐ޸ĵÄÊý¾Ý¡£
6.Ö´ÐÐdelete²Ù×÷£¬½«user_idΪ3µÄÊý¾Ýɾ³ý
sqlÓï¾ä£º
delete from test_transaction where user_id=3;
|
²½Ö裺
Ö´ÐÐdelete²Ù×÷£¬»ñÈ¡´Ëʱ±í»ñÈ¡µ½µÄËø

ɾ³ý²Ù×÷»ñÈ¡µ½µÄÊÇSHARED_WRITEËø
Ö´Ðгɹ¦ºóÊý¾Ý

7.ͬʱdeleteͬһÌõÊý¾Ý
sqlÓï¾ä£º
delete from test_transaction where user_id=3;delete from test_transaction where user_id=3;
|
²½Ö裺
°´Ë³ÐòÖ´ÐÐÁ½Ìõdelete²Ù×÷£¬²é¿´´Ëʱ±í»ñÈ¡µ½µÄËø£º

ͨ¹ý²é¿´delete²Ù×÷»ñÈ¡µ½µÄËø£¬ÓÅÏÈÖ´ÐеIJÙ×÷»ñÈ¡µ½SHARED_WRITEËø£¬ºóÖ´ÐеÄdelete²Ù×÷δ»ñÈ¡µ½SHARED_WRITEËø£¬´¦ÓÚWAITING״̬¡£
Ö´ÐÐɾ³ýºó½á¹û

8.ͬʱdeleteÁ½Ìõ²»Í¬µÄÊý¾Ý
sqlÓï¾ä£º
delete from test_transaction where user_id=1; delete from test_transaction where user_id=5;
|
²½Ö裺
°´Ë³ÐòÖ´ÐÐÁ½Ìõdelete²Ù×÷£¬²é¿´´Ëʱ±í»ñÈ¡µ½µÄËø£º

ͨ¹ý²é¿´delete²Ù×÷»ñÈ¡µ½µÄËø£¬ÓÅÏÈÖ´ÐеIJÙ×÷»ñÈ¡µ½SHARED_WRITEËø£¬ºóÖ´ÐеÄdelete²Ù×÷δ»ñÈ¡µ½SHARED_WRITEËø£¬´¦ÓÚWAITING״̬¡£
Ö´ÐÐɾ³ýºó½á¹û

9.Ö´ÐÐdeleteµÄͬʱ¶Ôɾ³ýµÄÊý¾Ý½øÐÐupdate²Ù×÷
sqlÓï¾ä£º
delete from test_transaction where user_id=3; update test_transaction set name='test' where user_id=3;
|
²½Ö裺
°´Ë³ÐòÖ´ÐÐÁ½Ìõsql£¬²é¿´´Ëʱ»ñÈ¡µ½±íµÄËø£º

ͨ¹ý²é¿´deleteºÍupdate²Ù×÷»ñÈ¡µ½µÄËø£¬ÓÅÏÈÖ´ÐеIJÙ×÷»ñÈ¡µ½SHARED_WRITEËø£¬ºóÖ´ÐеIJÙ

×÷δ»ñÈ¡µ½SHARED_WRITEËø£¬´¦ÓÚWAITING״̬¡£
Ö´ÐÐdeleteºÍupdateºó½á¹û

×¢Ò⣺´Ë´¦ÔÚdeleteÓÅÏÈÓÚupdateÖ´ÐУ¬µ«Ö´Ðнá¹ûΪupdateµÄ½á¹û£¬Ö´ÐÐÒì³£¡£
10.Ö´ÐÐdeleteµÄͬʱ¶Ô²»Í¬µÄÊý¾Ý½øÐÐupdate²Ù×÷
sqlÓï¾ä£º
delete from test_transaction where user_id=2; update test_transaction set name='test' where user_id=4;
|
²½Ö裺
°´Ë³ÐòÖ´ÐÐÉÏÃæÁ½Ìõsql£¬²é¿´±íËø»ñÈ¡Çé¿ö

ͨ¹ý²é¿´deleteºÍupdate²Ù×÷»ñÈ¡µ½µÄËø£¬ÓÅÏÈÖ´ÐеIJÙ×÷»ñÈ¡µ½SHARED_WRITEËø£¬ºóÖ´ÐеIJÙ×÷δ»ñÈ¡µ½SHARED_WRITEËø£¬´¦ÓÚWAITING״̬¡£
Ö´ÐÐdeleteºÍupdateºó½á¹û,Ö´Ðнá¹ûÕý³£

11.Ö´ÐÐdeleteµÄͬʱִÐÐselect²Ù×÷
sqlÓï¾ä£º
delete from test_transaction where user_id=4; select count(*) from test_transaction;
|
²½Ö裺
°´Ë³ÐòÖ´ÐÐÉÏÃæÁ½Ìõsql£¬²é¿´±íËø»ñÈ¡Çé¿ö

ÔÚ²Ù×÷deleteµÄͬʱִÐÐselect²Ù×÷£¬Á½¸ö²Ù×÷¾ùͬʱ»ñÈ¡µ½SHARED_REDºÍSHARED_WRITEËø£¬²Ù×÷²¢ÐнøÐÐδ³öÏÖ×èÈû¡£
5 ×ܽá¶Ô±È

6 HiveÊÂÎñʹÓý¨Òé
1.´«Í³Êý¾Ý¿âÖÐÓÐÈýÖÖÄ£ÐÍÒþʽÊÂÎñ¡¢ÏÔʾÊÂÎñºÍ×Ô¶¯ÊÂÎñ¡£ÔÚÄ¿Ç°Hive¶ÔÊÂÎñ½öÖ§³Ö×Ô¶¯ÊÂÎñ£¬Òò´ËHiveÎÞ·¨Í¨¹ýÏÔʾÊÂÎñµÄ·½Ê½¶ÔÒ»¸ö²Ù×÷ÐòÁнøÐÐÊÂÎñ¿ØÖÆ¡£
2.´«Í³Êý¾Ý¿âÊÂÎñÔÚÓöµ½Òì³£Çé¿ö¿É×Ô¶¯½øÐлعö£¬Ä¿Ç°HiveÎÞ·¨Ö§³ÖROLLBACK¡£
3.´«Í³Êý¾Ý¿âÖÐÖ§³ÖÊÂÎñ²¢·¢£¬¶øHive¶ÔÊÂÎñÎÞ·¨×öµ½ÍêÈ«²¢·¢¿ØÖÆ,¶à¸ö²Ù×÷¾ùÐèÒª»ñÈ¡WRITEµÄʱºòÔòÕâЩ²Ù×÷Ϊ´®ÐÐģʽִÐУ¨ÔÚ²âÊÔÓÃÀýÖÐ"deleteͬһÌõÊý¾ÝµÄͬʱupdate¸ÃÊý¾Ý"£¬²Ù×÷ÊÇ´®ÐеÄÇÒ²Ù×÷Íê³ÉºóÊý¾Ýδ±»É¾³ýÇÒÊý¾Ý±»Ð޸ģ©Î´±£Ö¤Êý¾ÝÒ»ÖÂÐÔ¡£
4.HiveµÄÊÂÎñ¹¦ÄÜÉÐÊôÓÚʵÑéÊÒ¹¦ÄÜ£¬²¢²»½¨ÒéÓû§Ö±½ÓÉÏÉú²úϵͳ£¬ÒòΪĿǰËü»¹ÓÐÖî¶àµÄÏÞÖÆ£¬ÈçÖ»Ö§³ÖORCÎļþ¸ñʽ£¬½¨±í±ØÐë·ÖÍ°µÈ£¬Ê¹ÓÃÆðÀ´Ã»ÓÐÄÇô·½±ã£¬ÁíÍâ¸Ã¹¦ÄܵÄÎȶ¨ÐÔ»¹Óдý½øÒ»²½ÑéÖ¤¡£
5.CDHĬÈÏ¿ªÆôÁËHiveµÄConcurrency¹¦ÄÜ£¬Ö÷ÒªÊǶԲ¢·¢¶ÁдµÄµÄʱºòͨ¹ýËø½øÐÐÁË¿ØÖÆ¡£ËùÒÔΪÁË·ÀÖ¹Óû§ÔÚʹÓÃHiveµÄʱºò£¬±¨´íÌáʾ¸Ã±íÒѾ±»lock£¬¶ÔÓÚÓû§À´Ëµ²»ÓѺ㬽¨ÒéÔÚÒµÎñ²à¿ØÖÆÒ»ÏÂдÈëºÍ¶ÁÈ¡£¬±ÈÈçдÈëͬһ¸ötable»òÕßpartitionµÄʱºò±£Ö¤Êǵ¥ÈÎÎñдÈ룬ÆäËûдÈëÐè¿ØÖÆдÍêµÚÒ»¸öÈÎÎñÁË£¬ºóÃæ²Å¼ÌÐøд£¬²¢ÇÒ¿ØÖÆÔÚдµÄʱºò²»ÈÃÓû§½øÐвéѯ¡£ÁíÍâÐèÒª¿ØÖÆÔÚ²éѯµÄʱºò²»ÒªÔÊÐíÓÐдÈë²Ù×÷¡£
6.Èç¹û¶ÔÓÚÊý¾ÝÒ»ÖÂÐÔ²»ÔÚºõ£¬¿ÉÒÔÍêÈ«¹Ø±ÕHiveµÄConcurrency¹¦Äܹرգ¬¼´ÉèÖÃhive.support.concurrencyΪfalse£¬ÕâÑùHiveµÄ²¢·¢¶Áд½«Ã»ÓÐÈκÎÏÞÖÆ¡£
|