您的位置:首页 > 数据库

hive简介 安装 hivesql hive开发 性能优化

2013-05-17 09:29 525 查看
3.1 hive简介

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供sql查询功能,可以将sql语句转换为MapReduce任务运行。

 优点:

学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用。

缺点:

不能支持实时响应,单条记录的更新操作不能实现,不支持半结构化数据,不支持索引和事务,hive sql比sql有很多制约。

适用:

数据一次写入,多次读,数据无须更新;离线分析。

3.2 hive的安装与配置(hive0.9)

在Hadoop已安装的前提下,我们需要经历以下步骤才能完成hive的安装。

第一步:

(1)在hadoop集群中任选一台安装一个关系型数据库用以存放hive的元数据,可选mysql,oracle,sqlserver等,本集群用的是mysql。

(2)在mysql上建立hive的metadata数据库

172.16.18.191:3306/hive

第二步:

(1)在hdfs上建立hive的数据仓库目录

(2)解压hive0.9到191的任一目录,修改配置文件,修改系统环境变量

(3)启动hiveserver

3.3 hive sql

Create / drop / describe table:

create table ssp_impr_log(id string,cycle_id string,publisher_id string,ad_zone_id string,advertiser_id string,campaign_id string,ad_id string,ad_type string,buy_type string,cost_type string,access_time string,ip string,user_id string,status string,area_code
string,matched_area_code string)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;

create table ssp_test_result(campaign_id string,record_count int)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;

Load data:

load data local inpath '/data/liujun/IMPR_LOG_20130509.txt' into table ssp_impr_log;

Select / insert

insert into table ssp_test_result select t.campaign_id,count(t.id) from ssp_impr_log t group by t.campaign_id;

3.4 hive开发、性能优化

3.4.1 hive开发(和jdbc一样)

//获取连接

Connection conn = HiveOperator.getHiveConnection();

public static Connection getHiveConnection() {

  if(conn == null){

   try {

    Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");

   } catch (ClassNotFoundException e) {

    log.error(new Date()+":无法加载数据库驱动");

    System.exit(1);

   }      

   try {

    conn = DriverManager.getConnection(GenericMethod.getProperties().getProperty("hive.url"), "", "");

   } catch (SQLException e) {

    log.error(new Date()+":hive连接初始化失败"+GenericMethod.getProperties().getProperty("hive.url"));

   }

  }  

  return conn;

 }

//创建会话

Statement stmt = conn.createStatement();

//构建sql

String processHql=param.get("incrImprSql");

//执行sql

stmt.execute(processHql);

//关闭连接

stmt.close();

3.4.2 性能优化

(1)创建分区表,select的时候用分区做where条件,缩小结果集从而提升效率,分区表有静态分区和动态分区之别,hive 0.6之前不支持动态分区。其实分区就是分文件夹。但是分区不能过多,分区后每个文件不能过小。

(2)sql 优化

Join是小表在前,大表在后,尽量不用order by等等。

(3)调整数据存储格式

Rcfile 行列存储相结合方式,节省磁盘空间,提高查询响应,但是用按列存储后用sqoop导出到数据库有问题,而且数据加载比较麻烦。

Text file 按行存储文本文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Hive 性能优化