Mẫu HBase POC



Bài đăng này thảo luận về Bằng chứng khái niệm mẫu cho HBase. Bạn có thể tìm lời giải thích rõ ràng về khái niệm này để hiểu rõ hơn về HBase.

Trong blog này, chúng ta sẽ thảo luận về một Bằng chứng khái niệm mẫu cho HBase.





Ở đây chúng ta có một Tập hợp dữ liệu như trong hình dưới đây.

Sample_Hbase_Use_case



Tập dữ liệu này bao gồm các chi tiết về thời lượng của tổng số cuộc gọi đến, cuộc gọi đi và tin nhắn được gửi từ một số di động cụ thể vào một ngày cụ thể.

Trường đầu tiên biểu thị ngày tháng, trường thứ hai biểu thị số điện thoại di động, trường thứ ba biểu thị tổng thời lượng của các cuộc gọi đến, trường thứ tư biểu thị tổng thời lượng của các cuộc gọi đi và trường thứ năm biểu thị tổng số tin nhắn đã gửi.

Bây giờ nhiệm vụ của chúng ta là truy xuất thông tin về thời lượng của các cuộc gọi đến và đi và tin nhắn đã gửi, từ một số điện thoại vào một ngày cụ thể.



Trong trường hợp sử dụng này, tôi đang cố gắng lọc các bản ghi của 15thứ tựTháng 3 năm 2014. Đây là một Chương trình HBase để đạt được điều này.

Dưới đây là mã hoàn chỉnh của nó.

công cộng lớp học mẫu vật{

riêng tư tĩnh Cấu hình tâm sự

tĩnh HTable bàn

công cộng mẫu (String tableName, String colFams) ném IOException {

tâm sự = HBaseConfiguration. tạo nên ()

createTable (tableName, colFams)

bàn = Mới HTable ( tâm sự , tableName)

}

vô hiệu createTable (String tableName, String colFams) ném IOException {

HBaseAdmin hbase = Mới HBaseAdmin ( tâm sự )

HTableDescriptor desc = Mới HTableDescriptor (tableName)

HColumnDescriptor meta = Mới HColumnDescriptor (colFams.getBytes ())

desc.addFamily (meta)

hbase.createTable (desc)

}

công cộng tĩnh vô hiệu addColumnEntry (String tableName, String row,

Chuỗi colFamilyName, Chuỗi colName, Giá trị chuỗi)

ném IOException {

byte [] rowKey = Byte. toBytes (hàng)

Đặt putdata = Mới Đặt (rowKey)

putdata.add (Byte. toBytes (colFamilyName), byte. toBytes (colName),

Số byte. toBytes (giá trị))

bàn .put (putdata)

}

công cộng tĩnh vô hiệu getAllRecord (String tableName, String startPartialKey,

Chuỗi endPartialKey) ném IOException {

thử {

Quét s

nếu (startPartialKey == vô giá trị || endPartialKey == vô giá trị )

s = Mới Quét()

khác

s = Mới Quét (byte. toBytes (startPartialKey),

Số byte. toBytes (endPartialKey))

ResultScanner ss = bàn .getScanner (các)

Bản đồ bămoutputRec = Mới Bản đồ băm()

Chuỗi imsi = “”

cho (Kết quả r: ss) {

HashMap keyVal = Mới Bản đồ băm()

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

imsi = Mới Chuỗi (kv.getRow ()). Chuỗi con (10)

keyVal.put ( Mới Chuỗi (kv.getQualifier ()),

Mới Chuỗi (kv.getValue ()))

outputRec.put (imsi, keyVal)

nếu (keyVal.size () == 3)

Hệ thống. ngoài .println (take + ”” + “Số phút sắp tới:”

+ keyVal.get (“c1 ″) +” Biên bản sắp tới: ”

+ keyVal.get (“c2 ″) +” Tin nhắn: ”

+ keyVal.get (“c3”))

}

}

} cuối cùng {

}

}

