Hbase Java API - метод createTable работает, но не работает

В настоящее время я пытаюсь использовать Java API для подключения к hbase и создания новой таблицы. Кажется, это работает, но метод admin.createTable () не работает. Итак, "Готово!" никогда не печатается, и программа никогда не заканчивается. Пожалуйста, посмотрите код ниже.

        Configuration config = HBaseConfiguration.create();
        config.set("hbase.zookeeper.quorum", "xxx.xxx.xxx.xxx");
        config.set("hbase.zookeeper.property.clientport", "2181");

        String tableName = "actors";
        Connection connection;
        try {
            connection = ConnectionFactory.createConnection(config);
            Admin admin = connection.getAdmin();
            Table table = connection.getTable(TableName.valueOf(tableName));
            HTableDescriptor htable = new HTableDescriptor(TableName.valueOf(tableName)); 
            htable.addFamily( new HColumnDescriptor("movies"));
            System.out.println( "Creating Table..." );
            admin.createTable( htable );
            System.out.println("Done!");
            table.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

Исключение не создается. Если я открою оболочку hbase, будет создана таблица актеров с фильмами семейства столбцов. У меня заканчиваются идеи о том, что я мог делать не так.

Одна из возможностей заключается в том, что у вас может быть доступ к некоторым, но не ко всем региональным серверам. Если ваши журналы недостаточно подробны (что, вероятно, не так по умолчанию), возможно, вы не видите этих ошибок. Так, может быть, ваш клиент может получить доступ к Мастеру, но не ко всем RS? Просто кое-что перепроверить ...

VS_FF 10.12.2018 13:16

Как бы я это исправить, если бы это было так?

marcels93 11.12.2018 21:49

Об этом можно было только догадываться. Мое лучшее предположение - разрешение имени хоста? Попробуйте получить доступ ко всем своим RS через telnet через правильный порт клиентской машины. Если это сработает, проблема в другом. Если это не так, вам нужно сначала исправить это. Всегда старайтесь связываться с HBase через имена хостов, а не через IP-адреса.

VS_FF 12.12.2018 13:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
168
1

Ответы 1

Чтобы определить точную причину, сделайте следующее.

  • Включите журналы отладки в log4j.properties, где запущена эта программа.

  • Включите эту строку в свой блок попытки

org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(conf);

Это определит, есть ли какие-либо предварительные проблемы с подключением к hbase, и выдаст ошибки, если таковые имеются.

Другие вопросы по теме