Как удаленно подключиться к HBASE на EC2 с помощью Java API

1

Я создал кластер Amazon EC2, используя консоль AWS со всеми настройками по умолчанию, следуя собственному руководству Amazon (http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-hbase-launch.html). Я развернул AMI 3.0.4, который запускает Hadoop 2.2.0 и HBASE 0.94.7. Я хочу иметь возможность запускать java-программу на своем собственном компьютере, которая будет подключаться к HBASE с использованием JAVA API. Раньше я смог сделать это успешно, используя экземпляр Amazon EC2, который я создал самостоятельно, но используя более новую версию HBASE (0.96.1.1-hadoop2), однако я получаю следующую ошибку в этом новом кластере:

Exception in thread "main" org.apache.hadoop.hbase.MasterNotRunningException: com.google.protobuf.ServiceException: java.io.IOException: Call to <MY_EC2_MASTER_INTERNAL_HOST_NAME>/<THE_EC2_MASTER_EXTERNAL_IP>:60000 failed on local exception: java.io.IOException: Connection reset by peer

Я проверил, что сервер запущен, я правильно сопоставил имя внутреннего хоста EC2 с общедоступным IP-адресом в локальном файле /etc/hosts, точно так же, как я это сделал с экземпляром Amazon, который я сам установил. У меня также есть правильные порты open (2181, 60000, 60010, 60020, 60030 - вероятно, даже не нужны все это) на Amazon и в настоящее время принимают трафик со всех источников IP (временно, пока я не сделаю правильно, и я разрешу это выпуск).

Мой Java API использует следующую конфигурацию (и последняя строка вызывает ошибку):

Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "<EC2_MASTER_PUBLIC_IP_ADDRESS>");
config.set("hbase.zookeeper.property.clientPort","2181");
this.conf = config;
this.tokenizer = ObjectFactory.createOpenNLPTokenizer();
HBaseAdmin.checkHBaseAvailable(this.conf);

Любая идея, что может вызвать проблему? Может ли это быть несоответствием между моей версией клиента hbase (0.96.1.1-hadoop2) и тем фактом, что Amazon HBase равен 0.94.7? Я не могу найти клиента HBase в репозитории maven для этой версии, поэтому я использую немного более новую версию.

Теги:
amazon-ec2
hbase

1 ответ

1

Не используйте jars, загруженные из репозитория maven. Скорее, скопируйте банку hbase из папки lib кластера AWS EMR и поместите ее в папку lib на вашей локальной машине.
Теперь скомпилируйте свой код, используя скопированный jar файл hbase в pathpath, т.е. javac -cp "hbase-jar-copied-location" filename.java а затем запустите.
Amazon использует некоторые настройки в банках hbase в соответствии с их потребностями, поэтому программы, скомпилированные с использованием jbase-jars, загружаемых из-под внешних хранилищ maven, не работают.

  • 0
    Спасибо за ваш ответ. Я попробовал то, что вы предложили, однако jar hbase должен включать в себя другие зависимости от созданных Amazon классов, так как, хотя мой проект компилируется в Eclipse, при запуске я получаю следующую ошибку: Exception in thread "main" java.lang.NoClassDefFoundError: amazon/emr/metrics/MetricsSaver$StopWatch
  • 0
    Да, это может случиться. Попробуйте скопировать всю папку lib из EMR на локальный компьютер и удалить уже существующие библиотеки в локальном кластере.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню