HBase访问多个ZooKeeper样例程序
功能简介
在同一个客户端进程内同时访问FusionInsight ZooKeeper和第三方的ZooKeeper,其中HBase客户端访问FusionInsight ZooKeeper,客户应用访问第三方ZooKeeper。
代码样例
以下代码片段在“hbase-zk-example\src\main\java\com\huawei\hadoop\hbase\example”包的“TestZKSample”类中,用户主要需要关注“login”和“connectApacheZK”这两个方法。
private static void login(String keytabFile, String principal) throws IOException { conf = HBaseConfiguration.create(); //In Windows environment String confDirPath = TestZKSample.class.getClassLoader().getResource("").getPath() + File.separator;[1] //In Linux environment //String confDirPath = System.getProperty("user.dir") + File.separator + "conf" + File.separator; // Set zoo.cfg for hbase to connect to fi zookeeper. conf.set("hbase.client.zookeeper.config.path", confDirPath + "zoo.cfg"); if (User.isHBaseSecurityEnabled(conf)) { // jaas.conf file, it is included in the client pakcage file System.setProperty("java.security.auth.login.config", confDirPath + "jaas.conf"); // set the kerberos server info,point to the kerberosclient System.setProperty("java.security.krb5.conf", confDirPath + "krb5.conf"); // set the keytab file name conf.set("username.client.keytab.file", confDirPath + keytabFile); // set the user's principal try { conf.set("username.client.kerberos.principal", principal); User.login(conf, "username.client.keytab.file", "username.client.kerberos.principal", InetAddress.getLocalHost().getCanonicalHostName()); } catch (IOException e) { throw new IOException("Login failed.", e); } } }
private void connectApacheZK() throws IOException, org.apache.zookeeper.KeeperException { try { // Create apache zookeeper connection. ZooKeeper digestZk = new ZooKeeper("127.0.0.1:2181", 60000, null); LOG.info("digest directory:{}", digestZk.getChildren("/", null)); LOG.info("Successfully connect to apache zookeeper."); } catch (InterruptedException e) { LOG.error("Found error when connect apache zookeeper ", e); } }
- [1]userdir获取的是编译后资源目录的路径。将初始化需要的配置文件“core-site.xml”、“hdfs-site.xml”、“hbase-site.xml”和用于安全认证的用户凭证文件放置到“src/main/resources”的目录下。
- “login”方法中的参数“java.security.auth.login.config”设置的jaas.conf文件用来设置访问ZooKeeper相关认证信息,样例代码中包含Client_new和Client两部分,Client_new的配置用来访问FusionInsight ZooKeeper,Client用来访问Apache ZooKeeper。
- “login”方法中的参数“hbase.client.zookeeper.config.path”用来设置访问FusionInsight ZooKeeper客户端的配置,主要涉及如下三个参数:
- zookeeper.sasl.clientconfig:指定使用jaas.conf文件中的对应配置访问FusionInsight ZooKeeper;
- zookeeper.server.principal:指定ZooKeeper服务端使用principal,格式为“zookeeper/hadoop.系统域名”,例如:zookeeper/hadoop.HADOOP.COM。系统域名可登录FusionInsight Manager,选择“系统 > 权限 > 域和互信”,查看“本端域”参数值获取。
- zookeeper.sasl.client:如果MRS集群是安全模式,该值设置为“true”,否则设置为“false”,设置为“false”的情况下,“zookeeper.sasl.clientconfig”和“zookeeper.server.principal”参数不生效。