hive的使用03

1.hive中的四种排序

  1.1 order by :对全局进行排序,只能有一个reduce

    select * from hive.employee order by id;

    

  1.2 sort by :对每一个reduce内部数据进行排序,全局结果集没有排序

    set mapreduce.job.reduces=3;设置reduce的个数为3

    

    insert overwrite local directory ‘/opt/data/employee_sort_by‘
      row format delimited fields terminated by ‘\t‘ collection items terminated by ‘\n‘
      select * from hive.employee sort by dept_id;

    

  1.3 distribute by :对数据进行分区,结合sort by进行合并使用,类似于mapreduce中的mapreduce中的partition,必须在sort by 之前

    insert overwrite local directory ‘/opt/data/employee_distribute_by‘
      row format delimited fields terminated by ‘\t‘ collection items terminated by ‘\n‘
      select * from hive.employee distribute by dept_id sort by id asc;

    

  1.4 cluster by:当distribute by 和 sort by 的字段相同时,可以使用cluster by 代替

2.使用udf自定义函数

  2.1 编写udf函数

    继承extends UDF

    编写evaluate 方法  

  2.2 导入自定义函数到hive函数库

    方法一:

      add jar /opt/data/jars/my_lower.jar;
      create temporary function my_lower as "com.ibeifeng.hive.udf.LowerUdf";

      

      

    方法二:

      create function self_lower as ‘com.ibeifeng.hive.udf.LowerUdf‘ using jar ‘hdfs://life-hadoop.life.com:8020/user/yanglin/data/jars/my_lower.jar‘;

      

      

3.hiveserver2的使用

  3.1 启动hiveserver2  bin/hiveserver2

    

  3.2 使用beeline进行连接

    !connect jdbc:hive2://life-hadoop.life.com:10000 yanglin life@one

    

4.数据压缩

  4.1 map 输出结果的压缩

      set mapreduce.map.output.compress =true

      set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec

  4.2 reduce 输出结果的压缩

      set mapreduce.output.fileoutputformat.compress=true

      set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec

  4.3 map 输入数据的压缩

      以压缩格式的文件存储数据(例如:orc,parquet)

      create table if not exists hive.employee_orc_snappy (id int,name string,job string,manager_id int,apply_date string,salary double,
        reward double,dept_id int)

         row format delimited fields terminated by ‘\t‘
        stored as orc tblproperties("orc.compress"="SNAPPY");

      其中该表的数据存储格式为orc,文件压缩格式为snappy

5.hive调优

  5.1 修改 hive.fetch.task.conversion参数,使尽可能少用mapreduce

    <!--尽可能的少用mapreduce-->
        <property>
          <name>hive.fetch.task.conversion</name>
          <value>more</value>
        </property>

  5.2 使用大表拆分为小表和子表

  5.3 使用外部表分区表

  5.4 对表的数据的存储格式使用orc和parquet,并使用snappy压缩

  5.5 对sql进行优化

    common join / shuffle join / reduce join : 连接发生在reduce task 阶段

      使用于大表和大表之间,每个表中的数据都从文件中读取

    map join : 连接发生在map task 阶段

      使用于小表和大表之间,大表的数据从文件中读取,小表的数据通过distributedCache加载到内存中

    注:可以通过设置 hive.auto.convert.join = true 让程序自动识别使用map join还是reduce join。

    SMB join :sort-merge-bucket join 是对reduce join 的一种优化

      在创建表时声明[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS],且两个表的分区字段要一致。

      set hive.auto.convert.sortmerge.join=true;

      set hive.optimize.bucketmapjoin = true;

      set hive.optimize.bucketmapjoin.sortedmerge = true;

  5.6 设置job并行执行

    set hive.exec.parallel = true

    set hive.exec.parallel.thread.number = 8    建议10~20,一般不用超过20

  5.7 设置jvm重用

    set mapreduce.job.jvm.numtasks = 1   一般不用超过9

  5.8 设置reduce的个数

    set mapreduce.job.reduces = 1

  5.9 设置推测执行

    set hive.mapred.reduce.tasks.speculative.execution = true

    set mapreduce.map.speculative = true

    set mapreduce.reduce.speculative = true

  5.10 设置map的个数

    set hive.merge.size.per.task = 256000000

  

  

时间: 2024-07-30 03:21:02

