לדוגמא HBase POC



פוסט זה דן אודות דוגמה להוכחת מושג עבור HBase. תוכל למצוא הסבר ברור למושג כדי לשפר את הבנת HBase.

בבלוג זה נדון אודות דוגמה להוכחת מושג עבור HBase.





כאן יש לנו מערך נתונים כמו בתמונה למטה.

Sample_Hbase_Use_case



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

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

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



במקרה שימוש זה, אני מנסה לסנן את הרשומות של 15המרץ 2014. הנה תוכנית HBase כדי להשיג זאת.

להלן הקוד השלם של זה.

פּוּמְבֵּי מעמד לִטעוֹם{

פְּרָטִי סטָטִי תְצוּרָה conf

סטָטִי HTable שולחן

פּוּמְבֵּי דוגמא (טבלת מחרוזת, מחרוזת colFams) זורק IOException {

conf = HBaseConfiguration. לִיצוֹר ()

createTable (tableName, colFams)

שולחן = חָדָשׁ HTable ( conf , שם שולחן)

}

בָּטֵל createTable (String tableName, String colFams) זורק IOException {

HBaseAdmin hbase = חָדָשׁ HBaseAdmin ( conf )

HTableDescriptor desc = חָדָשׁ HTableDescriptor (tableName)

מטא HColumnDescriptor = חָדָשׁ HColumnDescriptor (colFams.getBytes ())

desc.addFamily (מטה)

hbase.createTable (desc)

}

פּוּמְבֵּי סטָטִי בָּטֵל addColumnEntry (טבלה מחרוזת, שורת מחרוזת,

מחרוזת colFamilyName, מחרוזת colName, ערכי מחרוזת)

זורק IOException {

בתים [] rowKey = בתים. toBytes (שׁוּרָה)

שים putdata = חָדָשׁ שים (שורה מפתח)

putdata.add (בתים. toBytes (colFamilyName), בתים. toBytes (colName),

בתים. toBytes (ערכים))

שולחן .put (putdata)

}

פּוּמְבֵּי סטָטִי בָּטֵל getAllRecord (טבלת מחרוזת, מחרוזת startPartialKey,

מחרוזת endPartialKey) זורק IOException {

לְנַסוֹת {

סריקה s

אם (startPartialKey == ריק || endPartialKey == ריק )

s = חָדָשׁ לִסְרוֹק()

אַחֵר

s = חָדָשׁ סריקה (בתים. toBytes (startPartialKey),

בתים. toBytes (endPartialKey))

ResultScanner ss = שולחן .getScanner (ים)

מפת גיבובoutputRec = חָדָשׁ מפת גיבוב()

מחרוזת imsi = “”

ל (תוצאה r: ss) {

HashMap keyVal = חָדָשׁ מפת גיבוב()

ל (KeyValue kv: r.raw ()) {

imsi = חָדָשׁ מחרוזת (kv.getRow ()). מחרוזת (10)

keyVal.put ( חָדָשׁ מחרוזת (kv.getQualifier ()),

חָדָשׁ מחרוזת (kv.getValue ()))

outputRec.put (imsi, keyVal)

אם (keyVal.size () == 3)

מערכת. הַחוּצָה .println (קח + '' + 'דקות נכנסות:'

+ keyVal.get (“c1 ″) +” דקות הקרובות: ”

+ keyVal.get ('c2 ″) +' הודעות: '

+ keyVal.get (“c3”))

}

}

} סוף סוף {

}

}

פּוּמְבֵּי סטָטִי בָּטֵל ראשי (מחרוזת [] טוענת) זורק IOException {

מחרוזת tableName = 'רשומות נתונים'

מחרוזת colFamilyNames = “i”

מבחן מדגם = חָדָשׁ מדגם (tableName, colFamilyNames)

מחרוזת fileName = '/ home / cloudera / Desktop / data'

// זה יתייחס לשורה אחת בכל פעם

קו מחרוזת = ריק

לְנַסוֹת {

// FileReader קורא קבצי טקסט בקידוד ברירת המחדל.

FileReader fileReader = חָדָשׁ FileReader (fileName)

// עוטפים תמיד את FileReader ב- BufferedReader.

BufferedReader bufferedReader = חָדָשׁ BufferedReader (fileReader)

בזמן ((שורה = bufferedReader.readLine ())! = ריק ) {

מחרוזת [] ערכים = line.split (”“)

addColumnEntry (tableName, ערכים [0] + '-' + ערכים [1],

colFamilyNames, 'c1', ערכים [2])

addColumnEntry (tableName, ערכים [0] + '-' + ערכים [1],

colFamilyNames, 'c2', ערכים [3])

addColumnEntry (tableName, ערכים [0] + '-' + ערכים [1],

colFamilyNames, 'c3', ערכים [4])

}

bufferedReader.close ()

} לתפוס (FileNotFoundException לשעבר) {

מערכת. הַחוּצָה .println ('לא ניתן לפתוח את הקובץ '' + fileName + ''')

} לתפוס (לשעבר IOException) {

מערכת. הַחוּצָה .println ('שגיאה בקריאת הקובץ '' + fileName + ''')

// או שאנחנו פשוט יכולים לעשות את זה:

// ex.printStackTrace ()

}

getAllRecord (tableName, '20140315', '20140316')

}

}

כאן יצרנו אובייקט של תצורה, מחלקה HTable ויצירת טבלת Hbase עם שם: רשומות נתונים ומשפחת הטורים: אני .

במקרה שימוש זה, ניקח את השילוב של תאריך ומספר סלולרי מופרדים על ידי '-' כמפתח שורה לטבלת Hbase זו ומשך השיחה הנכנס, היוצא ', מספר ההודעות שנשלחו כעמודות' c1 ',' c2 ',' c3 'למשפחת העמודות' i '.

יש לנו את נתוני הקלט המאוחסנים במערכת הקבצים המקומית של Cloudera. אז אנחנו צריכים לכתוב Java Logic שקורא את הנתונים מהקובץ.

להלן הלוגיקה של Java.

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

אנו יכולים לבדוק את הנתונים המאוחסנים בטבלת Hbase 'רשומות נתונים' באמצעות פקודת הסריקה.

אתה תקבל את הנתונים כמו בתמונה למטה.

כעת הכנסנו את הנתונים לטבלת HBase בהצלחה.

הבה נאחזר את הרשומות המאוחסנות בטבלה של תאריך מסוים.

ההבדל בין תואר שני לתואר שני

במקרה שימוש זה, אנו מנסים לאחזר את רשומות התאריך: 15המרץ 2014

כדי לאחזר את הרשומות יצרנו שיטה

getAllRecord (טבלה מחרוזת, מחרוזת startPartialKey, מחרוזת endPartialKey)

הפרמטר הראשון מייצג את שם הטבלה, השני מייצג את תאריך ההתחלה ממנו אנו צריכים לאחזר את הנתונים והשלישי הוא התאריך הבא של תאריך ההתחלה.

לְמָשָׁל:

getAllRecord (tableName, '20140315', '20140316')

עכשיו תן לנו להבין את הִגָיוֹן של שיטה זו.

אנו מנסים לסרוק את טבלת Hbase על ידי שימוש ב- HBase API בעזרת startPartialKey ו- endPartialKey.

מכיוון ש- StartPartialKey ו- endPartialkey אינם אפסים, הוא יעבור לחסימה אחרת ולסרוק את הרשומות בעלות הערך של startPartialKey.

יצרנו אובייקט של סורק התוצאות המאחסן את הרשומות הסרוקות של טבלת Hbase ו- HashMap לאחסון הפלט שתהיה התוצאה.

אנו יוצרים אובייקט של Result כדי להשיג את מאגר הנתונים בסורק התוצאות ומבצע לולאה עבור.

imsi הוא המחרוזת המוגדרת לאחסון המספר הנייד ו- keyVal הוא מפת Hash המאחסנת את הפלט שאוחזר מהעמודה של טלפון מסוים.

נתנו 20140315-1234567890 כמו מפתח שורה לטבלת Hbase. בשנת 20140315 זה מייצג את התאריך ו 1234567890 מייצג את המספר הנייד.

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

אנו מאחזרים את הנתונים מ- r.raw () ושומרים אותם ב- HashMap באמצעות Put.

לבסוף אנו מנסים להדפיס אותם על המסוף.

הפלט יהיה כמו בתמונה למטה.

השגנו בהצלחה את רשומות התאריך: 15המרץ 2014.