`
lminqiang
  • 浏览: 16388 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

phoenix 通过JDBC方式导入CSV文件性能测试

阅读更多

最近研究了一下 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连接hbase

    这篇文档将详细介绍如何使用Phoenix通过JDBC(Java Database Connectivity)连接到HBase数据库,并进行相关的数据操作,如表的创建、删除以及数据的增删改查。 首先,理解Phoenix的作用至关重要。Phoenix提供了SQL...

    下载ftp文件,读取内容通过Phoenix JDBC连接往Hbase数据库中建表插入数据。

    总结来说,这个过程涵盖了从FTP服务器获取文件,通过Phoenix JDBC连接Hbase数据库,创建表结构,将文件内容导入到Hbase,以及执行查询等一系列操作。这是一个典型的ETL(提取、转换、加载)流程,是大数据处理和分析...

    Flink Phoenix connector依赖包

    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 Hbase springjdbc整合 demo Phoenix最早是saleforce的一个开源项目,后来成为Apache基金的顶级项目。 Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入...

    phoenix官方所有版本的下载地址(包含最新)

    Phoenix通过提供SQL接口来简化HBase的应用开发过程,并且支持标准的JDBC驱动程序,使得开发者可以使用传统的SQL语句来查询和管理存储在HBase中的数据。 由于Phoenix的强大功能以及其与Hadoop生态系统(尤其是HBase...

    hbase+phoenix 本机测试文档

    例如,在“hbase+phoenix测试文档及查询速度说明.docx”文件中,可能会详细记录这些测试步骤和结果,包括查询语句的编写、查询时间的对比以及性能优化的建议。 总结来说,HBase与Phoenix的结合,使得我们在处理...

    phoenix-5.0.0-HBase-2.0-client

    使用这个工具,开发者和DBA可以方便地进行数据浏览、数据导入导出、性能测试和故障排查等工作,无需深入了解HBase的底层细节,大大提升了开发效率。 总的来说,"phoenix-5.0.0-HBase-2.0-client.jar" 文件是...

    cdh6.3.2 集成 Phoenix

    5. **验证集成**:通过JDBC连接测试Phoenix是否能正常工作,如通过SQL客户端连接到Phoenix服务器,执行简单的查询。 **四、使用Phoenix** 1. **创建表**:使用SQL语句创建HBase表,定义列族和列,以及主键。 2. *...

    apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz

    总之,"apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz" 包含了在 Cloudera CDH 5.14.2 平台上运行 Apache Phoenix 4.14.0 所需的所有文件,为用户提供了一种高效且SQL友好的方式来管理和查询 HBase 数据。

    Phoenix 客户端 squirrel_安装

    【正文】 在IT行业中,大数据处理和分析是一个关键领域,其中...请记住,定期更新Squirrel和Phoenix驱动,以获取最新的功能和安全修复。在实际使用中,熟悉SQL语法和Phoenix的特性将使你在大数据处理中游刃有余。

    apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz安装包

    7. **测试连接**:你可以通过执行SQL查询来验证Phoenix是否工作正常。例如,创建一个表并插入一些数据,然后查询这些数据。 8. **Phoenix客户端工具**:`Phoenix安装部署.md`可能包含有关如何使用Phoenix SQL shell...

    Phoenix构建二级索引.rar

    2. 数据导入:Phoenix支持通过SQL语句批量插入数据,或者通过HBase的API将数据导入到HBase中。 3. 查询优化:Phoenix提供了丰富的索引机制,包括主键索引、全局有序索引和覆盖索引等,可以根据业务需求选择合适的...

    springboot集成phoenix+hbase

    你可以通过`phoenix-queryserver`启动Query Server,然后使用Phoenix的SQL客户端(如Phoenix SQL shell)验证连接和查询功能。 总结,Spring Boot集成Phoenix和HBase可以提供一个高效且易于管理的NoSQL数据库访问...

    phoenix-3.2.2-bin.tar.gz

    5. **测试连接**:通过JDBC驱动连接到Phoenix,如使用`psql`命令或者Java应用程序进行测试。 **使用Phoenix进行数据操作:** 1. **创建表**:使用SQL语句创建表,例如`CREATE TABLE my_table (id INTEGER PRIMARY ...

    phoenix-5.0.0-HBase-2.0-client.jar

    hbase phoenix 客户端连接jdbc的jar包,SQuirreL SQL Client,DbVisualizer 等客户端连接hbase配置使用

    基于CDH6.3.1的Phoenix安装包.rar

    5. **验证安装**:通过JDBC客户端连接Phoenix,执行SQL查询,验证安装是否成功。 Phoenix支持SQL语法,包括创建表、插入数据、查询、更新和删除等操作。对于复杂的HBase数据模型,Phoenix提供了索引、视图等功能,...

    适用CDH6.3.1的Phoenix parcle编译包

    7. 测试连接:最后,通过JDBC连接测试Phoenix是否能正常工作,例如,创建一个简单的SQL查询并验证其结果。 在大数据处理中,Phoenix提供了一种方便的途径,让开发人员和分析师能够利用SQL的便利性来操作HBase数据,...

    apache-phoenix-4.13.1安装包

    Apache Phoenix 是一个开源的SQL查询引擎,用于在Apache HBase之上提供高性能的关系型数据库功能。它将SQL查询转换为HBase的原生操作,从而提高了数据处理的速度和效率。Phoenix 4.13.1是该项目的某个稳定版本,特别...

    hikariCP+Phoenix.rar

    同时,Phoenix支持通过注解或XML配置方式来创建表和索引,使得表结构的定义更加直观和易于管理。 总结来说,SpringBoot、MyBatis和Phoenix的整合利用了HikariCP的高效连接管理,实现了对HBase的SQL化操作,降低了...

Global site tag (gtag.js) - Google Analytics