Impala、Hive性能简单对比测试

原文链接: https://yq.aliyun.com/articles/245653

        Impala、Hive性能简单对比测试


        一、测试环境

        操作系统:CentOS6.4

        大数据平台:CDH5、Hive、Impala、MapReduce

        集群规模:3台服务器,每台64G内存(原谅小气的公司给了如此糟糕的开发环境)

        Impala共三几个后台Impalad进程,两个正常,一个失效,如图:


        一、HBase加载数据

        首先,在HBase中创建一个表,表中列簇为f,有两列dn、fn;

        其次,利用Java API在HBase中产生约1000万条测试数据,代码如下:

	@SuppressWarnings("static-access")
	@Test
	public void testPutBasic() {

		for (int m = 0; m < 20; m++) {
			new Thread() {
				@Override
				public void run() {
					int j = 0;
					for (int i = 0; i < 1000000; i++) {
						Random random = new Random();

						Hashtable pColumns = new Hashtable();
						pColumns.put("dn", "dn" + random.nextInt(100));
						pColumns.put("fn", "fn" + random.nextInt(100));

						try {
							HBaseUtil.postBasic("impala_hbase_test_table",
									this.getName() + "a" + j++, "f", pColumns,
									null);
						} catch (Exception e2) {
							// TODO Auto-generated catch block
							e2.printStackTrace();
						}
					}
				}
			}.start();
		}

		try {
			Thread.currentThread().sleep(1000000000l);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
        3、查看HBase数据量,共10643213条,如图:



        二、Impala、Hive加载HBase数据

        1、Hive使用DataBase hive_hbase,如图:


        2、Hive加载HBase数据,执行语句如下:

CREATE EXTERNAL TABLE impala_hbase(
rk string,
dn string,
fn string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, f:dn, f:fn")
TBLPROPERTIES("hbase.table.name" = "impala_hbase_test_table");

        执行截图图如下:


        验证表是否存在,如图所示:

        之前


        之后


        3、Impala同步Hive元数据,并使用相同DataBase,验证表是否存在,如图:

        Impala同步Hive元数据


        Impala使用DataBase hive_hbase


        元数据同步前


        元数据同步后


        三、性能对比测试

        1、count

        执行语句:select count(1) from impala_hbase;

        Impala耗时:28.58s

        Hive耗时:255.412s


        Impala执行截图如下:


        Hive执行截图如下:


        2、group by

        执行语句:select dn,count(1) from impala_hbase group by dn;

        Impala耗时:60.13s

        Hive耗时:257.453s


        Impala执行截图如下:



        Hive执行截图如下:




        四、注意事项

        Impala有个内存阈值的设置,如果该值设置太小,Impala执行大数据量查询时,会受限于内存阈值而无法正确执行,如下:


        这个内存阈值在CDH5中Impala安装时默认为256M,将其修改为2G,如图:


        很不幸,重启Impala后再次执行group by语句,依然不行,如图所示:


        干脆按照参数说明直接改为-1B,即不增加内存阈值,爱怎怎,如图:


        结果执行group by语句成功!


        结论:

        在以上测试环境中,Impala性能大大优于Hive!

你可能感兴趣的:(Impala、Hive性能简单对比测试)