hive的使用03的相关文章

第55课:实战Hive分析搜索引擎的数据

一.获取数据 搜狗实验室为我们提供了用户使用搜狗搜索引擎查询的日志,下载地址为 http://download.labs.sogou.com/dl/q.html 本文选择下载精简版. 数据格式如下: 二.上传数据至HDFS 建立hdfs目录 [email protected]:~# hdfs dfs -mkdir -p /library/sougou 上传文件 [email protected]:~# hdfs dfs -put SogouQ1.txt /library/sougou [emai

Hadoop2.3、 Hbase0.98、 Hive0.13架构中Hive的安装部署配置以及数据测试

简介: Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析. 1, 适用场景 Hive 构建在基于静态批处理的Hadoop 之上,Hadoop 通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销.因此,Hive 并不能够在大规模

CDH quick start VM 中运行wordcount例子

需要注意的事情: 1. 对于wordcount1.0 ,按照http://www.cloudera.com/content/cloudera/en/documentation/HadoopTutorial/CDH4/Hadoop-Tutorial/ht_usage.html#topic_5_2 执行. 2.hadoop fs -mkdir /user/cloudera 这条语句意思是在hadoop文件系统下创建新文件夹.在终端中执行"cd /user/cloudera"是错误的,会出现

Hive入门到剖析(一)

1 Hive简介 1.1 Hive定义 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 本质是将SQL转换为MapReduce程序. 1.2 为什么使用Hive 1.面临的问题 人员学习成本太高 项目周期要求太短 我只是需要一个简单的环境 MapReduce  如何搞定 复杂查询好难 Join如何实现 2.为什么要使用Hive 操作接口采用类SQL语法,提供快速开发的能力 避免了去写MapReduce,减少开发人员的学习成本 扩展

hive支持sql大全

转自:http://www.aboutyun.com/thread-7316-1-1.html 一.关系运算:1. 等值比较: = 语法:A=B 操作类型:所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE:否则为FALSE 举例:hive>select 1 from lxw_dual where 1=1; 2. 不等值比较: <> 语法: A <> B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL:如果表达式A与

Hive 外部表 分区表

  之前主要研究oracle与mysql,认为hive事实上就是一种数据仓库的框架,也没有太多另类,所以主要精力都在研究hadoop.hbase,sqoop,mahout,近期略微用心看了下hive.事实上hive还是比我想象中好用的多,心里有点点暗爽,不论是与hadoop的衔接,还是在对外查询分析,定期hsql生成报表方面,都很方便.能够不用mapreduce.直接用hive生成报表. 真是方便.  Hive 提供两者表的两种使用方式,一种是内部表(托管表),第二种就是外部表. 对于两种表的使

Hive 内建操作符与函数开发——深入浅出学Hive

第一部分:关系运算 Hive支持的关系运算符 ?常见的关系运算符 ?等值比较: = ?不等值比较: <> ?小于比较: < ?小于等于比较: <= ?大于比较: > ?大于等于比较: >= ?空值判断: IS NULL ?非空判断: IS NOT NULL ?LIKE比较: LIKE ?JAVA的LIKE操作: RLIKE ?REGEXP操作: REGEXP ?等值比较: = 语法:A=B 操作类型:所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE:否则为

《Programming Hive》读书笔记(二)Hive基础知识

阅读方法:第一遍读是浏览,建立知识索引,因为有些知识不一定能用到,知道就好.感兴趣的部分可以多研究. 以后用的时候再详细看,并结合其他资料一起. Chapter 3.Data Types and File Formats 原始数据类型和集合数据类型 Select出来的数据,列与列之间的分隔符可以指定 Chapter 4.HiveQL:Data Definition 创建数据库,创建和改动表,分区的操作 Chapter 5.HiveQL:Data Manipulation 1 加载数据和导出数据,

4.安装hive

下载安装包并解压安装元数据库配置hive添加hvie环境变量修改hive-env.sh修改hive配置文件初始化metastore使用hive cli配置hivemestore配置hiveserver2连接使用beeline服务器配置和客户端配置 本系列的前几篇目录都是快速安装环境,因为我在家需要一套环境来学习.更详细的教程请看. 下载安装包并解压 到http://hive.apache.org/downloads.html 下载安装包,这里选择2.1.1版本. 以hive用户解压到/opt/下