最近研究了一下 phoenix 基于JDBC方式导入的性能问题,测试环境:
hadoop (2.3.0+cdh5.0.0+548)
hbase(0.96.1.1+cdh5.0.0+60)
phoenix4.0.0.0
创建表tab_ps_xdr2, 带有4个索引列分别创建4个索引表,如下:
create table TAB_PS_XDR2 ( K VARCHAR NOT NULL PRIMARY KEY, A VARCHAR, B VARCHAR, C VARCHAR, D VARCHAR, V VARCHAR) COMPRESSION='SNAPPY',SALT_BUCKETS=12,TTL='7200',VERSIONS='5';
create index CALLING_NUMBER2 on TAB_PS_XDR2 (A);
create index CALLED_NUMBER2 on TAB_PS_XDR2 (B);
create index IMSI2 on TAB_PS_XDR2 (C);
create index IMEI2 on TAB_PS_XDR2 (D);
测试代码:
public static void readCVS5(int pre, String path) { File file = new File(path); long fileLength = 0; fileLength = file.length(); int BUFFER_SIZE = (int) fileLength;// 100M的缓冲 Connection _Connection = null; PreparedStatement _PreparedStatement = null; String tSQL = "UPSERT INTO TAB_PS_XDR2 VALUES(?,?,?,?,?,?)"; try { _Connection = HBaseUtility.getConnection(); _Connection.setAutoCommit(false); _PreparedStatement = _Connection.prepareStatement(tSQL); long start = System.currentTimeMillis(); String pid = ManagementFactory.getRuntimeMXBean().getName().split("@")[0]; FileChannel fc = new RandomAccessFile(file, "r").getChannel(); MappedByteBuffer inputBuffer = fc.map( FileChannel.MapMode.READ_ONLY, 0, fileLength);// 读取大文件 byte[] dst = new byte[BUFFER_SIZE]; int j = 0; for (int offset = 0; offset < fileLength; offset += BUFFER_SIZE) { if (fileLength - offset >= BUFFER_SIZE) { for (int i = 0; i < BUFFER_SIZE; i++) dst[i] = inputBuffer.get(offset + i); } else { for (int i = 0; i < fileLength - offset; i++) dst[i] = inputBuffer.get(offset + i); } InputStream in = new ByteArrayInputStream(dst); BufferedReader reader = new BufferedReader( new InputStreamReader(in), BUFFER_SIZE); String line = reader.readLine(); String[] strs = null; while (line != null) { strs = parserLine2(line, ","); if (strs.length > 5) { _PreparedStatement.setString(1, strs[0]); _PreparedStatement.setString(2, strs[1]); _PreparedStatement.setString(3, strs[2]); _PreparedStatement.setString(4, strs[3]); _PreparedStatement.setString(5, strs[4]); _PreparedStatement.setString(6, strs[5]); _PreparedStatement.addBatch(); if ((++j) % pre == 0) { _PreparedStatement.executeBatch(); _PreparedStatement.clearBatch(); // _Connection.commit(); System.out.println( "executeInsert::" +pid); } } else { System.out.println("数据问题:" + j); } line = reader.readLine(); } _PreparedStatement.executeBatch(); _PreparedStatement.clearBatch(); _Connection.commit(); System.out.println("executeInsert-LashFlush!!"+pid); long totalTime = System.currentTimeMillis() - start; System.out.println("每秒处理数据:" + j * 1000 / totalTime); } } catch (Exception e) { e.printStackTrace(); }finally { try { _PreparedStatement.close(); _Connection.close(); } catch (Exception e) { e.printStackTrace(); } } }
单进程(万条提交)测试:
sh cmd0.sh 10000 /home/cloudil/limq/test/a-bssap-1.cdr.csv &
测试时间大约23秒。
十进程测试(万条提交):
测试大约79秒,按照平均每个文件 95M计算, 每秒处理大约12M左右数据。
每次10000-11000条提交比较合适。
相关推荐
这篇文档将详细介绍如何使用Phoenix通过JDBC(Java Database Connectivity)连接到HBase数据库,并进行相关的数据操作,如表的创建、删除以及数据的增删改查。 首先,理解Phoenix的作用至关重要。Phoenix提供了SQL...
总结来说,这个过程涵盖了从FTP服务器获取文件,通过Phoenix JDBC连接Hbase数据库,创建表结构,将文件内容导入到Hbase,以及执行查询等一系列操作。这是一个典型的ETL(提取、转换、加载)流程,是大数据处理和分析...
flink sql读写phoenix所使用到的连接器依赖包: flink-sql-connector-phoenix-1.14-1.0.jar 使用示例: create table tab2( ID STRING, NAME STRING, PRIMARY KEY (ID) NOT ENFORCED )WITH( 'connector' = '...
Phoenix Hbase springjdbc整合 demo Phoenix最早是saleforce的一个开源项目,后来成为Apache基金的顶级项目。 Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入...
Phoenix通过提供SQL接口来简化HBase的应用开发过程,并且支持标准的JDBC驱动程序,使得开发者可以使用传统的SQL语句来查询和管理存储在HBase中的数据。 由于Phoenix的强大功能以及其与Hadoop生态系统(尤其是HBase...
例如,在“hbase+phoenix测试文档及查询速度说明.docx”文件中,可能会详细记录这些测试步骤和结果,包括查询语句的编写、查询时间的对比以及性能优化的建议。 总结来说,HBase与Phoenix的结合,使得我们在处理...
使用这个工具,开发者和DBA可以方便地进行数据浏览、数据导入导出、性能测试和故障排查等工作,无需深入了解HBase的底层细节,大大提升了开发效率。 总的来说,"phoenix-5.0.0-HBase-2.0-client.jar" 文件是...
5. **验证集成**:通过JDBC连接测试Phoenix是否能正常工作,如通过SQL客户端连接到Phoenix服务器,执行简单的查询。 **四、使用Phoenix** 1. **创建表**:使用SQL语句创建HBase表,定义列族和列,以及主键。 2. *...
总之,"apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz" 包含了在 Cloudera CDH 5.14.2 平台上运行 Apache Phoenix 4.14.0 所需的所有文件,为用户提供了一种高效且SQL友好的方式来管理和查询 HBase 数据。
【正文】 在IT行业中,大数据处理和分析是一个关键领域,其中...请记住,定期更新Squirrel和Phoenix驱动,以获取最新的功能和安全修复。在实际使用中,熟悉SQL语法和Phoenix的特性将使你在大数据处理中游刃有余。
7. **测试连接**:你可以通过执行SQL查询来验证Phoenix是否工作正常。例如,创建一个表并插入一些数据,然后查询这些数据。 8. **Phoenix客户端工具**:`Phoenix安装部署.md`可能包含有关如何使用Phoenix SQL shell...
2. 数据导入:Phoenix支持通过SQL语句批量插入数据,或者通过HBase的API将数据导入到HBase中。 3. 查询优化:Phoenix提供了丰富的索引机制,包括主键索引、全局有序索引和覆盖索引等,可以根据业务需求选择合适的...
你可以通过`phoenix-queryserver`启动Query Server,然后使用Phoenix的SQL客户端(如Phoenix SQL shell)验证连接和查询功能。 总结,Spring Boot集成Phoenix和HBase可以提供一个高效且易于管理的NoSQL数据库访问...
5. **测试连接**:通过JDBC驱动连接到Phoenix,如使用`psql`命令或者Java应用程序进行测试。 **使用Phoenix进行数据操作:** 1. **创建表**:使用SQL语句创建表,例如`CREATE TABLE my_table (id INTEGER PRIMARY ...
hbase phoenix 客户端连接jdbc的jar包,SQuirreL SQL Client,DbVisualizer 等客户端连接hbase配置使用
5. **验证安装**:通过JDBC客户端连接Phoenix,执行SQL查询,验证安装是否成功。 Phoenix支持SQL语法,包括创建表、插入数据、查询、更新和删除等操作。对于复杂的HBase数据模型,Phoenix提供了索引、视图等功能,...
7. 测试连接:最后,通过JDBC连接测试Phoenix是否能正常工作,例如,创建一个简单的SQL查询并验证其结果。 在大数据处理中,Phoenix提供了一种方便的途径,让开发人员和分析师能够利用SQL的便利性来操作HBase数据,...
Apache Phoenix 是一个开源的SQL查询引擎,用于在Apache HBase之上提供高性能的关系型数据库功能。它将SQL查询转换为HBase的原生操作,从而提高了数据处理的速度和效率。Phoenix 4.13.1是该项目的某个稳定版本,特别...
同时,Phoenix支持通过注解或XML配置方式来创建表和索引,使得表结构的定义更加直观和易于管理。 总结来说,SpringBoot、MyBatis和Phoenix的整合利用了HikariCP的高效连接管理,实现了对HBase的SQL化操作,降低了...