最近研究了一下 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条提交比较合适。
相关推荐
从ftp下载文件,通过Phoenix 的JDBC方式连接Hbase数据库,建表,导入数据,查询等操作。
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数据库,PhoenixUtil连接hbase数据库,HbaseTest测试hbase数据库的创建、删除,及表数据的增删改查
Phoenix Hbase springjdbc整合 demo Phoenix最早是saleforce的一个开源项目,后来成为Apache基金的顶级项目。 Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入...
Linux安装phoenix连接工具,由于文件太大,只上传了安装步骤和网盘下载链接
Sybase官方的JDBC驱动程序——jConnect 驱动类名:com.sybase.jdbc3.jdbc.SybDriver 连接URL:jdbc:sybase:Tds:host:port/database?property_name=value
Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排执行以生成标准的JDBC结果集。直接使用HBase API、协同处理器与自定义过滤器,对于简单查询来说,其性能量级是毫秒,对于百万级别的行数来说,其性能...
Phoenix/Insyde/Dell/EFI BIOS 添加、替换 SLIC 和 SLP 字 串,破解 SLI,以及更新其他模块的工具。 PhoenixTool.exe为英文原版,PhoenixTool_cn.exe为汉化版。 注:1、修改BIOS时可能需要提供RW Everything报告...
用phoenix对hbase建立二级索引,利用关系型数据库一样用sql语句操作HBase
cdh6.3.2 适配 Phoenix; cdh6.3.2 集成 Phoenix
java使用jdbc调用Phoenix的依赖包 Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入数据和对HBase数据进行查询。Phoenix完全使用Java编写,作为HBase内嵌的JDBC...
”这样的疑虑,事实上并不会,Phoenix通过以下方式实现了比你自己手写的方式相同或者可能是更好的性能(更不用说可以少写了很多代码): 作者:献给记性不好的自己 链接:http://www.jianshu.com/p/9d3e938081d2 來...
2.收集了大部分品牌机的SLIC文件; 3.Phoenix BIOS Editor2.1.0.0版; 4.PhoenixTool工具为Phoenix BIOS添加SLIC表; 5.RW-everything_V1.3工具及使用; 6.SLIC_ToolKit_V3.2工具,查看机器BIOS是否拥有SLIC表; 7....
hbase phoenix 客户端连接jdbc的jar包,SQuirreL SQL Client,DbVisualizer 等客户端连接hbase配置使用
该示例演示如何使用Java代码通过Phoenix连接到本地HBase实例。 使用docker映像在hbase顶部连接到Apache Phoenix,下面是docker项目的链接供参考: :
Phoenix BIOS Editor是Windows...无须重建BIOS,BIOS ROM镜像文件可以通过本软件来编辑BIOS的相关选项。软件能自动把单个的ROM镜像文件解压成小的ROM模块,不需要源码可以修改子项,为您的产品推向市场节省时间和成本。
hbase phoenix 客户端连接jdbc的jar包,SQuirreL SQL Client,DbVisualizer 等客户端连接hbase配置使用
使用Impactor给iOS9.3.5越狱,将红雪文件phoenix2直接拖入Impactor程序越狱
Phoenix BIOS Editor是Windows...无须重建BIOS,BIOS ROM镜像文件可以通过本软件来编辑BIOS的相关选项。软件能自动把单个的ROM镜像文件解压成小的ROM模块,不需要源码可以修改子项,为您的产品推向市场节省时间和成本。
--driver org.apache.phoenix.jdbc.PhoenixDriver \ --connect jdbc:phoenix:192.168.111.45:2181 \ --query "select cs_mine_code, cs_data_time,ss_station_code,ss_transducer_code,ss_transducer_state,ss_...