2 创建表 CREATE TABLE IF NOT EXISTS us_population ( state CHAR(2) NOT NULL, city VARCHAR NOT Phoenix 表映射 1. Phoenix 表和 HBase 表的关系 默认情况下, 直接在 HBase 中创建的表通过 Phoenix 是查不到的. ? ? 映射方式有两种: 视图映射 表映射 2 准备工作 在 HBase 中创建表: test, 两个列簇name、company. ? 1. 启动 HBase shell // 另开一台窗口启动Hbase [bigdata@hadoop002 hbase]$ bin/hbase shell 2. address" varchar); // 2. 查找 select * from "test"; ? 4.
org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value> </property> 组合主键: create table "test_keys2" ( "V_1" decimal(24,8), "V_2" varchar, "YEAR" INTEGER not null , "PERIOD" INTEGER not null ,"ACCOUNT" V_1","diminfo".V_2 , "diminfo".PERIOD , "diminfo".ACCOUNT , "diminfo".ENTITY , "diminfo".SCENARIO , V_1","diminfo".V_2 , "diminfo".PERIOD , "diminfo".ACCOUNT , "diminfo".ENTITY , "diminfo".SCENARIO , 那么索引数据的导入还需要采用phoenix提供的索引同步工具类 IndexTool , 这是一个mapreduce工具类,使用方式如下: $HBASE_HOME/bin/hbase org.apache.phoenix.mapreduce.index.IndexTool
2, 安装 解压之后将phoenix-4.12.0-HBase-1.2-server.jar复制到hbase/lib目录下。 null primary key, mycolumn varchar); upsert into test values (1,'Hello'); upsert into test values (2, stmt.executeUpdate("upsert into test1 values (1,'Hello')"); stmt.executeUpdate("upsert into test1 values (2, => 5} 2, 创建phoenix视图 CREATE VIEW "t1" ( pk VARCHAR PRIMARY KEY, "f1".val VARCHAR ) Pk列声明你的Rowkey是字符串类型 table同时创建phoenix表和hbase表 CREATE TABLE t1(pk VARCHAR PRIMARY KEY,val VARCHAR) 推荐阅读: 1,HBase原理和设计 2,干货
Jose Valim - Phoenix a web framework for the new web (Lambda Days 2016) 这是Elixir语言的设计者,Phoenix框架的主要贡献者 Jose Valim对于Phoenix框架的介绍视频。 Phoenix是一款使用Elixir编写的Web开发框架。它实现了服务端的MVC架构。它的许多组件和概念类似于我们常见的框架如Django和Ruby on Rails。 Phoenix提供了开发和生成环境的最佳实践,即高生产效率和高应用性能。它同时也有一些有趣的特性,如使用channels来实现实时特性和预编译的模板。
1.方案 这里我们通过Jpype和JayDeBeApi 来连接 2.过程 这里我列出实例代码: import jpype import jaydebeapi import os phoenix_client_jar ="/data/users/huser/phoenix/phoenix-4.3.0-client.jar" args=='-Djava.class.path=%s'% phoenix_client_jar jvm_path=jpype.getDefaultJVMPath() jpype.startJVM(jvm_path,args) conn=jaydebeapi.connect('org.apache.phoenix.jdbc.PhoenixDriver ',['jdbc:phoenix:bj-g2hdp1,bj-g2hdp2,bj-g2hdp3:2181','',''],phoenix_clinent_jar) curs=conn.cursor() sql
; UPSERT INTO my_table values('2','value1','value2','value3'); UPSERT INTO my_table values('3 ','value1','value2','value3'); UPSERT INTO my_table values('4','value1','value2','value3'); UPSERT phoenix:> select * from my_table where v3 = '13308117837' and v2 = '北京顺义'; +-------------------+- ) 0: jdbc:phoenix:> select * from my_table where v3 = '13308117837' and v2 = '北京顺义'; +------- s2" ) ASYNC; 运行MapReduce 执行MapReduce hbase org.apache.phoenix.mapreduce.index.IndexTool
1.phoenix 利用CsvBulkLoadTool 批量带入数据并自动创建索引 在phoenix 目录下执行 hadoop jar /home/phoenix-4.6.0-HBase-1.0-bin /phoenix-4.6.0-HBase-1.0-client.jar org.apache.phoenix.mapreduce.CsvBulkLoadTool -t POPULATION -i / 2.phoenix 自带sql导入工具 . /psql.py centos1,centos2,centos3 /home/ico11.sql 3.java代码批量插入 public class PhoenixSQL { public static upsertBatchSize = conn.getMutateBatchSize(); while(sc.hasNextLine()) { sb+=sc.nextLine()+" "; if(i%2!
上篇文章主要讲了设计 Phoenix 框架前的遇到的问题和设计框架的思路 《 Phoenix 框架 从0到1设计业务并发框架 小米商城产品站革新之路》,本篇文章主要讲一下如何设计框架的。 不死鸟并发框架,是自动构建有向图按照深度进行构建并发组并进行并发调用结果的框架。 名词解释PhoenixFramework 不死鸟(凤凰)框架,此业务并发框架的名称;Task 在业务并发中定义一次调用,可以是 HTTP、DUBBO 或者是 Redis 获取、MySQL 读库操作;Transfer ,框架的设计主要的是要思考如何将实际业务中使用的模块抽象化设计,同时要思考框架的扩展性与强约束性。 结尾本篇文章主要讲解我如何将业务与调用关系进行抽象成 Trans 与 Task 的,接下来我将讲述并发框架并发线程池的核心设计、配置化思考、监控设计以及自动构建算法等系列文章。
截止到2020年12月,Phoenix最高只支持到Hbase2.0版本,并不支持更高的版本。 而我们采用的是腾讯云HBase,使用的版本是2.2.0版本,我们在使用Phoenix-5.0版本时,发现系统报错,无法正常使用。 其实Phoenix-5.0版本已经两年多没有更新了,而Hbase还在不断演进,越来越多的人使用Hbase2.0以上版本,这个问题会越来越突出,我们跟踪发现,只要做些简单处理,Phoenix-5.0就可以支持 使用过程中,发现后台报错: Caused by: java.lang.VerifyError: class org.apache.phoenix.hbase.index.covered.data.IndexMemStore
节点 进程 node1 node2 node3 node4 Phoenix * * * * 二、Phoenix 安装 在所有节点上执行下面第1、2步操作,在 node1 节点上执行第3 export PATH=$PHOENIX_HOME/bin:$PATH # 加载生效 source /etc/profile 2. :node1,node2,node3" Connecting to jdbc:phoenix:node1,node2,node3 24/03/07 14:44:45 WARN util.NativeCodeLoader :node1,node2,node3> 默认情况下,直接在 HBase 中创建的表,通过 Phoenix 是查看不到的。 (2)视图映射 Phoenix 创建的视图是只读的,所以只能用来做查询,无法通过视图对源数据进行修改等操作。
小米商城产品站之前由于历史原因,存在着诸多问题与不便,随着技术的快速变革,技术部中台化的建设,越来越不适用于现在快速迭代的业务需求,接下来我将以技术的视角讲解我们遇到的痛点,以及解决这些痛点的思路,也就是 Phoenix 框架诞生的故事。 我调研发现业界 LiteFlow 框架是最受欢迎与好评的框架,于是在 Github 上面去了解框架底层实现的细节,随着深入阅读源码,发现这款框架设计的是真的很优秀,但是也过于庞大、复杂,特别是 EL 规则的写法 ,也就是 Phoenix Framework。 Phoenix,最初在周志明老师的网站"凤凰架构"提及,一方面是对周老师的架构设计理解与 Java 相关知识学习的致敬,另一方面,Phoenix 不死鸟,软件的生命周期也是如此,随着业务的快速发展诞生、
背景从 0 到 1 设计业务并发框架系列:Phoenix 框架 小米商城产品站革新之路Phoenix 框架 怎么组织设计一个框架前两篇文章已经讲述了我设计框架的背景以及抽象设计的细节,今天讲一下并发框架最为关键的并发线程池的核心设计 T1 时刻,第 1 波流量进来,之后率先执行 TaskA 或者 TaskB,此次线程池 2、3 没有执行到;TaskA 请求的快速递增,接口变得越来越慢;T2 时刻,还有两个 TaskA 并没有执行完毕 ,之后第二波流量进来:- 第 1 波流量开始执行线程池 2 的线程 TaskC 和 TaskD;- 第 1 波流量存在 TaskC 执行完,陆续开始执行线程池 3 的线程 TaskE;- 第 2 波流量进来 T1 时刻,第一波流量进来,所有线程池的线程都占满,开始进入核心调度执行;T2 时刻,第二波请求进来,第一波请求的 2 个 TaskA 还没有执行完毕,其他线程池的线程逐渐承接第二波请求等待调度;T3 这个版本作为线上生产环境的第一个版本推了上去,单台 8C 8G (k8s) 的配置空跑框架达到了 QPS 在 1.4w,接口可用性在 99.96%(结果仅供参考,根据公司集群部署策略、机器性能等问题会有浮动
quit退出 (2)创建表 create table hbase_test ( s1 varchar not null primary key, s2 varchar, s3 varchar, s4 varchar values('2','tom','jack','harry'); 插入多条数据需要执行多条upsert语句,没办法将所有的数据都写到一个“values”后面。 是查看不到的 如果需要在phoenix中操作直接在hbase中创建的表,则需要在phoenix中进行表的映射。 表映射的话,在phoenix中的表与hbase中的表会被同时删除与修改,视图映射中的表删除,hbase中的表不会被删除。 2)当HBase中不存在表时,可以直接使用createtable指令创建需要的表,并且在创建指令中可以根据需要对HBase表结构进行显示的说明。
2、Phoenix架构 二、安装Phoenix 1、安装 将安装包上传到服务器目录 解压安装包 tar -zxvf apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz - 2、Phoenix Shell操作 登录Phoenix /opt/module/phoenix/bin/sqlline.py hadoop101,hadoop102,hadoop103:2181 创建表 name VARCHAR, addr VARCHAR); # 指定多个列的联合作为RowKey CREATE TABLE IF NOT EXISTS us_population ( State CHAR(2) resultSet.next()) { System.out.println(resultSet.getString(1) + ":" + resultSet.getString(2) 2、全局索引(global index) Global Index是默认的索引格式,创建全局索引时,会在HBase中建立一张新表。
查找有关Apache Phoenix及其部署的常见问题的答案。 01 Phoenix可以用于ETL用例吗? 是。 典型的Phoenix部署具有以下特点: • 应用 • Phoenix Client / JDBC驱动程序 • HBase客户端 Phoenix客户端/ JDBC驱动程序本质上是一个Java库,您应该在 但是,Phoenix的抽象尚未完成,例如,为了实现访问控制,您需要在包含Phoenix数据的基础HBase表上设置ACL。 ? 03 是否有Phoenix JDBC服务器的大小调整准则? Phoenix在全局索引维护期间执行本地索引以防止死锁:Phoenix还会在索引更新失败时部分地自动重建索引(PHOENIX-1112 )。 07 序列在Phoenix中如何工作? 数据是由Phoenix编码的,因此您必须对数据进行解码才能读取。直接写入HBase表会导致Phoenix损坏。 11 我可以在现有的HBase表上映射Phoenix表吗?
=true; 可变表: create table test (mykey varchar primary key, col1 varchar, col2 varchar); 在 col2 上创建索引 create index idx on test (col2) 在 col1 上创建索引并在 col2 上创建覆盖索引 create index idx on test (col1) include (col2) 如何连接在 Hadoop-2 上运行的 HBase? Hadoop-2 配置文件存在于 Phoenix pom.xml 中。 phoenix 是否可以像 HBase API 一样灵活地处理具有任意时间戳的表? pk2='y'; .
前言 Vertx Vertx是一个高效的异步框架,支持Java、Scala、JavaScript、Kotlin等多种语言。 在非性能调优的场景下,TPS可以高达2-3万,同时,支持多种数据源也提供了异步支持。 Phoenix 大数据的同学肯定对其很了解,是Apache基金会下的顶级工程,Phoenix帮助Hbase提供了SQL语法的支持,让难用的Hbase变得简单易用。 实现 只对涉及Phoenix方面进行讲解,通过Scala进行编写 依赖Pom <dependency> <groupId>io.vertx</groupId> <artifactId :host1,host2:2181:/hbase
(1.506 seconds) # 写入数据 0: jdbc:phoenix:> UPSERT INTO TEST (ID, A.A1, A.A2, B.B1, B.B2) VALUES (1, ' , A.A2, B.B1, B.B2) VALUES (2, 'a21', 'a22', 'b21', 'b22'); 1 row affected (0.015 seconds) # 查询数据 0: jdbc:phoenix:> SELECT * FROM TEST; +-----+------+------+------+------+ | ID | A1 | A2 | B1 | B2 | +-----+------+------+------+------+ | 1 | a11 | a12 | b11 | b12 | | 2 | a21 | a22 | b21 | b22 | +-----+------+------+------+------+ 2 rows selected (0.111 seconds) # 删除表 0: jdbc:phoenix
操作过程: 第一步删除phoenix中系统的表格信息,主要为SYSTEM.CATALOG,第二步删除Hbase中的表格信息。 操作步骤: (1)查询phoenix系统表 SYSTEM.CATALOG 内容是所有表格的信息,系统表和自建表 SYSTEM.FUNCTION 内容是所有函数信息,系统函数和自定义函数 SYSTEM.SEQUENCE 我也不知道 SYSTEM.STATS 内容是所有表格的最后状态信息 (2)查询SYSTEM.CATALOG表结构 (3)我要删除的表格 DELETE from SYSTEM.CATALOG
Phoenix是什么 简单来说,Phoenix 是一个可以让我们通过SQL的方式操作HBase数据库的框架。 使用Phoenix的话,就可以使用SQL来查询,便捷高效,同时还可以为HBase添加二级索引,提升查询性能,还有其他一些方便的特性。 Phoenix 支持通过编写JDBC代码来操作HBase,比原生API更方便。 用法示例 建表 CREATE TABLE IF NOT EXISTS us_population ( state CHAR(2) NOT NULL, city VARCHAR NOT 小结 Phoenix 的基础功能就是在 HBase 之上添加了 SQL 层,可以让我们更方便的使用 HBase。