HBase + Phoenix + SQuirreL SQL Client + JavaAPI

一、HBase配置

附上hbase-site.xml配置,有的配置我也不知道是和意思,更多的还是参考前辈们的文章。里面有坑


	
	
		hbase.regionserver.wal.codec
		org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec
	

	
		hbase.region.server.rpc.scheduler.factory.class
		org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory
	
	
	
		hbase.rpc.controllerfactory.class
		org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory
	
	
	
		phoenix.schema.mapSystemTablesToNamespace
		true
	
	
	
	
		phoenix.schema.isNamespaceMappingEnabled
		true
	
	
    
    
        hbase.rootdir
        hdfs://mycluster/hbase
    

    
    
        hbase.cluster.distributed
        true
    

    
    
        hbase.zookeeper.quorum
        node02,node03,node04
    

    
    
        hbase.zookeeper.property.clientPort
        2181
    

 

二、SQuirreL 

Squirrel连接Phoenix只需要phoenix-x.x.x-HBase-x.x-client.jar一个驱动jar即可,我在虚机上面用的版本如下

hadoop 2.6.5
zookeeper 3.4.6
hbase 1.3.6
phoenix 4.14.3-HBase-1.3-bin

各个版本最好保持一致,不一致也要版本近似。

如果连接过程中出现"Inconsistent namespace mapping properties. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.isNamespaceMappingEnabled enabled\" 错误,就像报错信息提示的一样,是因为hbase-site.xml配置了命名空间,去掉即可,如下:



phoenix.schema.isNamespaceMappingEnabled

true

然后重启hbase,进入hbase shell,按照下面步骤进行操作,修改hbase中表SYSTEM:CATALOG名为SYSTEM.CATALOG

1)disable 'SYSTEM:CATALOG'

2)snapshot 'SYSTEM:CATALOG', 'cata_tableSnapshot'

3)clone_snapshot 'cata_tableSnapshot', 'SYSTEM.CATALOG'

4)drop 'SYSTEM:CATALOG'

重启phoenix便会连接成功。

但是项目需要HBASE的命名空间,就需要配置Phoenix的Schema与之对应,在hbase.site.xml配置如下:


    phoenix.schema.isNamespaceMappingEnabled
    true



    phoenix.schema.mapSystemTablesToNamespace
    true

 配置之后,程序需要加到对应的改动,如下:

        Properties props = new Properties();
        props.setProperty("userName", "");
        props.setProperty("password", "");
        props.setProperty("phoenix.schema.isNamespaceMappingEnabled", "true");
        props.setProperty("phoenix.schema.mapSystemTablesToNamespace", "true");

下面附上连接成功的截图

HBase + Phoenix + SQuirreL SQL Client + JavaAPI_第1张图片

三、JDBC连接Phoenix

需要驱动包phoenix-4.14.3-HBase-1.3-client.jar,测试连接的代码如下

public static void testConn() throws Exception {

        String driver = "org.apache.phoenix.jdbc.PhoenixDriver";

        String url = "jdbc:phoenix:node02,node03,node04:2181";

        Class.forName(driver);

        Connection conn = DriverManager.getConnection(url, "", "");

        String sql = "select 1";

        PreparedStatement ps = conn.prepareStatement(sql);

        ResultSet rs = ps.executeQuery();

        if (rs.next()) {
            System.out.println("连接成功");
        }

    }

四、sqlline

在phoenix/bin目录下,通过./sqlline启动客户端操作phoenix,如果启动失败,需要指定zk,即./sqllinie zk:2181,注意点如下:

1、!tables

查看所有表

2、!desc tbl;

查看tbl元数据信息

3、create schema sch1;

Phoenix是区分大小写的,像上面的语句是建立了schema,自动转为大写SCH1,如果需要小写,需要套上双引号,即create schema "sch1"。

创建表时同样区分大小写。

4、客户端操作schemae或者table,需要区分大小写

比如,程序需要获取指定schema和table的字段信息,需要确定schema和table的大小写,不然获取为空

 

 

 

 

你可能感兴趣的:(jdbc,java,hbase,zookeeper,运维)