công cộng tĩnh vô hiệu main (Chuỗi [] args) ném IOException {

String tableName = “daterecords”

String colFamilyNames = “i”

thử nghiệm mẫu = Mới mẫu (tableName, colFamilyNames)

String fileName = “/ home / cloudera / Desktop / data”

// Điều này sẽ tham chiếu một dòng tại một thời điểm

Dòng chuỗi = vô giá trị

thử {

// FileReader đọc các tệp văn bản trong bảng mã mặc định.

FileReader fileReader = Mới FileReader (tên tệp)

// Luôn bọc FileReader trong BufferedReader.

BufferedReader đã đệmReader = Mới BufferedReader (fileReader)

trong khi ((line = bufferedReader.readLine ())! = vô giá trị ) {

String [] giá trị = line.split (”“)

addColumnEntry (tableName, giá trị [0] + “-” + giá trị [1],

colFamilyNames, “c1”, giá trị [2])

addColumnEntry (tableName, giá trị [0] + “-” + giá trị [1],

colFamilyNames, “c2”, giá trị [3])

addColumnEntry (tableName, giá trị [0] + “-” + giá trị [1],

colFamilyNames, “c3”, giá trị [4])

}

bufferedReader.close ()

} nắm lấy (FileNotFoundException ex) {

Hệ thống. ngoài .println (“Không thể mở tệp‘ ”+ fileName +“ ‘”)

} nắm lấy (IOException ex) {

Hệ thống. ngoài .println (“Lỗi khi đọc tệp‘ ”+ fileName +“ ‘”)

// Hoặc chúng ta có thể làm điều này:

// ex.printStackTrace ()

}

getAllRecord (tableName, “20140315”, “20140316”)

}

}

Ở đây chúng ta đã tạo một đối tượng của lớp Cấu hình, HTable và tạo Bảng Hbase với tên: daterecords và họ cột: Tôi .

Trong trường hợp sử dụng này, chúng tôi sẽ lấy sự kết hợp giữa ngày và số điện thoại di động được phân tách bằng '-' làm khóa hàng cho bảng Hbase này và thời lượng cuộc gọi đến, gọi đi ', số lượng tin nhắn được gửi dưới dạng các cột' c1 ',' c2 ',' c3 'cho họ cột' i '.

Chúng tôi có dữ liệu đầu vào được lưu trữ trong hệ thống tệp cục bộ của Cloudera. Vì vậy, chúng ta cần viết Java Logic đọc dữ liệu từ tệp.

Dưới đây là logic Java.

Trong phương pháp này, chúng tôi đang lưu trữ dữ liệu vào bảng cho mỗi cột của họ cột.

Chúng tôi có thể kiểm tra dữ liệu được lưu trữ trong bảng Hbase ‘daterecords’ bằng cách sử dụng lệnh quét.

Bạn sẽ nhận được dữ liệu như trong hình dưới đây.

Bây giờ chúng tôi đã chèn thành công dữ liệu vào Bảng HBase.

Hãy để chúng tôi truy xuất các bản ghi được lưu trữ trong Bảng của một ngày cụ thể.

Trong trường hợp sử dụng này, chúng tôi đang cố gắng truy xuất các bản ghi của Ngày: 15thứ tựTháng 3 năm 2014

Để truy xuất các bản ghi, chúng tôi đã tạo một Phương pháp

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

Tham số đầu tiên đại diện cho tên bảng, tham số thứ hai đại diện cho ngày bắt đầu mà từ đó chúng ta cần truy xuất dữ liệu và tham số thứ ba là ngày tiếp theo của ngày bắt đầu.

Ví dụ:

getAllRecord (tableName, “20140315”, “20140316”)

Bây giờ chúng ta hãy hiểu Hợp lý của phương pháp này.

Chúng tôi đang cố gắng quét Bảng Hbase bằng cách Sử dụng API HBase với sự trợ giúp của startPartialKey và endPartialKey.

Vì StartPartialKey và endPartialkey không phải là null, nó sẽ đi đến khối khác và quét các bản ghi có giá trị của startPartialKey.

Chúng tôi đã tạo một đối tượng Máy quét kết quả lưu trữ các bản ghi đã quét của bảng Hbase và Bản đồ HashMap để lưu trữ đầu ra sẽ là kết quả.

Chúng tôi đang tạo một đối tượng của Result để lấy dữ liệu lưu trữ trong Result Scanner và thực hiện vòng lặp for.

imsi là chuỗi được xác định để lưu trữ Số điện thoại di động và keyVal là Bản đồ băm lưu trữ đầu ra được truy xuất từ ​​cột của một điện thoại cụ thể.

Chúng tôi đã cho 20140315-1234567890 như là khóa chèo vào bảng Hbase. Trong 20140315 này đại diện cho ngày và 1234567890 đại diện cho số Di động.

hàm ảo trong java là gì

Vì chúng tôi chỉ yêu cầu số điện thoại di động, chúng tôi đang sử dụng phương pháp chuỗi con để truy xuất nó.

Chúng tôi đang truy xuất dữ liệu từ r.raw () và lưu trữ nó trong HashMap bằng cách sử dụng Put.

Cuối cùng, chúng tôi đang cố gắng in chúng trên bảng điều khiển.

Đầu ra sẽ như trong hình dưới đây.

Chúng tôi đã truy xuất thành công các bản ghi của Ngày: 15thứ tựTháng 3 năm 2014.