zoukankan      html  css  js  c++  java
  • hive 属性随笔记录

    set hive.mapred.mode=strict;        //设置hive执行模式,默认为nonstrict(非严格模式),这里设置为严格模式
    
    set hiveconf:hive.cli.print.current.db=true;        //显示当前数据库的名称, 默认是false,这里开启
    
    set hive.cli.print.header=true; 查询表数据的时候,显示字段名称,默认是false,这里开启
    
    动态分区属性
    set hive.exec.dynamic.partition.mode=nonstrict            //查看动态分区模式,默认是strict,也就是必须要有一个静态分区,设置为nonstrict,表示允许所有的分区都是动态的
    set hive.exec.dynamic.partition=true            //开启动态分区,默认true,也就是设置为strict模式。
    set hive.exec.max.dynamic.partitions=1000        //最大动态分区数,默认1000
    set hive.exec.max.dynamic.partitions;    //一个个动态分区可以创建的最大动态分区个数,默认是1000
    set hive.exec.max.created.files;    //全局可以创建的最大文件个数,默认100000
    hive.exec.max.dynamic.partitions.pernode=100//默认是100
    
    set hive.exec.mode.local.auto=true; //运行时尝试以本地模式运行操作,否则,都会以MapReduce运行,尽量设置为true,默认值false。
    
    set hive.auto.convert.join; //在进行map join操作时,把小表缓存到内存,加快MapReduce速度,默认是true。
    set hive.mapjoin.smalltable.filesize;  //在进行小表优化到内存时,指定小表的大小,默认是25000000。不支持又外连接和全外连接。
    
    分类合并连接(sort-merge JOIN) 分桶表的优化参数
    set hive.optimize.bucketmapjoin; //设置为true,默认是false
    set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat; //默认值是 org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
    set hive.optimize.bucketmapjoin=true;  //设置为true,默认是false
    set hive.optimize.bucketmapjoin.sortedmerge=true;  //设置为true,默认是false
    
    hive中的排序
    order by:全局排序,所有的数据通过一个reduce进行排序。
    sort by:局部排序,在每一个reduce内部进行排序,asc是默认是升序排序,desc是降序排序。
    distribute by:控制map的输出在reduce中是如何划分的。在写sql的时候,需要在sort by语句之前。
    
    hive优化:
    使用explain进行分析
    1、limit调整
    set hive.limit.optimize.enable=true; //在使用limit的时候,通常都是全表扫描在返回需要的几行数据,通过这个值,可以对源数据进行抽样,默认是false。
    set hive.limit.optimize.limit.file=20; //扫描的文件数量,默认是10.
    
    2、并行执行
    set hive.exec.parallel=true;   //开启并行执行。默认是false。
    
    3、hive的严格模式
    如果 hive.mapred.mode值设置为strict,可以禁止三种类型的查询:
    (1)对于分区表,除非where语句中含有分区字段过滤条件来限制范围,否则是不允许执行的。
    (2)对于使用了order by语句的查询,要求必须使用limit语句。
    (3)限制笛卡尔积的查询。
    
    4set hive.exec.reducers.bytes.per.reducer; //reduce任务处理的数据量大小,来确定任务个数,默认是256000000字节(244M)
    
    5set hive.exec.reducers.max=1009;  //最大的reduce个数,默认是1009。
    6set hive.mapred.reduce.tasks.speculative.execution=true; //hive的推测执行,默认是true,在大数量而且需要执行长时间的map或者reduce,开启这个将会造成大量的浪费,同时,在hadoop的mapred配置文件也可以开启推测执行。
    7、虚拟化
    (一种用于将要进行划分的输入文件名,另外一种用于文件的块偏移量以及行偏移量。
    set hive.exec.rowoffset=true;  //默认是false
    
    8、开启中间压缩
    set hive.exec.compress.intermediate=false; //默认是false
    9set hive.exec.compress.output=true;//输出压缩,如果在mapred配置,可以配置mapred.output.compress为true。
    
    
    
    
    序列文件sequence的三种压缩方法:NONE,RECODE,BLOCK,默认是recode(记录基本),通常来说,block级别压缩性能最好而且是可以分割的。
    
    set hive.archive.enabled=true; //开启存档分区
    alter table  table_name archive partition(clumun);把一个分区表转换成存档表。
    
    
    
    
    
    Streaming
    1、恒等变换
    使用/bin/cat将传递给它的值直接输出
    eg:
    create table a(col1 int,col2 int) row format delimited fields terminated by '	';
    insert into a values (4,5),(3,2);
    select transform (col1,col2) using '/bin/cat' as newA,newB from a;
    
    2、改变类型
    select transform (col1,col2) using '/bin/cat' as (newA int,newB double) from a;
    3、投影变换
    使用cut命令提取或者映射出特定的字段。
    select transform (col1,col2) using '/usr/bin/cut -f1' as newA ,newB from a;
    
    
    set hive.start.cleanup.scratchdir=true; //每次重启hiveserver2服务时清理掉临时目录,默认是false。
    
    
    安全:
    1set hive.warehouse.subdir.inherit.perms=true; //设置表目录应继承仓库或者数据库目录的权限,而不是使用从dfs umask 派生的权限创建,应该设置为true,默认是true,在3.0.0版本删除了此属性。
    2set hive.metastore.authorization.storage.checks=true; //如果用户没有权限删除表底层的文件,会阻止用户来删除这样的表,参数默认是false,应该设置为true。
    3set hive.metastore.execute.setugi=true;  //在安全模式下执行时,hive元数据的存储尽可能的将该值设置为true,默认是true。
    
    
    权限管理:
    1set hive.security.authorization.enabled=true; //开启授权模式。默认是false
    2set hive.security.authorization.createtable.owner.grants=ALL; //表创建者的权限,默认是null。
    
    
    用户、组和角色
    给某个(yjt)用户赋予权限
    hive> grant create on database default to user yjt; //给用户yjt在default数据库下create权限
    给某个组赋予权限:
    hive> grant select on table test to group yjt; //给yjt这个组在test表授予select权限。
    角色
    创建角色:
    hive>create role yjt;
    hive>grant role yjt to user yjt;  //把用户添加到角色。
    hive>grant select on table test to role yjt;//授予查询权限给yjt角色
    
    Hive客户端安全
    <property>
            <name>hive.security.authorization.createtable.user.grants</name>  
            <value>user1,user2:select;user3:create</value> //在创建表时,给某些用户赋予权限。
    </property>    
    
    <property>
            <name>hive.security.authorization.createtable.group.grants</name>  
            <value>group1,group2:select;group3:create</value> //在创建表时,给某些组赋予权限。
    </property>    
    <property>
            <name>hive.security.authorization.createtable.role.grants</name>  
            <value>role1,role2:select;role3:create</value> //在创建表时,给某些角色赋予权限。
    </property>    
    
    <property>
            <name>hive.security.authorization.createtable.owner.grants</name>  
            <value>select,create</value> //在创建表时,给所有者的权限。
    </property>    
    
    
    上述的默认值全都为空。
    
    Hive zookeeper:
    <property>
            <name>hive.zookeeper.quorum</name>
            <value>master,slave1,slave2</value>
    </property>
    <property>
            <name>hive.support.concurrency</name> //开启hive的并发,一个ZooKeeper的实例必须启动并运行了默认配置单元锁管理器,支持读写锁
            <value>true</value>  
    </property>
    上述配置好以后,hive会对特定的查询自动启动获取锁,使用show locks查看当前的所有锁。
    锁的分类:共享锁和独占锁
    
    
    显示锁和独占锁
    hive> lock table a exclusive(独占的)    //创建一个显示锁(独占锁)
    hive> unlock table a;  //解锁
  • 相关阅读:
    sql语句之group_concat函数
    Yii2 PHPExcel在linux环境下导出报500错误
    使用 PuTTY 时遇到错误:“expected key exchange group packet from server”
    Yii2 执行Save()方法失败,却没有错误信息
    js
    导航切换到当前页的时候,会触发这个方法
    Yii2 场景scenario的应用
    Yii2 hasMany 关联后加条件
    设置Yii2发生错误返回json
    Exception 'ReflectionException' with message 'Class require does not exist'
  • 原文地址:https://www.cnblogs.com/yjt1993/p/11165285.html
Copyright © 2011-2022 走看看