HBase עם Java

1. סקירה כללית

במאמר זה נבחן את ה- HBase מסד נתונים של ספריית לקוח Java. HBase הוא בסיס נתונים מבוזר המשתמש במערכת הקבצים Hadoop לאחסון נתונים.

ניצור לקוח לדוגמה של Java וטבלה אליה נוסיף כמה רשומות פשוטות.

2. מבנה נתונים HBase

ב- HBase הנתונים מקובצים למשפחות עמודות. לכל חברי העמודה במשפחת טור יש קידומת זהה.

למשל, העמודות family1: qualifier1 ו משפחה 1: מוקדמות 2 שניהם חברים ב משפחה 1 משפחת טור. כל בני משפחת העמודים מאוחסנים יחד במערכת הקבצים.

בתוך משפחת העמודות נוכל להכניס שורה שיש לה מוסמך מוגדר. אנחנו יכולים לחשוב על מוקדמות כמעין שם העמודה.

בואו נראה רשומה לדוגמא מ- Hbase:

משפחה 1: {'Qualifier1': 'row1: cell_data', 'Qualifier2': 'row2: cell_data', 'Qualifier3': 'row3: cell_data'} Family2: {'Qualifier1': 'row1: cell_data', 'Qualifier2': 'row2: cell_data', 'Qualifier3': 'row3: cell_data'}

יש לנו שתי משפחות טור, בכל אחת מהן שלוש מוקדמות עם כמה נתוני תאים. לכל שורה יש מפתח שורה - זהו מזהה שורה ייחודי. נשתמש במקש השורה כדי להוסיף, לאחזר ולמחוק את הנתונים.

3. תלות ב- Maven לקוח HBase

לפני שאנחנו מתחברים ל- HBase, עלינו להוסיף hbase-client ו hbase תלות:

 org.apache.hbase hbase-client $ {hbase.version} org.apache.hbase hbase $ {hbase.version} 

4. הגדרת HBase

עלינו להתקין את HBase כדי שנוכל להתחבר מספריית לקוח Java אליו. ההתקנה מחוץ לתחום מאמר זה, אך תוכל לבדוק כמה מדריכי ההתקנה של HBase באופן מקוון.

לאחר מכן, עלינו להפעיל מאסטר HBase באופן מקומי על ידי ביצוע:

התחלת מאסטר hbase

5. חיבור ל- HBase מג'אווה

כדי להתחבר באופן תכנותי מג'אווה ל- HBase, עלינו להגדיר קובץ תצורה של XML. התחלנו את מופע HBase שלנו ב- localhost ולכן עלינו להזין את זה לקובץ תצורה:

  hbase.zookeeper.quorum localhost hbase.zookeeper.property.clientPort 2181 

כעת עלינו להפנות לקוח HBase לקובץ התצורה הזה:

תצורת תצורה = HBaseConfiguration.create (); נתיב מחרוזת = this.getClass () .getClassLoader () .getResource ("hbase-site.xml") .getPath (); config.addResource (נתיב חדש (נתיב)); 

לאחר מכן, אנו בודקים אם חיבור ל- HBase הצליח - במקרה של כשל, ה- MasterNotRunningException ייזרק:

HBaseAdmin.checkHBaseAvailable (config);

6. יצירת מבנה מסד נתונים

לפני שנתחיל להוסיף נתונים ל- HBase, עלינו ליצור את מבנה הנתונים להכנסת שורות. ניצור טבלה אחת עם שתי משפחות עמודות:

טבלה שם פרטית table1 = TableName.valueOf ("טבלה 1"); family String family1 = "Family1"; family String family2 = "Family2";

ראשית, עלינו ליצור חיבור למסד הנתונים ולקבל מנהל אובייקט, שבו נשתמש למניפולציה של מבנה מסד נתונים:

חיבור חיבור = ConnectionFactory.createConnection (config) מנהל מערכת = connection.getAdmin ();

לאחר מכן, אנו יכולים ליצור טבלה על ידי העברת מופע של ה- HTableDescriptor כיתה לא createTable () שיטה על מנהל לְהִתְנַגֵד:

HTableDescriptor desc = HTableDescriptor חדש (טבלה 1); desc.addFamily (HColumnDescriptor חדש (משפחה 1)); desc.addFamily (HColumnDescriptor חדש (משפחה 2)); admin.createTable (desc);

