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

2018-11-29  本文已影响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)

上一篇下一篇

猜你喜欢

热点阅读