การสแกน HBase - ตัวกรอง RowKey

มาดูกันว่าฉันสามารถอธิบายปัญหาของฉันโดยย่อได้หรือไม่

ลองนึกภาพเรามีตาราง HBase ที่มีข้อมูลของการเยี่ยมชมดิสโก้ทุกครั้ง: ดิสโก้ทุกแห่งจะลงทะเบียน ชื่อ, ชื่อของผู้เยี่ยมชม และ วัน< /em> เขาไปเยี่ยมมัน (ใช่ มันเป็นตัวอย่างโง่ๆ ฉันรู้..)

ตัวอย่างเช่น ค่าเหล่านี้จะเป็นค่าบางค่าของตาราง:

..
ministryOfSoundJamesOliver01022017
ministryOfSoundJamesOliver02022017
ministryOfSoundJamesOliver03022017
ministryOfSoundOliviaNewton04042017
ministryOfSoundOliviaNewton06042017
...
pachaibizaJohnMcKiness06042017
pachaibizaJohnMcKiness04042017
pachaibizaWilliamForrester04042017
..

RowKey มีโครงสร้างดังต่อไปนี้:

ดิสโก้ชื่อ

ชื่อบุคคล

วันแห่งปี

(ตารางมีคอลัมน์/ตัวระบุอื่นๆ แต่ฉันไม่สนใจเกี่ยวกับปัญหานี้)


ปัญหาคือ ลองจินตนาการถึงเด็กผู้ชายคนหนึ่งที่ชอบไปกระทรวงเสียง เขาแค่ชอบมัน เขาใช้เงินทั้งหมดไปกับดิสโก้และยาเสพติด (แต่นั่นไม่ใช่ประเด็นที่นี่)

เป้าหมายของฉันคือ แสดงทุกคนที่เข้าร่วม Ministry Of Sound ในการสแกนของฉัน เพื่อนคนนี้ยังคงปรากฏในผลลัพธ์ ดังนั้นฉันต้องทิ้งรายการจำนวนมากเพื่อค้นหาผู้เยี่ยมชมรายต่อไป เฟ:

..
ministryOfSoundJohnnyYonkie01022017
ministryOfSoundJohnnyYonkie02022017
ministryOfSoundJohnnyYonkie03022017
ministryOfSoundJohnnyYonkie04022017
ministryOfSoundJohnnyYonkie05022017
ministryOfSoundAnotherDude02022017
...

หากต้องการลงทะเบียน AnotherDude ฉันต้องละทิ้ง 4 รายการจาก Johnny

สุดท้ายนี้คำถามคือ:


มีวิธีใดที่จะบอก HBase ว่ารายการซ้ำจาก byte(x) ถึง byte(x+y) [ x เป็นจำนวนไบต์จาก discoName และ y จำนวนไบต์จาก personName ] จะต้องเป็น < strong>ทิ้งโดยอัตโนมัติ?


ขอบคุณมากในล่วงหน้า!!


