首页 » Hive » 正文

Hive从入门到精通-第三篇

发表于: 大数据的那些坑-BigDataBugs · 2017-8-3 ·  19 views  ·  0 replies 

beeline

————

0.hive

$>hive –service cli //

1.hiveserver2

$>hive –service hiveserver & //启动hiveserver2 10000

2.beeline启动

$>beeline -u jdbc:hive2://localhost:10000/myhive

3.JDBC

Class.forName(…);

DriverMananger.getConnection(url,username,pass);

目录

—————–

外部表|管理表

—————–

1.删除元数据.

2.

分区表

—————-

create table … partitioned by()

动态分区:严格模式

beeline

————–

$>beeline -u jdbc:hive2://

$beeline>show tables ; //

map端连接

——————-

0.禁用cbo,启用hint(暗示)

$beeline>set hive.cbo.enable=true //过时了.

$beeline>set hive.auto.convert.join=true //默认开启了.

$beeline>set hive.mapjoin.smalltable.filesize=25000000 //设置map端连接的文件大小

1.select /*+ mapjoin(a) */ a.*,b.* from customers a left outer join orders b on a.id = b.cid ;

2.

order by  / sort by

———————

order by //全排序

sort by //对单个reduce进行排序.

设置reduce个数

——————-

set hive.exec.reducers.bytes.per.reducer=<number> //每个reduce处理的字节数,默认256000000

set hive.exec.reducers.max=<number> //reduce个数的最大值,默认1009

set mapreduce.job.reduces=<number> //reduce个数,默认1

map严格模式

——————–

order by时,是否必须使用limit语句指定数量。

$beeline>set hive.mapred.mode=strict //不推荐使用,推荐下方的三个属性

$beeline>hive.strict.checks.large.query=false //大型查询检查:无limit order by,

//Orderby without limit.

//No partition being picked up for a query against partitioned table.

//Note that these checks currently do not consider data size, only the query pattern.

$beeline>set hive.strict.checks.type.safety //默认true

$beeline>set hive.strict.checks.cartesian.product //默认true

$beeline>set hive.strict.checks.large.query=false //默认false

order by //全排序(所有reduce)

sort by //部分排序(在reduce)

distrubte by //相同自定义分区(相同字段值进入同一分区。)

等价于MR分区过程,保证具有相同数据的某个字段一定

进入同一分区,也就是进入同一reduce

cluster by //distribute by a sort by a 

—————

select * from orders o distribute by o.cid sort by o.id desc ;

类型转换

————–

cast(f as type); //类型转换函数

concat(,,,,,) //字符连接函数

Bucket表

—————

创建bucket表。

CREATE TABLE mybucks(id int,name string) CLUSTERED BY (id) INTO 2 BUCKETS ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' lines terminated by '\n' stored as textfile ;

load操纵不可以用于bucket表,可以使用insert。

INSERT OVERWRITE TABLE mybucks SELECT * FROM customers ;

表采样函数

—————-

1.关闭cbo的优化策略

$>set hive.cbo.enable=false ;

2.使用百分比随机采样tablesample函数

select * from customers tablesample(0.1 percent);

3.bucket采样

select * from mybucks tablesample(bucket 1 out of 2 on id) ;

union all

———————

将多个结果合并输出。

select id,name from customers union all select id,orderno from orders ;

从hive导出数据到本地

———————

1.使用hadoop get命令

hdfs dfs -get … .

2.insert overwriter local directory '…' select …

指定本地目录位置。

insert overwrite local directory '/home/centos/' select * from orders where cid is not null ;

索引

———————–

1.折半查找.

2.hive创建索引

create index idx_t4_province on table t4 (province) as 'bitmap' with deferred rebuild ;

3.删除索引

drop index idx_name on table customers; 

4.CREATE INDEX idx_id_customers_id ON TABLE customers (id) AS 'COMPACT' WITH DEFERRED REBUILD;

5.重建索引,在索引表中生成索引记录。

ALTER INDEX idx_customers_id ON customers REBUILD;

6.每次插入数据时,没有自动建立索引。需要再次rebuild.

7.显式索引信息

show formatted index on cusotmers ;

95页复杂类型

—————–

weblog

—————–

hive  —> MR

Split 

——————

App /user/centos/data/ncdc /user/centos/data/out

              /user/centos/data/ncdc 

select * from customers ;

MapReduce

——————-

100M(80%)

Map : map -> partition -> sortAndSpill() –> Combiner

hive.exec.compress.output=false //输出文件是否压缩,默认false

hive.exec.compress.intermediate=false //启用中间文件是否压缩,默认false

hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec //设置压缩编解码器,默认空

hive.intermediate.compression.type //压缩类型

hive调优

——————

1.使用explain解析查询结果

$beeline>explain [extended] select sum(id) from customers ; 

2.

3.

4.