7. הוספה ואחזור של אלמנטים

עם יצירת הטבלה נוכל להוסיף לה נתונים חדשים על ידי יצירת a לָשִׂים חפץ וקריאה a לָשִׂים() שיטה על שולחן לְהִתְנַגֵד:

בתים [] שורה 1 = Bytes.toBytes ("שורה 1") שים p = שקע חדש (שורה 1); p.addImmutable (family1.getBytes (), qualifier1, Bytes.toBytes ("cell_data")); table1.put (p);

ניתן להשיג אחזור של שורה שנוצרה בעבר באמצעות a לקבל מעמד:

קבל g = חדש קבל (שורה 1); תוצאה r = table1.get (g); בתא [] value = r.getValue (family1.getBytes (), qualifier1);

ה שורה 1 הוא מזהה שורה - אנו יכולים להשתמש בו כדי לאחזר שורה ספציפית ממסד הנתונים. כשאתה מתקשר:

Bytes.bytesToString (ערך)

התוצאה שהוחזרה תוכנס בעבר נתוני תאים.

8. סריקה וסינון

אנו יכולים לסרוק את הטבלה, לאחזר את כל האלמנטים בתוך מוקדמות נתונה באמצעות a לִסְרוֹק אובייקט (שים לב לכך ResultScanner מרחיב ניתן לסגירה, אז הקפד להתקשר סגור() על זה כשתסיים):

סריקת סריקה = סריקה חדשה (); scan.addColumn (family1.getBytes (), qualifier1); ResultScanner scanner = table.getScanner (סריקה); עבור (תוצאת תוצאות: סורק) {System.out.println ("שורה נמצאה:" + תוצאה); } 

פעולה זו תדפיס את כל השורות בתוך a מוקדמות 1 עם מידע נוסף כמו חותמת זמן:

נמצאו שורה: keyvalues ​​= {Row1 / Family1: Qualifier1 / 1488202127489 / Put / vlen = 9 / seqid = 0}

אנו יכולים לאחזר רשומות ספציפיות באמצעות פילטרים.

ראשית, אנו יוצרים שני פילטרים. ה מסנן 1 מציין כי שאילתת סריקה תשיג אלמנטים גדולים מ- שורה 1, ו מסנן 2 מציין שאנחנו מעוניינים רק בשורות שיש להן מוקדמות שוות ל מוקדמות 1:

Filter filter1 = PrefixFilter חדש (שורה 1); Filter filter2 = QualifierFilter חדש (CompareOp.GREATER_OR_EQUAL, BinaryComparator חדש (qualifier1)); מסנני רשימה = Arrays.asList (filter1, filter2);

ואז נוכל להשיג קבוצת תוצאות מ- לִסְרוֹק שאילתא:

סריקת סריקה = סריקה חדשה (); scan.setFilter (רשימת סינון חדשה (מפעיל.MUST_PASS_ALL, פילטרים)); נסה (ResultScanner scanner = table.getScanner (scan)) {for (Result Result: scanner) {System.out.println ("נמצא שורה:" + תוצאה); }}

בעת יצירת a FilterList עברנו מפעיל.MUST_PASS_ALL - זה אומר שכל המסננים חייבים להיות מרוצים. אנחנו יכולים לבחור מבצע.MUST_PASS_ONE אם רק צריך להסתפק במסנן אחד. בערכה המתקבלת יהיו לנו רק שורות שתואמות למסננים שצוינו.

9. מחיקת שורות

לבסוף, כדי למחוק שורה, נוכל להשתמש ב- לִמְחוֹק מעמד:

מחק מחק = מחק חדש (שורה 1); delete.addColumn (family1.getBytes (), qualifier1); table.delete (מחק);

אנחנו מוחקים א שורה 1 השוכן בתוך א משפחה 1.

10. מסקנה

במדריך מהיר זה התמקדנו בתקשורת עם בסיס נתונים של HBase. ראינו כיצד להתחבר ל- HBase מספריית לקוח Java וכיצד להפעיל פעולות בסיסיות שונות.

ניתן למצוא את היישום של כל הדוגמאות וקטעי הקוד בפרויקט GitHub; זהו פרויקט של Maven, כך שיהיה קל לייבא ולהפעיל אותו כפי שהוא.


$config[zx-auto] not found$config[zx-overlay] not found