2014-12-15 2 views
2

У нас есть два кластера с hbase 0.94, hadoop 1.04 и hbase 0.98, hadoop 2.4 Я создал снимок из таблицы на снимке 0.94 и хочу перенести его в кластер с hbase 0.98.hbase ExportSnapshot от 0.94 до 0.98

После запуска этой команды на 0,98 кластера:

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snapshot-name -copy-from webhdfs://hadoops-master:9000/hbase -copy-to hdfs://solr1:8020/hbase 

Я вижу:

Exception in thread "main" org.apache.hadoop.hbase.snapshot.ExportSnapshotException: Failed to copy the snapshot directory: from=webhdfs://hadoops-master:9000/hbase/.hbase-snapshot/snapshot-name to=hdfs://solr1:8020/hbase/.hbase-snapshot/.tmp/snapshot-name 
    at org.apache.hadoop.hbase.snapshot.ExportSnapshot.run(ExportSnapshot.java:916) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 
    at org.apache.hadoop.hbase.snapshot.ExportSnapshot.innerMain(ExportSnapshot.java:1000) 
    at org.apache.hadoop.hbase.snapshot.ExportSnapshot.main(ExportSnapshot.java:1004) 
Caused by: java.net.SocketException: Unexpected end of file from server 
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:772) 
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633) 
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:769) 
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1323) 
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468) 
    at org.apache.hadoop.hdfs.web.WebHdfsFileSystem$Runner.getResponse(WebHdfsFileSystem.java:596) 
    at org.apache.hadoop.hdfs.web.WebHdfsFileSystem$Runner.run(WebHdfsFileSystem.java:530) 
    at org.apache.hadoop.hdfs.web.WebHdfsFileSystem.run(WebHdfsFileSystem.java:417) 
    at org.apache.hadoop.hdfs.web.WebHdfsFileSystem.getHdfsFileStatus(WebHdfsFileSystem.java:630) 
    at org.apache.hadoop.hdfs.web.WebHdfsFileSystem.getFileStatus(WebHdfsFileSystem.java:641) 
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:337) 
    at org.apache.hadoop.hbase.snapshot.ExportSnapshot.run(ExportSnapshot.java:914) 
    ... 3 more 

ответ

0

Я переупаковал файлы hadoop и hbase с jarjar https://code.google.com/p/jarjar/ Нужно исправить некоторые проблемы с именами классов. Затем я написал копию copyreduce copyTable. Он читает строки из 94-го уровня и записывает в кластер 98. Введите код: https://github.com/fiserro/copy-table-94to98

Спасибо github.com/falsecz за идею и помощь!

0

сам (главный HBase коммиттер и сопровождающим 0,94) Ларс Hofhansl заявил, что экспорт не поддерживается с 0,94 до 0,98. Таким образом, вы, скорее всего, сейчас не будете с этим.

Вот отрывок из его нити только после обеда:

It's tricky from multiple angles:- replication between 0.94 and 0.98 does not work (there's a gateway process that supposedly does that, but it's not known to be very reliable)- snapshots cannot be exported from 0.94 and 0.98 

источник: список рассылки Hbase пользователя сегодня 12/15/14

UPDATE В списке рассылки HBase был отчет что один пользователь смог найти способ сделать экспорт. Часть этой информации является:

If exporting from an HBase 0.94 cluster to an HBase 0.98 cluster, you will need to use the webhdfs protocol (or possibly hftp, though I couldn’t get that to work). You also need to manually move some files around because snapshot layouts have changed. Based on the example above, on the 0.98 cluster do the following: 

    check whether any imports already exist for the table: 

    hadoop fs -ls /apps/hbase/data/archive/data/default 

Это не было бы правильным для меня, чтобы воспроизвести всю дискуссию здесь: ссылка на nabble, содержащую все окровавленные детали является:

http://apache-hbase.679495.n3.nabble.com/0-94-going-forward-td4066883.html

0

I я копаю в этом вопросе, и он больше связан с базовым HDFS.

После того, как потоки (в моем случае для distcp) было написано, близко называется:

public void close() throws IOException { 
try { 
     super.close(); 
    } finally { 
     try { 
     validateResponse(op, conn, true); 
     } finally { 
     conn.disconnect(); 
     } 
    } 
    } 

в котором он не в вызове ответа Validate (вероятно, другой конец связи была закрыта).

Это может быть связано с несовместимостью между HDFS 1.0 и 2.4!

Смежные вопросы