Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
HiveÊÂÎñ¹ÜÀí±Ü¿ÓÖ¸ÄÏ
 
×÷Õߣº ÀîÀÚ À´Ô´£ºInfoQ ·¢²¼ÓÚ£º 2017-4-24
  2243  次浏览      27
 

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µÄ²¢·¢¶Áд½«Ã»ÓÐÈκÎÏÞÖÆ¡£

 

   
2243 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

APPÍƹãÖ®ÇÉÓù¤¾ß½øÐÐÊý¾Ý·ÖÎö
Hadoop Hive»ù´¡sqlÓï·¨
Ó¦Óö༶»º´æģʽ֧³Åº£Á¿¶Á·þÎñ
HBase ³¬Ïêϸ½éÉÜ
HBase¼¼ÊõÏêϸ½éÉÜ
Spark¶¯Ì¬×ÊÔ´·ÖÅä

HadoopÓëSpark´óÊý¾Ý¼Ü¹¹
HadoopÔ­ÀíÓë¸ß¼¶Êµ¼ù
HadoopÔ­Àí¡¢Ó¦ÓÃÓëÓÅ»¯
´óÊý¾ÝÌåϵ¿ò¼ÜÓëÓ¦ÓÃ
´óÊý¾ÝµÄ¼¼ÊõÓëʵ¼ù
Spark´óÊý¾Ý´¦Àí¼¼Êõ

GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Ò滪 ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí