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

  

  

hive的使用03的更多相关文章

  1. Flume1.9.0的安装、部署、简单应用(含分布式、与Hadoop3.1.2、Hbase1.4.9的案例)

    目录 目录 前言 什么是Flume? Flume的特点 Flume的可靠性 Flume的可恢复性 Flume的一些核心概念 Flume的官方网站在哪里? Flume在哪里下载以及如何安装? 设置环境变 ...

  2. CDH quick start VM 中运行wordcount例子

    需要注意的事情: 1. 对于wordcount1.0 ,按照http://www.cloudera.com/content/cloudera/en/documentation/HadoopTutori ...

  3. Hive 笔记

    DESCRIBE EXTENDED mydb.employees  DESCRIBE EXTENDED mydb.employees DESCRIBE EXTENDED mydb.employees ...

  4. Hive函数大全

    一.关系运算: 1. 等值比较: = 语法:A=B 操作类型:所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE:否则为FALSE 举例: hive> select 1 from l ...

  5. 【转】Hive 基础之:分区、桶、Sort Merge Bucket Join

    Hive 已是目前业界最为通用.廉价的构建大数据时代数据仓库的解决方案了,虽然也有 Impala 等后起之秀,但目前从功能.稳定性等方面来说,Hive 的地位尚不可撼动. 其实这篇博文主要是想聊聊 S ...

  6. Hive时间操作[转]

    时间字段格式化 from_unixtime(unix_timestamp(VisitTime),'yyyy-MM-dd') 日期函数UNIX时间戳转日期函数: from_unixtime语法:   f ...

  7. hive修改 表/分区语句

    参考 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable% ...

  8. 调用javaAPI访问hive

    jdbc远程连接hiveserver2 2016-04-26 15:59 本站整理 浏览(425)     在之前的学习和实践Hive中,使用的都是CLI或者hive –e的方式,该方式仅允许使用Hi ...

  9. Spark入门实战系列--5.Hive(上)--Hive介绍及部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...

随机推荐

  1. 《Git教程-廖雪峰》学习笔记

    一.创建版本库 ①初始化一个Git仓库:git init ②添加文件到Git仓库:1.git add<file> ;  2.git commit 二.时光机穿梭 ①查看工作区状态,文件是否 ...

  2. 6. support vector machine

    1. 了解SVM 1. Logistic regression 与SVM超平面 给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类.如果用x表示数据点,用y表示类别( ...

  3. ASP.NET TextBox 当鼠标点击后清空默认提示文字[转]

    前台文本框里添加下面2个事件属性: OnFocus="javascript:if(this.value=='提示文字') {this.value=''}" OnBlur=" ...

  4. 如何设置jvm内存

    本文向大家简单介绍一下进行JVM内存设置几种方法,安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JVM),其中JDK内另含一个JR ...

  5. Centos6.5 python2.7连接mysql数据库

    1.环境是centos6.5 32位系统,python版本是2.7.12,mysql版本是5.5.22.准备好所需压缩包,MySQL-python-1.2.4b4.tar.gz  pip-6.0.7. ...

  6. div中iframe高度自适应问题

    网页分为上.中.下三部分,上.下高度固定中间高度自适应:中间分为左.右两部分,左边宽度固定,右边宽度自适应.现在右侧div是宽度和高度都是自适应,右侧div里有个IFrame,想让IFrame自适应外 ...

  7. 第九章伪代码编程过程 The PseudoCode Programming Process

    目录: 1.创建类和子程序的步骤概述 2.伪代码 3.通过伪代码编程过程创建子程序 4.伪代码编程过程的替代方案 一.创建类和子程序的步骤概述 (1)创建一个类的步骤 1.创建类的总体设计 2.创建类 ...

  8. 当display=none时,元素和子元素高度为0的解决办法

    在前端中为了某种需要,我们需要获取display=none的元素或者子元素的实际高度来进行某些处理,然而html对display=none的元素和子元素是不进行渲染的,如果我们没有规定这些元素的高度那 ...

  9. easyUI+springMVC的DataGrid-demo

    DataGrid (一).搭建springMVC: 错误:无法访问HTML页面,HTTP Status 404- 原因:springMVC拦截了静态资源的访问 解决方案:方案①:(web.xml下)& ...

  10. 今天无意发现jquery的一个以前的误导

    本文提供即刻提升你的脚本性能的十个步骤.不用担心,这并不是什么高深的技巧.人人皆可运用!这些技巧包括: 使用最新版本 合并.最小化脚本 用for替代each 用ID替代class选择器 给选择器指定前 ...