2012-03-12 11 views
5

Tôi đang cố tạo HFiles theo lập trình và tải chúng trong một cá thể HBase đang chạy. Tôi tìm thấy rất nhiều thông tin trong HFileOutputFormat và trong LoadIncrementalHFilesKhi tạo và tải HFile theo lập trình cho các mục nhập HBase mới không có sẵn

Tôi đã quản lý để tạo HFile mới, gửi cho cụm. Trong giao diện web cụm, tệp lưu trữ mới xuất hiện nhưng keyrange mới không khả dụng.

InputStream stream = ProgrammaticHFileGeneration.class.getResourceAsStream("ga-hourly.txt"); 
BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); 
String line = null; 

Map<byte[], String> rowValues = new HashMap<byte[], String>(); 

while((line = reader.readLine())!=null) { 
    String[] vals = line.split(","); 
    String row = new StringBuilder(vals[0]).append(".").append(vals[1]).append(".").append(vals[2]).append(".").append(vals[3]).toString(); 
    rowValues.put(row.getBytes(), line); 
} 

List<byte[]> keys = new ArrayList<byte[]>(rowValues.keySet()); 
Collections.sort(keys, byteArrComparator); 


HBaseTestingUtility testingUtility = new HBaseTestingUtility(); 
testingUtility.startMiniCluster(); 

testingUtility.createTable("table".getBytes(), "data".getBytes()); 

Writer writer = new HFile.Writer(testingUtility.getTestFileSystem(), 
    new Path("/tmp/hfiles/data/hfile"), 
    HFile.DEFAULT_BLOCKSIZE, Compression.Algorithm.NONE, KeyValue.KEY_COMPARATOR); 

for(byte[] key:keys) { 
    writer.append(new KeyValue(key, "data".getBytes(), "d".getBytes(), rowValues.get(key).getBytes())); 
} 

writer.appendFileInfo(StoreFile.BULKLOAD_TIME_KEY, Bytes.toBytes(System.currentTimeMillis())); 
writer.appendFileInfo(StoreFile.MAJOR_COMPACTION_KEY, Bytes.toBytes(true)); 
writer.close(); 

Configuration conf = testingUtility.getConfiguration(); 

LoadIncrementalHFiles loadTool = new LoadIncrementalHFiles(conf); 
HTable hTable = new HTable(conf, "table".getBytes()); 

loadTool.doBulkLoad(new Path("/tmp/hfiles"), hTable); 

ResultScanner scanner = hTable.getScanner("data".getBytes()); 
Result next = null; 
System.out.println("Scanning"); 
while((next = scanner.next()) != null) { 
    System.out.format("%s %s\n", new String(next.getRow()), new String(next.getValue("data".getBytes(), "d".getBytes()))); 
} 

Có ai thực sự thực hiện công việc này không? Tôi có một compilable/testable phiên bản trên my github

Trả lời