美文网首页
【phoenix-使用手册】开启transactions事务

【phoenix-使用手册】开启transactions事务

作者: 粮忆雨 | 来源:发表于2018-11-29 10:32 被阅读0次

    测试版本:phoenix-4.14.1-HBase-1.1
    目前phoenix的事务支持只是beta版,不建议在生产环境中使用。另外hbase1.1对应的phoenix已经停止维护了,建议升级hbase。

    step 1:

    有时间的话可以看看官方的说明步骤(与实际操作还是有些出入):https://phoenix.apache.org/transactions.html
    首先在hbase集群安装目录下的conf/hbase-site.xml和phoenix服务端安装目录bin/hbase-site.xml添加如下配置:

    <!-- 开启phoenix事务支持 -->
    <property>
      <name>phoenix.transactions.enabled</name>
      <value>true</value>
    </property>
    
    <!-- 存储tx状态的快照目录 -->
    <property>
      <name>data.tx.snapshot.dir</name>
      <value>/tmp/tephra/snapshots</value>
    </property>
    
    <!-- 事务超时时间 -->
    <property>
      <name>data.tx.timeout</name>
      <value>60</value>
    </property>
    

    step 2:

    首先升级hbase安装目录下的lib/guava-12.0.1.jar,要求guava-13.0.1.jar版本以上,否则启动tephra管理事务时报如下错误,启动日志目录默认/tmp/tephra-root/tephra-service-root-XXX.log :

    Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/util/concurrent/Service$Listener
        at org.apache.tephra.distributed.TransactionService.doStart(TransactionService.java:87)
        at com.google.common.util.concurrent.AbstractService.start(AbstractService.java:90)
        at com.google.common.util.concurrent.AbstractService.startAndWait(AbstractService.java:129)
        at org.apache.tephra.TransactionServiceMain.start(TransactionServiceMain.java:118)
        at org.apache.tephra.TransactionServiceMain.doMain(TransactionServiceMain.java:85)
        at org.apache.tephra.TransactionServiceMain.main(TransactionServiceMain.java:49)
    Caused by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.Service$Listener
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 6 more
    

    jar包可以通过maven下载,替换旧版本的guava jar.

    <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>13.0.1</version>
    </dependency>
    

    升级完guava,启动事务管理进程,进入phoenix装目录

    ./bin/tephra start
    

    启动完成使用jps查看TransactionServiceMain进程。

    step 3:

    测试,首先关闭自动提交事务(默认!autocommit on)

    !autocommit off
    

    创建事务表使用 TRANSACTIONAL=true

    CREATE TABLE my_table (k BIGINT PRIMARY KEY, v VARCHAR) TRANSACTIONAL=true;
    

    修改已存在表成事务表 (注意:不能将事务性表切换回非事务性表,所以谨慎考虑)

    ALTER TABLE my_other_table SET TRANSACTIONAL=true;
    
    image.png

    添加到事务表中的索引对于它们的增量维护也是事务性的。例如,以下添加到my_table的索引将在发生变化时保持其与数据表的事务一致:

    CREATE INDEX  my_table (k BIGINT PRIMARY KEY, v VARCHAR) TRANSACTIONAL=true;
    

    已经启动的外部Tephra事务可以通过设置Phoenix连接的事务上下文与Phoenix一起使用:

    setTransactionContext(TransactionContext txContext)
    
    

    相关文章

      网友评论

          本文标题:【phoenix-使用手册】开启transactions事务

          本文链接:https://www.haomeiwen.com/subject/tkqnqqtx.html