2014-04-04 3 views
1

Я использую Node.js Thrift API для подключения к Hbase. Все работало замечательно, пока я не модернизировал CDH 4.6 до CDH 5. После обновления я возродил API бережливости для Node.js с этим сценарием:Hbase Thrift в CDH 5

thrift --gen js:node /opt/cloudera/parcels/CDH-5.0.0-1.cdh5.0.0.p0.47/lib/hbase/include/thrift/hbase2.thrift 

После замены оригинального Node.js скрипта с вновь созданным сценарием, всеми перестал работать.

Вы можете просмотреть новый сценарий и основные методы в демо, что я пытаюсь запустить на https://github.com/lgrcyanny/Node-HBase-Thrift2

Когда я запускаю метод «получить», он возвращает «Внутренняя ошибка обработки GET».

Когда я запускаю метод «put», он возвращает «Недопустимое имя метода:« put ».

Кажется, что новый Thrift API полностью несовместим? Я что-то пропустил?

ответ

2

Есть два Бережливость IDL файлы, которые приходят с HBase:

Оба имеют get() метод, но только один из них имеет put() метод, который точно, что вам сообщают ваши сообщения об ошибках.

Цитируется из package summary страницы:

Есть в настоящее время 2 бережливость реализации серверов в HBase, то пакеты:

  • org.apache.hadoop.hbase.thrift: Это может быть один день be обозначен как обесцветенный.

  • org.apache.hadoop.hbase.thrift2: i.e. это упаковка. Это предназначено для того, чтобы точно соответствовать интерфейсу HTable и , чтобы в один прекрасный день привести в порядок прежний бережливость (старый бережливый имитирует API HBase больше не имеет).

Также install guides есть отдельный раздел для этого сценария:

CDH 5 HBase Совместимость

CDH 5 HBase является [...] не проволочных совместим с CDH 4 [...]. Следовательно, обновления проката с CDH 4 до CDH 5 невозможны, поскольку существующие клиенты CDH 4 HBase не могут отправлять запросы на серверы CDH 5 и CDH 5 Клиенты HBase не могут отправлять запросы на серверы CDH 4. Однако клиенты прокси-серверов Trrift и REST сохраняют совместимость проводников между CDH 4 и CDH 5. [...]

HBase Пользователь API (Get, Put, результат, сканер и т.д., см Apache HBase API документация) развивался и были предприняты попытки сделать уверены, что клиенты Hbase являются исходным кодом совместим и, таким образом, должна перекомпиляции без требуя каких-либо модификаций исходного кода. Это не может быть гарантировано , так как с преобразованием в ProtoBufs некоторые относительно неясные API-интерфейсы были удалены. Рудиментарные усилия: также были созданы для сохранения совместимости перекомпиляции с расширенными API , таких как фильтры и сопроцессоры. Эти усовершенствованные API еще развиваются, и наши гарантии совместимости API здесь слабее.

+2

Выяснил это. По умолчанию Cloudera Manager 5 запускает бережливый сервер с 'org.apache.hadoop.hbase.thrift.ThriftServer start --port 9090 -threadpool --bind 0.0.0.0 --framed', который является пакетом бережливости 1. Я отключил автоматический перезапуск ThriftServer, затем вручную начал ThriftServer с Hbase thrift2 start -f. –

+0

У меня была та же проблема, решение заключалось в том, чтобы начать thrift2 с -threadpool –

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