Phoenix开启对Hbase中的namespace及二级索引的支持

1. 开启schema与namespace的对应关系

如果使用了hbase中的自定义namespace,不仅仅使用default,那么在phoenix中与之对应的是schema的概念,但是默认并没有开启,需要在hbase-site.xml中增加以下配置项:

     
      phoenix.schema.isNamespaceMappingEnabled
      true
    
    
      phoenix.schema.mapSystemTablesToNamespace
      true
    

2. 开启hbase对二级索引的支持

使用phoenix创建二级索引报错:

Error: ERROR 1029 (42Y88): Mutable secondary indexes must have the hbase.regionserver.wal.codec property set to org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec in the hbase-sites.xml of every region server tableName=IND_1 (state=42Y88,code=1029)
java.sql.SQLException: ERROR 1029 (42Y88): Mutable secondary indexes must have the hbase.regionserver.wal.codec property set to org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec in the hbase-sites.xml of every region server tableName=IND_1
    at org.apache.phoenix.exception.SQLExceptionCode$Factory$1.newException(SQLExceptionCode.java:396)
    at org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:145)
    at org.apache.phoenix.schema.MetaDataClient.createIndex(MetaDataClient.java:1162)
    at org.apache.phoenix.compile.CreateIndexCompiler$1.execute(CreateIndexCompiler.java:95)
    at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:322)
    at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:314)
    at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
    at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:312)
    at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1435)
    at sqlline.Commands.execute(Commands.java:822)
    at sqlline.Commands.sql(Commands.java:732)
    at sqlline.SqlLine.dispatch(SqlLine.java:808)
    at sqlline.SqlLine.begin(SqlLine.java:681)
    at sqlline.SqlLine.start(SqlLine.java:398)
    at sqlline.SqlLine.main(SqlLine.java:292)

原因: Phoenix支持两种索引:可变索引跟不可变索引。在可变表上建的索引是可变索引,在不可变表上建的索引是不可变索引。可变索引是指插入或删除数据的时候会同时更新索引;不可变索引适用于只写入一次不再更改的表,索引只建立一次,再插入数据不会更新索引。上面使用的语句是创建可变索引,需要在hbase-site.xml中进行相关配置使其支持可变索引(不可变索引无需另外配置,默认支持)。

在hbase-site中添加配置:

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

你可能感兴趣的:(Hbase,Phoenix,大数据)