ในบล็อกนี้เราจะพูดถึงตัวอย่าง Proof of Concept สำหรับ HBase
ที่นี่เรามีชุดข้อมูลดังภาพด้านล่าง
ชุดข้อมูลนี้ประกอบด้วยรายละเอียดเกี่ยวกับระยะเวลาของการโทรเข้าทั้งหมดการโทรออกและข้อความที่ส่งจากหมายเลขโทรศัพท์มือถือเฉพาะในวันที่ระบุ
ฟิลด์แรกแสดงถึงวันที่ฟิลด์ที่สองหมายถึงหมายเลขโทรศัพท์มือถือฟิลด์ที่สามแสดงถึงระยะเวลาทั้งหมดของการโทรเข้าฟิลด์ที่สี่หมายถึงระยะเวลาทั้งหมดของการโทรออกและฟิลด์ที่ห้าหมายถึงจำนวนข้อความทั้งหมดที่ส่ง
ตอนนี้งานของเราคือการดึงข้อมูลระยะเวลาของการโทรเข้าและโทรออกและข้อความที่ส่งจากหมายเลขโทรศัพท์ในวันใดวันหนึ่ง
ในกรณีการใช้งานนี้ฉันกำลังพยายามกรองระเบียน 15ธมีนาคม 2014 นี่คือโปรแกรม HBase เพื่อบรรลุเป้าหมายนี้
ด้านล่างนี้คือรหัสทั้งหมดของมัน
สาธารณะ ชั้นเรียน ตัวอย่าง{
เอกชน คงที่ การกำหนดค่า Conf
คงที่ HTable โต๊ะ
สาธารณะ ตัวอย่าง (String tableName, String colFams) พ่น IOException {
Conf = HBaseConfiguration สร้าง ()
createTable (tableName, colFams)
โต๊ะ = ใหม่ HTable ( Conf , tableName)
}
เป็นโมฆะ createTable (String tableName, String colFams) พ่น IOException {
HBaseAdmin hbase = ใหม่ HBaseAdmin ( Conf )
HTableDescriptor desc = ใหม่ HTableDescriptor (ชื่อตาราง)
HColumnDescriptor meta = ใหม่ HColumnDescriptor (colFams.getBytes ())
desc.addFamily (เมตา)
hbase.createTable (รายละเอียด)
}
สาธารณะ คงที่ เป็นโมฆะ addColumnEntry (String tableName แถวสตริง
สตริง colFamilyName สตริง colName ค่าสตริง)
พ่น IOException {
ไบต์ [] rowKey = ไบต์ toBytes (แถว)
ใส่ putdata = ใหม่ ใส่ (rowKey)
putdata.add (ไบต์. toBytes (colFamilyName), ไบต์ toBytes (colName),
ไบต์ toBytes (ค่า))
โต๊ะ .put (ใส่ข้อมูล)
}
สาธารณะ คงที่ เป็นโมฆะ getAllRecord (String tableName, สตริง startPartialKey,
สตริง endPartialKey) พ่น IOException {
ลอง {
สแกน s
ถ้า (startPartialKey == โมฆะ || endPartialKey == โมฆะ )
s = ใหม่ สแกน ()
อื่น
s = ใหม่ สแกน (ไบต์. toBytes (startPartialKey),
ไบต์ toBytes (endPartialKey))
ResultScanner ss = โต๊ะ .getScanner (s)
HashMap
สตริง 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”))
}
}
} ในที่สุด {
}
}
สาธารณะ คงที่ เป็นโมฆะ หลัก (สตริง [] args) พ่น IOException {
สตริง tableName =“ daterecords”
สตริง colFamilyNames =“ i”
การทดสอบตัวอย่าง = ใหม่ ตัวอย่าง (tableName, colFamilyNames)
สตริง fileName =“ / home / cloudera / Desktop / data”
// สิ่งนี้จะอ้างอิงทีละบรรทัด
สายอักขระ = โมฆะ
ลอง {
// FileReader อ่านไฟล์ข้อความในการเข้ารหัสเริ่มต้น
FileReader fileReader = ใหม่ FileReader (ชื่อไฟล์)
// ห่อ FileReader ใน BufferedReader เสมอ
BufferedReader bufferedReader = ใหม่ BufferedReader (fileReader)
ในขณะที่ ((บรรทัด = bufferedReader.readLine ())! = โมฆะ ) {
สตริง [] values = 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 +“‘”)
// หรือเราทำได้แค่:
// เช่น printStackTrace ()
}
getAllRecord (tableName,“ 20140315”,“ 20140316”)
}
}
ที่นี่เราได้สร้างออบเจ็กต์ของ Configuration, HTable class และสร้าง Hbase Table ด้วยชื่อ: วันที่ และตระกูลคอลัมน์: ผม .
ในกรณีการใช้งานนี้เราจะใช้การรวมกันของวันที่และหมายเลขโทรศัพท์มือถือโดยคั่นด้วย '-' เป็นคีย์แถวสำหรับตาราง Hbase นี้และระยะเวลาการโทรเข้าและโทรออก 'จำนวนข้อความที่ส่งเป็นคอลัมน์' c1 ',' c2 ',' c3 'สำหรับคอลัมน์ตระกูล' i '
เรามีข้อมูลอินพุตที่เก็บไว้ในระบบไฟล์ภายในของ Cloudera ดังนั้นเราจำเป็นต้องเขียน Java Logic ที่อ่านข้อมูลจากไฟล์
ด้านล่างนี้คือตรรกะของ Java
ในวิธีนี้เรากำลังจัดเก็บข้อมูลลงในตารางสำหรับแต่ละคอลัมน์ของตระกูลคอลัมน์
เราสามารถตรวจสอบข้อมูลที่จัดเก็บในตาราง Hbase ‘daterecords’ ได้โดยใช้คำสั่ง scan
คุณจะได้รับข้อมูลดังภาพด้านล่าง
ตอนนี้เราได้แทรกข้อมูลลงในตาราง HBase เรียบร้อยแล้ว
ให้เราดึงข้อมูลที่เก็บไว้ในตารางของวันที่โดยเฉพาะ
ในกรณีการใช้งานนี้เรากำลังพยายามดึงข้อมูลของวันที่: 15ธมีนาคม 2557
ในการดึงข้อมูลเราได้สร้างวิธีการ
getAllRecord (String tableName, String startPartialKey, String endPartialKey)
พารามิเตอร์แรกแสดงถึงชื่อตารางส่วนที่สองหมายถึงวันที่เริ่มต้นที่เราต้องดึงข้อมูลและพารามิเตอร์ที่สามคือวันที่เริ่มต้นถัดไป
เช่น:
getAllRecord (tableName,“ 20140315”,“ 20140316”)
ตอนนี้ให้เราเข้าใจ ตรรกะ ของวิธีนี้
เรากำลังพยายามสแกนตาราง Hbase โดยใช้ HBase API ด้วยความช่วยเหลือของ startPartialKey และ endPartialKey
เนื่องจาก StartPartialKey และ endPartialkey ไม่เป็นโมฆะมันจะไปที่บล็อกอื่นและสแกนระเบียนที่มีค่า startPartialKey
เราได้สร้างออบเจ็กต์ของเครื่องสแกนผลลัพธ์ซึ่งเก็บบันทึกที่สแกนของตาราง Hbase และ HashMap เพื่อจัดเก็บผลลัพธ์ที่จะเป็นผลลัพธ์
เรากำลังสร้างออบเจ็กต์ของ Result เพื่อรับที่เก็บข้อมูลใน Result Scanner และดำเนินการสำหรับลูป
imsi คือสตริงที่กำหนดเพื่อจัดเก็บหมายเลขโทรศัพท์มือถือและ keyVal คือ Hash Map ที่เก็บเอาต์พุตที่ดึงมาจากคอลัมน์ของโทรศัพท์เครื่องใดเครื่องหนึ่ง
เราได้ให้ 20140315-1234567890 เป็น rowkey ไปยังตาราง Hbase ใน 20140315 นี้แสดงถึงวันที่และ 1234567890 แทนหมายเลขโทรศัพท์มือถือ
วิธีการติดตั้ง eclipse ide
เนื่องจากเราต้องการเพียงหมายเลขโทรศัพท์มือถือเราจึงใช้วิธีการสตริงย่อยเพื่อดึงข้อมูล
เรากำลังดึงข้อมูลจาก r.raw () และจัดเก็บไว้ใน HashMap โดยใช้ Put
ในที่สุดเราก็พยายามพิมพ์ลงบนคอนโซล
ผลลัพธ์จะเป็นดังภาพด้านล่าง
เราได้รับบันทึกของวันที่: 15 เรียบร้อยแล้วธมีนาคม 2557.