2015-04-09 13 views
8

Hiện tại tôi có hai bảng HBase (cho phép gọi chúng là tableAtableB). Sử dụng công việc MapReduce một giai đoạn duy nhất, dữ liệu trong tableA được đọc xử lý và lưu vào tableB. Hiện tại cả hai bảng nằm trên cùng một cụm HBase. Tuy nhiên, tôi cần phải di dời tableB đến cụm trên của nó.Làm thế nào tôi có thể đọc từ một ví dụ HBase nhưng viết cho một trường hợp khác?

Có thể định cấu hình một sơ đồ tầng làm giảm công việc trong Hadoop để đọc và ghi từ các trường hợp riêng biệt của HBase không?

+0

Bạn có thể sử dụng tia lửa cho công việc kiểu này. – Tinku

Trả lời

3

Có thể, HBase của CopyTable MapReduce job hiện nó bằng cách sử dụng TableMapReduceUtil.initTableReducerJob() cho phép bạn thiết lập một quorumAddress thay thế trong trường hợp bạn cần phải viết các cụm từ xa:

public static void initTableReducerJob(String table, Class<? extends TableReducer> reducer, org.apache.hadoop.mapreduce.Job job, Class partitioner, String quorumAddress, String serverClass, String serverImpl) 

quorumAddress - cụm Distant viết đến; mặc định là null cho đầu ra cho cụm được chỉ định trong tệp hbase-site.xml. Đặt chuỗi này vào bộ sưu tập của người quản lý động vật của cụm từ xa thay thế khi bạn sẽ có giảm bớt ghi một cụm không phải là mặc định; ví dụ. sao chép các bảng giữa các cụm, nguồn sẽ là được chỉ định bởi hbase-site.xml và tham số này sẽ có toàn bộ địa chỉ của cụm từ xa. Các định dạng để vượt qua là đặc biệt. Vượt qua :: chẳng hạn như máy chủ, máy chủ2, máy chủ3: 2181:/hbase.


Một lựa chọn khác là thực hiện giảm tốc tùy chỉnh của riêng bạn để ghi vào bảng điều khiển từ xa thay vì viết với bối cảnh. Tương tự như vậy:

public static class MyReducer extends Reducer<Text, Result, Text, Text> { 

    protected Table remoteTable; 
    protected Connection connection; 

    @Override 
    protected void setup(Context context) throws IOException, InterruptedException { 
     super.setup(context); 
     // Clone configuration and provide a new quorum address for the remote cluster 
     Configuration config = HBaseConfiguration.create(context.getConfiguration()); 
     config.set("hbase.zookeeper.quorum","quorum1,quorum2,quorum3"); 
     connection = ConnectionFactory.createConnection(config); // HBase 0.99+ 
     //connection = HConnectionManager.createConnection(config); // HBase <0.99 
     remoteTable = connection.getTable("myTable".getBytes()); 
     remoteTable.setAutoFlush(false); 
     remoteTable.setWriteBufferSize(1024L*1024L*10L); // 10MB buffer 
    } 

    public void reduce(Text boardKey, Iterable<Result> results, Context context) throws IOException, InterruptedException { 
     /* Write puts to remoteTable */ 
    } 

    @Override 
    protected void cleanup(Context context) throws IOException, InterruptedException { 
     super.cleanup(context); 
     if (remoteTable!=null) { 
      remoteTable.flushCommits(); 
      remoteTable.close(); 
     } 
     if(connection!=null) { 
      connection.close(); 
     } 
    } 
} 
+0

Gotta yêu những người downvotes câu trả lời hoàn toàn hợp lệ chỉ để cho vui. –

+0

Cảm ơn bạn đã cung cấp ví dụ về giảm tùy chỉnh – slayton

Các vấn đề liên quan