2012-03-12 5 views
5

Sto provando a creare HFiles a livello di codice e caricarle in un'istanza di HBase in esecuzione. Ho trovato molte informazioni in HFileOutputFormat e in LoadIncrementalHFilesDurante la creazione e il caricamento di HFile in modo programmatico su HBase, le nuove voci non sono disponibili

Sono riuscito a creare il nuovo HFile, inviarlo al cluster. Nell'interfaccia web del cluster viene visualizzato il nuovo file del negozio, ma il nuovo keyrange non è disponibile.

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()))); 
} 

Qualcuno effettivamente ha fatto questo lavoro? Ho un compilabile/testabile versione su my github

risposta

Problemi correlati