5.

limit优化

——————–

1.

  <property>

    <name>hive.limit.optimize.enable</name>

    <value>false</value>

    <description>Whether to enable to optimization to trying a smaller subset of data for simple LIMIT first.</description>

  </property>

  

  <property>

    <name>hive.limit.row.max.size</name>

    <value>100000</value>

    <description>When trying a smaller subset of data for simple LIMIT, how much size we need to guarantee each row to have at least.</description>

  </property>

  <property>

    <name>hive.limit.optimize.limit.file</name>

    <value>10</value>

    <description>When trying a smaller subset of data for simple LIMIT, maximum number of files we can sample.</description>

  </property>

  <property>

    <name>hive.limit.optimize.fetch.max</name>

    <value>50000</value>

    <description>

      Maximum number of rows allowed for a smaller subset of data for simple LIMIT, if it is a fetch query. 

      Insert queries are not restricted by this limit.

    </description>

  </property>

  <property>

    <name>hive.limit.pushdown.memory.usage</name>

    <value>0.1</value>

    <description>

      Expects value between 0.0f and 1.0f.

      The fraction of available memory to be used for buffering rows in Reducesink operator for limit pushdown optimization.

    </description>

  </property>

  <property>

    <name>hive.limit.query.max.table.partition</name>

    <value>-1</value>

    <description>

      This controls how many partitions can be scanned for each partitioned table.

      The default value "-1" means no limit.

    </description>

  </property>

hadoop

——————-

1.local

nothing!

不需要启动单独进程。

所有的java程序都在一个jvm中运行。

2.伪分布式

3.完全分布式

本地模式:

————————

hive.exec.mode.local.auto=true //

hive.exec.mode.local.auto.inputbytes.max=134217728 //

hive.exec.mode.local.auto.input.files.max=4 //

JVM重用

————————

[不推荐]

SET mapred.job.reuse.jvm.num.tasks=5; //在mapreduce-1使用,yarn不适用。

com.it18zhang.myhadoop273_1211.join.reduce.App

[yarn]

//mapred-site.xml

mapreduce.job.ubertask.enable=false //启用当个jvm按序一些列task,默认false

mapreduce.job.ubertask.maxmaps=9 //最大map数>=9,只能调低。

mapreduce.job.ubertask.maxreduces=1 //目前只支持1个reduce.

mapreduce.job.ubertask.maxbytes=128m //

并发执行

————————-

explain解释执行计划,对于没有固定依赖关系的task,

可以进行并发执行。

hive.exec.parallel=true //启用mr的并发执行,默认false

hive.exec.parallel.thread.number=8 //设置并发执行的job数,默认是8.

map端连接

————————

SET hive.auto.convert.join=true; //

SET hive.mapjoin.smalltable.filesize=600000000; //文件<= 指定值时可以启用map连接。

SET hive.auto.convert.join.noconditionaltask=true; //不需要在select中使用/*+ streamtable(customers) */暗示.

map bucket端连接

————————-

SET hive.auto.convert.join=true; –default false //

SET hive.optimize.bucketmapjoin=true; –default false //

SkewJoin

————————-

倾斜连接.

SET hive.optimize.skewjoin=true; //开启倾斜优化

SET hive.skewjoin.key=100000; //key量超过该值,新的key发送给未使用的reduce。

SET hive.groupby.skewindata=true; //在groupby中使用应用数据倾斜优化,默认false.

analyze

———————–

对表、partition,column level级别元数据进行统计,作为input传递给

CBO(cost-based Optimizer),会选择成本最低查询计划来执行。

analyze table customers compute statictics ;

desc extended customers ;

beeline

—————————

beeline -u jdbc:hive2:// //运行在本地模式下,没有启动hiveserver2服务器。

create table tt (id int,hobbies array<String>,addr struct<province:string,city:string,street:string>,scores map<string,int> ) row format delimited fields terminated by ' ' collection items terminated by ',' map keys terminated by ':' lines terminated by '\n' stored as textfile ;

insert into tt values(1,array('1','2','3'),struct('province':"hebei",'city':'baoding','street':'renmin'),map('a':100,'b':200));

create table stru(id int,a struct<p1:string,p2:string>) row format delimited ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':' STORED AS TEXTFILE;

create table map(id int ,a map<string,int>) row format delimited fields terminated by ' ' collection items terminated by ',' map keys terminated by ':' lines terminated by '\n' stored as textfile ;

本文链接: http://www.bigdatabugs.com/
0 喜欢+
«上一篇: :下一篇»

相关文章

Hive从入门到精通-第四篇

hive ———- 1.事务支持 stored as tex...

Hive从入门到精通-第二篇

hive直接执行sql语句 ————&#...

Hive从入门到精通-第一篇

Hive —————- The Apache H...

  1. 还没有任何评论,你来说两句吧

留个评论