person aran    schedule 08.03.2017    source แหล่งที่มา
comment
รูปแบบการเข้าถึงข้อมูลคืออะไร? คุณใช้ Hadoop และ MapReduce หรือเพียงแค่สแกนตารางด้วย API ไคลเอ็นต์ HBase หรือไม่ คุณต้องการข้ามรายการบนฝั่งเซิร์ฟเวอร์ HBase หรือบนไคลเอนต์ ดังนั้นฟังก์ชันการประมวลผลข้อมูลจะยอมรับเฉพาะรายการผู้ใช้ดิสโก้ที่ไม่ซ้ำกันหรือไม่ ฉันไม่เข้าใจสถานการณ์นี้อย่างถ่องแท้   -  person AdamSkywalker    schedule 14.03.2017
comment
สวัสดี @AdamSkywalker! เราเชื่อมต่อกับ Hbase ผ่านไคลเอนต์ API (โดยใช้ thrift และ C#) และเป้าหมายของเราคือการข้ามรายการทางฝั่งเซิร์ฟเวอร์ ขอบคุณ!   -  person aran    schedule 15.03.2017
comment
คุณได้พิจารณาที่จะสร้างการสแกนใหม่ด้วย startKey ที่กำหนดเพื่อข้ามรายการหรือไม่ ตัวอย่างเช่น เมื่อคุณพบ JohnnyYonkie คุณจะสร้างการสแกนใหม่ด้วยปุ่มเริ่มต้น 'ministryOfSoundJohnnyYonkie99999'   -  person AdamSkywalker    schedule 15.03.2017
comment
นั่นเป็นความคิดที่ฉลาด @AdamSkywalker คุณดูฉลาด เอาไว้อย่างนั้นครับพี่   -  person aran    schedule 12.09.2017


คำตอบ (1)


สิ่งแรกสุด: หากคุณมีสิทธิ์เข้าถึงเฉพาะลูกค้า ฉันไม่สามารถช่วยคุณได้ :(

หากคุณมีสิทธิ์เข้าถึงเพิ่มเติม คุณสามารถดูข้อเสนอต่อไปนี้ได้ แต่การตอบกลับเริ่มต้นจะเป็น: หากนี่คือรูปแบบการเข้าถึงของคุณ ให้ปรับสคีมาของคุณให้เหมาะสม

หากคุณต้องการเข้าถึงข้อมูลด้วยวิธีใดวิธีหนึ่ง ตรวจสอบให้แน่ใจว่าคุณเขียนข้อมูลในลักษณะนั้นตั้งแต่แรก ใช้ API การลดแผนที่ หากคุณจำเป็นต้องดำเนินการย้ายข้อมูล

ฉันอาจจะแค่เพิ่มตารางที่เขียนแถว MinistryOfSound และคอลัมน์ต่อผู้เยี่ยมชม (โดยทั่วไป สคีมาที่คุณเสนอฟังดูไม่เหมาะกับ HBase มากนัก เนื่องจากคุณมีการเขียนจำนวนมากที่มีคีย์แถวที่เพิ่มขึ้นซ้ำซาก หากการประมวลผลผลลัพธ์ที่ซ้ำกันหลังการประมวลผลออกไปนั้นเป็นปัญหาด้านประสิทธิภาพจริงๆ)

ในทางกลับกัน หากนี่เป็นแบบสอบถามเฉพาะกิจ คุณอาจต้องการใช้ mapreduce-API ทันที - อาจใช้ Apache Spark-interconnect และทำการเรียกข้อมูล "ที่แตกต่าง"

การใช้การสแกนเพื่อการสืบค้นเชิงวิเคราะห์ไม่ใช่วิธีที่ฉันควรทำ

หากคุณต้องทำโดยใช้ Scans ฉันขอแนะนำให้คุณใช้ CoProcessor สิ่งเหล่านี้สามารถเพิ่มตัวกรองด้วยสถานะ และคุณสามารถฉายผลลัพธ์ของการสแกน PrefixFilter บนฝั่งเซิร์ฟเวอร์ภูมิภาคได้ หากคุณยังใหม่กับตัวประมวลผลร่วมนี่คือการแนะนำ: HBase: The Definitive Guide สิ่งนี้ต้องการให้คุณปรับใช้ jars ในคลาสพาธของ RegionServer

แต่ขอย้ำอีกครั้งว่า หากคุณทำให้ลูกค้าของคุณระเบิดด้วยการกรองที่แตกต่างกันที่นั่น คุณก็อาจจะทำให้ภูมิภาคของคุณระเบิดเนื่องจากฮอตสปอตในส่วนแทรก

ทางเลือกสุดท้าย: คุณอาจต้องการดู Apache Phoenix และดูว่าคุณสามารถบังคับคีย์แถวของคุณให้เป็นสคีมาได้หรือไม่ ซึ่งคุณสามารถเลือกความแตกต่างในสองส่วนแรกของคีย์แถวได้ แน่นอนว่าคุณจะต้องมีตัวคั่นในคีย์แถวของคุณ หรืออย่างน้อยก็มีความยาวคงที่

person Rick Moritz    schedule 16.03.2017
comment
ไม่สามารถเข้าถึงวิธีแก้ปัญหา แต่โพสต์ของคุณมีข้อมูล ดังนั้นให้ทำเครื่องหมายแก่คุณ - person aran; 12.09.2017