2015-02-23 2 views
2

У меня есть Phoenix, установленный на кластере Cloudera с 5 узлами с тремя узлами zookeeper.Apache Phoenix JDBC connection zookeeper error

Я пытаюсь запустить базовую команду SQL из программы JDBC ниже, но я получаю ошибки в zookeeper. Может ли кто-нибудь посоветовать?

import java.sql.*; 

public class PhoenixJDBC { 

public static void main(String args[]) { 

try { 
    //Register JDBC Driver 
    Class.forName("org.apache.phoenix.jdbc.PhoenixDriver").newInstance(); 

    Connection conn = DriverManager.getConnection("jdbc:phoenix:54.152.31.122","",""); 

    //Create a Statement class to execute the SQL statement 
    Statement stmt = conn.createStatement(); 

    //Execute the SQL statement and get the results in a Resultset 
    ResultSet rs = stmt.executeQuery("select * from US_POPULATION"); 

    // Iterate through the ResultSet, displaying two values 
    // for each row using the getString method 

    while (rs.next()) 
     System.out.println("Name= " + rs.getString("host")); 
} 
catch (SQLException e) { 
    e.printStackTrace(); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
} 
} 
} 

Исключение:

org.apache.phoenix.exception.PhoenixIOException: org.apache.hadoop.hbase.MasterNotRunningException: Can't get connection to ZooKeeper: KeeperErrorCode = ConnectionLoss for /hbase 
    at org.apache.phoenix.util.ServerUtil.parseServerException(ServerUtil.java:108) 
    at org.apache.phoenix.query.ConnectionQueryServicesImpl.ensureTableCreated(ConnectionQueryServicesImpl.java:832) 
    at org.apache.phoenix.query.ConnectionQueryServicesImpl.createTable(ConnectionQueryServicesImpl.java:1126) 
    at org.apache.phoenix.query.DelegateConnectionQueryServices.createTable(DelegateConnectionQueryServices.java:110) 
    at org.apache.phoenix.schema.MetaDataClient.createTableInternal(MetaDataClient.java:1590) 
    at org.apache.phoenix.schema.MetaDataClient.createTable(MetaDataClient.java:568) 
    at org.apache.phoenix.compile.CreateTableCompiler$2.execute(CreateTableCompiler.java:175) 
    at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:271) 
    at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:263) 
    at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53) 
    at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:261) 
    at org.apache.phoenix.jdbc.PhoenixStatement.executeUpdate(PhoenixStatement.java:1043) 
    at org.apache.phoenix.query.ConnectionQueryServicesImpl$9.call(ConnectionQueryServicesImpl.java:1551) 
    at org.apache.phoenix.query.ConnectionQueryServicesImpl$9.call(ConnectionQueryServicesImpl.java:1520) 
    at org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:77) 
    at org.apache.phoenix.query.ConnectionQueryServicesImpl.init(ConnectionQueryServicesImpl.java:1520) 
    at org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:162) 
    at org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.connect(PhoenixEmbeddedDriver.java:126) 
    at org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:133) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at mysqljbdctest.PhoenixJDBC.main(PhoenixJDBC.java:15) 
Caused by: org.apache.hadoop.hbase.MasterNotRunningException: org.apache.hadoop.hbase.MasterNotRunningException: Can't get connection to ZooKeeper: KeeperErrorCode = ConnectionLoss for /hbase 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$StubMaker.makeStub(HConnectionManager.java:1651) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$MasterServiceStubMaker.makeStub(HConnectionManager.java:1677) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getKeepAliveMasterService(HConnectionManager.java:1884) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getHTableDescriptor(HConnectionManager.java:2671) 
    at org.apache.hadoop.hbase.client.HBaseAdmin.getTableDescriptor(HBaseAdmin.java:397) 
    at org.apache.hadoop.hbase.client.HBaseAdmin.getTableDescriptor(HBaseAdmin.java:402) 
    at org.apache.phoenix.query.ConnectionQueryServicesImpl.ensureTableCreated(ConnectionQueryServicesImpl.java:764) 
    ... 20 more 

ответ

3

С StackTrace это выглядит как HMaster может быть вниз.

Кроме того, вы пробовали ввести полный кворум кворума в свой URL? Что-то вроде этого:

jdbc:phoenix:54.152.31.122,54.152.31.123,54.152.31.124 

У меня была проблема на Амазонке (в том, что, когда ваш кластер?), Где внутренние и внешние IP-адреса были путаться и не могли Zookeeper подключиться к HBase правильно. Я решил это (не самое масштабируемое решение, но оно работает!), Создав псевдонимы в/etc/hosts на компьютерах в кластере, указывая на внутренние IP-адреса, а затем на моем локальном рабочем столе, используя те же псевдонимы, но указывая на внешние IP-адреса. Затем изменили настройку кластера, чтобы использовать псевдонимы везде вместо IP-адресов. Быстрый способ проверить, является ли это вашей проблемой - создайте приложение, скопируйте его на один из серверов вашего кластера и посмотрите, будет ли он работать нормально.

Надеюсь, что это поможет!

0

/hbase - это каталог по умолчанию в Zookeeper. Вы должны проверить hbase-site.xml, какой путь hbase был сохранен в Zookeeper - Может быть/hbase-unsecure.

Давайте попробуем

jdbc:phoenix:zk-host:port:path_on_zookeeper