一、HBase配置

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

<configuration>
	
	<property>
		<name>hbase.regionserver.wal.codec</name>
		<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
	</property>

	<property>
		<name>hbase.region.server.rpc.scheduler.factory.class</name>
		<value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value>
	</property>
	
	<property>
		<name>hbase.rpc.controllerfactory.class</name>
		<value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value>
	</property>
	
	<property>
		<name>phoenix.schema.mapSystemTablesToNamespace</name>
		<value>true</value>
	</property>
	
	<!-- 此段配置可能引起连接失败,参考二 -->
	<property>
		<name>phoenix.schema.isNamespaceMappingEnabled</name>
		<value>true</value>
	</property>
	
    <!-- 指定hbase在HDFS上存储的路径 -->
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://mycluster/hbase</value>
    </property>

    <!-- 指定hbase是分布式的 -->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>

    <!-- 指定zk的地址,多个用“,”分割 -->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>node02,node03,node04</value>
    </property>

    <!--指定Zookeeper端口号-->
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
    </property>

</configuration>

二、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配置了命名空间,去掉即可,如下:

<property>

<name>phoenix.schema.isNamespaceMappingEnabled</name>

<value>true</value>

</property>

然后重启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配置如下:

<property>
    <name>phoenix.schema.isNamespaceMappingEnabled</name>
    <value>true</value>
</property>

<property>
    <name>phoenix.schema.mapSystemTablesToNamespace</name>
    <value>true</value>
</property>

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

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

下面附上连接成功的截图

三、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的大小写,不然获取为空

Logo

云原生社区为您提供最前沿的新闻资讯和知识内容

更多推荐