2017-05-31 41 views
0

您好我正在嘗試將Hbase錶快照導出到我的本地hdfs,以便我可以運行mapreduce就可以了。org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException:無法從以下文件讀取快照信息:file:/ tmp/hbase-cloudera/hbase

我已經採取了HBase的表使用以下命令

snapshot 'FundamentalAnalytic','FundamentalAnalyticSnapshot' 

而且,當我跑list_snapshots命令,我可以看到我的快照還快照。

我已經使用下面的命令將我的Hbase錶快照導出到本地HDFS目錄併成功複製。

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot FundamentalAnalyticSnapshot -copy-to /tmp -mappers 16 

最後,我必須在快照上運行map縮減,因此下面是我的驅動程序代碼來配置該作業。

TableMapReduceUtil.initTableSnapshotMapperJob(snapshotName, // input table 
       scan, // Scan instance to control CF and attribute selection 
       DefaultMapper.class, // mapper class 
       NullWritable.class, // mapper output key 
       Text.class, // mapper output value 
       job, 
       true, 
       new Path("/home/cloudera/archive/data/default/FundamentalAnalytic/bc95715f67e52547e86b5b096a1f1cb5/cf/d29205a44623434eba2d100a94d8ebfb_SeqId_4_")); 

這是我得到錯誤的地方。 我不知道我必須將哪個路徑作爲initTableSnapshotMapperJob方法中的最後一個參數。

當我運行此代碼時,我得到下面的錯誤。

org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException: Couldn't read snapshot info from:file:/tmp/hbase-cloudera/hbase/.hbase-snapshot/FundamentalAnalyticSnapshot/.snapshotinfo 
    at org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils.readSnapshotInfo(SnapshotDescriptionUtils.java:294) 
    at org.apache.hadoop.hbase.snapshot.RestoreSnapshotHelper.copySnapshotForScanner(RestoreSnapshotHelper.java:818) 
    at org.apache.hadoop.hbase.mapreduce.TableSnapshotInputFormatImpl.setInput(TableSnapshotInputFormatImpl.java:355) 
    at org.apache.hadoop.hbase.mapreduce.TableSnapshotInputFormat.setInput(TableSnapshotInputFormat.java:204) 
    at org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.initTableSnapshotMapperJob(TableMapReduceUtil.java:335) 
    at com.thomsonretuers.hbase.HBaseToFileDriver.run(HBaseToFileDriver.java:128) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 
    at com.thomsonretuers.hbase.HBaseToFileDriver.main(HBaseToFileDriver.java:75) 
Caused by: java.io.FileNotFoundException: File file:/tmp/hbase-cloudera/hbase/.hbase-snapshot/FundamentalAnalyticSnapshot/.snapshotinfo does not exist 

有關快照的一個快速問題。

  1. 我想利用快照和運行全表掃描,在快照這種情況下,掃描 將影響該地區的服務器的性能?

回答

0

我解決它使用正確的路徑

創建快照

snapshot 'FundamentalAnalytic','FundamentalAnalyticSnapshot' 

導出快照當地HDFS

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot FundamentalAnalyticSnapshot -copy-to /tmp -mappers 16 

司機的工作配置朗姆酒的MapReduce對HBase的快照後

String snapshotName="FundamentalAnalyticSnapshot"; 
    Path restoreDir = new Path("hdfs://quickstart.cloudera:8020/tmp"); 
    String hbaseRootDir = "hdfs://quickstart.cloudera:8020/hbase"; 

TableMapReduceUtil.initTableSnapshotMapperJob(snapshotName, // Snapshot name 
        scan, // Scan instance to control CF and attribute selection 
        DefaultMapper.class, // mapper class 
        NullWritable.class, // mapper output key 
        Text.class, // mapper output value 
        job, 
        true, 
        restoreDir); 

同時在Hbase快照上運行mapreduce將跳過Hbase表上的掃描,並且也不會影響區域服務器。