美文网首页
调参指南

调参指南

作者: 一个菜鸟的自我修养 | 来源:发表于2022-06-30 15:27 被阅读0次

'''
set hive.cli.print.header=``true``;

set hive.``fetch``.task.conversion=more;

--打印列名

set hive.``fetch``.task.conversion=more; ``--开启了Fetch任务,所以对于上述简单的列查询不在启用

set hive.cli.print.row.``to``.vertical=``true``; ``--开启行转列功能, 前提必须开启打印列名功能

set hive.cli.print.row.``to``.vertical.num=1; ``--设置每行显示的列数

set row format delimited fields terminated ``by '\t'``;

set hive.execution.engine=tez; ``--设置hive执行引擎

set mapred.reduces.tasks=2; ``--指定reduce的任务书

set hive.m.merge.mapfiles=``true``;``--合并小文件

set hive.optimize.cp=``true``; ``--列裁剪

set hive.optimize.prunner=``true``; ``--分区表裁剪

set hive.limit.optimeize.enable=``true``; ``--优化Limit n语句

set hive.limit.row.``max``.``size``=1000000;

1417632547990

1417693025660

set hive.limit.optimize.limit.file=10; ``--最大文件数

--job的输入数据大小必须小于参数:

set hive.``exec``.mode.``local``.auto.inputbytes.``max``=134217728; ``--(默认128M)

set hive.``exec``.mode.``local``.auto.tasks.``max``=4; ``--(默认4)job的map数必须小于参数:

set hive.``exec``.mode.``local``.auto=``true``; ``--(默认为false)设置为本地模式,job的reduce数必须为0或者1

set hive.mapred.``local``.mem=89; ``--本地模式启动的JVM内存大小

set hive.``exec``.parallel=``true``;``--默认为false; --并发执行:

set hive.``exec``.parallel.thread.number=8;

set hive.``exec``.mode.``local``.auto=``true``;

清空表

insert overwrite ``table t_table1 ``select * ``from t_table1 ``where 1=0;

create table sample ple_dis_02 ``like sample_dis_01;

--开启动态分区特性

set hive.``exec``.``dynamic``.partition=``true``;

set hive.``exec``.``dynamic``.partition.m.mode=nonstrict;

set hive.``exec``.``dynamic``.partitions.pernode=20; ``--参数指的是每个节点上能够生成的最大分区。这个在最坏情况下应该是跟最大分区一样的值

set hive.``exec``.``dynamic``.partitions.partitions=20; ``--指定总共的最大的动态分区数

set mapred.reduces.tasks=2; ``--指定reduce的任务书

set hive.m.merge.mapfiles=``true``; ``--合并小文件

--这里注意要把select语句中要把distribute的key也select出来

insert overwrite ``table sample_dis_04 partition(prov)

select user_id,

name``,

prov_desc,

prov_desc ``as prov_desc_dis

from sample_dis_01

distribute ``by prov_desc;

------------------------------------------------------------------

desc table``; ``--查看表结构信息

desc formatted ``table``;

show ``table like '*name*'``; ``--模糊搜索表

show partition table_name; ``--参看表分区信息

select table_column ``from table_name ``where partition_name=``'2014-01-25'``; ``--根据分区查询数据

alter table tmp_h02_click_log_baitiao ``drop partition(dt=``'2014-03-01'``); ``--删除分区

LOAD DATA ``LOCAL INPATH ``'dim_csl_rule_config.txt' OVERWRITE ``INTO TABLE dim.dim_csl_rule_config; ``--从文件加载数据仅表(OVERWRITE覆盖,追加不需要OVERWRITE关键字)

INSERT OVERWRITE ``TABLE test_h02_click_log PARTITION(dt) ``--从查询语句给table插入数据

select * ``from stage.s_h02_click_log ``where dt=``'2014-01-25' LIMIT 1000;

--导出数据到文件

INSERT OVERWRITE DISECTORY ``'/tmp/csl_rule_cfg' SELECT a.* ``from dim.dim_csl_rule_config a;

hive -e ``"select day_id,pv,uv,ip_count,click_next_count,second_bounce_rate,return_visit,pg_type

from tmp.tmp_h02_click_log_baitiao_ag_sum where day_id in('2014-03-06','2014-03-07');"

>/home/jrjt/test/testan/baitiao.dat

--自定义UDF函数

1.继承UDF类

2.重写evaluate方法

3.把项目打成jar包

4.hive中执行命令``add jar /home/jrjt/dwetl/PUB/UDF/udf/GetProperty.jar

5.创建函数``create temporary function get_pro ``as 'jd.Get_Property' //jd.Get_Property为类路径

--查询显示列明及行转列显示

set hive.cli.print.header=``true``;//打印列名

set hive.cli.print.row.``to``.vertical=``true``; //开启行装列功能,前提必须开启打印列名功能

set hive.cli.print.row.``to``.vertical.num=1;//设置每行显示的列数

dfs -ls /``user``/hive/warehouse/table02; ``--查看hdfs文件信息

dfs -du hdfs://namenode.jd.com:54310/``user``/jrjt/warehouse/stage.db/s_h02_click_log; ``--查看某个任务,不在hive shell中执行

dfs -get /``user``/jrjt/warehouse/ods.db/o_h02_click_log_i_new/dt=2014-01-21/000212_0/home/jrjt/testan/;

head -n 1000 文件名>文件名

dfs -du /``user``/jrjt/warehouse/tmp.db/tmp_h02_click_log/dt=2014-02-15; ``--查看文件大小

dfs -rm /``user``/jrjt/warehouse/tmp.db/tmp_h02_click_log/dt=2014-02-15; ``--删除文件

dfs -cp /``user``/jrjt/warehouse/tmp.db/tmp_h02_click_log/dt=2014-02-08 ``--hive命令移动表数据到另外一张表目录下并添加分区

/``user``/jrjt/warehouse/ods.db/o_h02_click_log/;

hadoop job -kill job_201403041453_58315 ``--杀死某个任务,不在hive shell中执行

[http://172.17.41.38/jobtracker.jsp ](http://172.17.41.38/jobtracker.jsp%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0) ``--hive-wui路径

-----------------------------------------------------------------------------------

--hive 命令行操作

--执行一个查询,在终端上显示mapreduce的进度,执行完毕后,最后把查询结果输出到终端上,接着hive进程退出

--不会进入交互模式

hive -e ``'select table_column from table'

hive -S ``'...' --终端上的输出不会有mapreduce的进度,执行完毕,只会把查询结果输出到终端上。这个静音模式很实用

hive -S -e ``'select table_column from table' --用于第三方程序调用,第三方程序调用,第三方程序通过hive的标准输出获取结果集

hive -f hive_sql.sql ``--执行sql文件

-------------------------------------------------------------------------------------------

hive上操作hadoop文件基本命令

--插入数据sql、导出数据sql

insert``语法格式为:

--基本的插入语句

INSERT OVERWRITE ``TABLE table_name [PARTITION(partcol1=var1,partcol2=val2)]

select * ``from table``;

--对多个表进行插入操作

FROM test_table

insert overwrite ``table test_insert1 ``select key

insert overwrite ``table test_insert2 ``select value;

/*

--insert的时候,from子句即可放在select 子句后面,也可以放在insert 子句前面。

--hive 不支持用insert语句一条一条的进行插入操作,也不支持update操作。

--数据是以load的方式加载到建立好的表中。数据一旦导入就不可以修改

*/

INSERT OVERWRITE [``LOCAL``] DIRECTORY directory ``SELECT ... ``FROM ... ``--通过查询将数据保存到filesystem

insert overwrite directory ``'/user/zhangxin/export_test' select value ``from test_table; ``--导入数据到本地目录

--同一个查询结果可以同时插入到多个表或者多个目录中:

from test_insert1

insert overwrite ``local directory ``'/home/zhangxin/hive' select * ;

--mapjoin的使用应用场景:

1.关联操作中有一张表非常小

2.不等值的连接操作

select /*+mapjoin(A)*/ f.a,f.b ``from A t ``join B f ``on``(f.a=t.ftime=20110802)

---------------------------------------------------------------------------

--perl 启动任务

perl /home/jrjt/dwetl/APP/APP/A_H02_CLICK_LOG_CREDIT_USER/bin/a_h02_click_log_credit_user.pl

APP_A_H02_CLICK_LOG_CREDIT_USER_20140215.dir >

& /home/jrjt/dwetl/LOG/APP/20140306/a_h02_click_log_credit_user.pl.4.log

--查看perl进程

ps -ef|grep perl

--导出白条数据

hive -e ``"select day_id,pv,uv,ip_count,click_next_count,second_bounce_rate,return_visit,pg_type

from tmp.tmp_h02_click_log_baitiao_ag_sum where day_id like '2014-03%';" >

/home/jrjt/testan/baitiao.xlsx

--hive添加字段

alter table tmp_h02_click_log_baitiao_ag_sum ``add columns(current_session_timelength_count ``bigint comment ``'页面停留时长'``);

--hive开启简单模式不启用mr

set hive.``fetch``.task.conversion=more;

--以json格式输出执行语句回读取的input table和input partition信息

explain dependency query;

explain dependency query;

--压缩文件(对map输出进行压缩,可以减少数据传输量)

set mapred.compress.map.``output``=``true``;

---------------------------------------------------------------------------

--Hive优化

hive.optimize.cp=``true``; ``--列裁剪

hive.optimize.prunner=``true``; ``--分区表裁剪

hive.limit.optimeize.enable=``true``; ``--优化Limit n语句

hive.limit.row.``max``.``size``=1000000;

hive.limit.optimize.limit.file=10;``--最大文件数

--一、本地模式(小任务)

--需要满足一下条件

hive.``exec``.mode.``local``.auto.inputbytes.``max``=134217728;(默认128M) ``--job的输入数据大小必须小于参数:

hive.``exec``.mode.``local``.auto.tasks.``max``=4;(默认4) ``--job的map数必须小于参数:

hive.``exec``.mode.``local``.auto=``true``; ``--job的reduce数必须为0或者1

hive.mapred.``local``.mem=89; ``--本地模式启动的JVM内存大小

--二、并发执行:

hive.``exec``.parallel=``true``;``--默认为false;

hive.``exec``.parallel.thread.number=8;

--三、Strict Mode;(严格模式)

hive.mapred.mode=``true``;

--严格模式下不允许执行一下查询:

--分区表上没有指定分区

--没有limit限制的order by语句

--笛卡尔积:join时没有on语句

--四、动态分区

hive.``exec``.``dynamic``.partition.mode=strict; ``--该模式下必须指定一个静态分区

hive.``exec``.``max``.``dynamic``.partitions=1000;

hive.``exec``.``max``.``dynamic``.paratitions.pernode=100; ``--在每个mapper/reducer节点允许创建的最大分区数

dfs.datanode.``max``.xceivers=8192; ``--允许datanode打开多少个文件

--五、推测执行

mapred.map.tasks.sepeculative.execution=``true``;

mapred.reduce.tasks.speculative.execution=``true``;

hive.mapred.reduce.tasks.speculative.execution=``true``;

--六、Single MapReduce MultiGroup By

hive.multigroupby.singlemar=``true``;``--当多个Group By语句有相同的分组列,则会优化为一个MR任务

--七、

hive.``exec``.rowoffset;``--是否提供虚拟行

--八、分组

--两个聚集函数不能有不同的distinct列,以下表达式是错误的:(select语句中只能有group by的列或者聚集函数)

insert overwrite ``table pv_gender_agg ``select pv_users.gender,``count``(``distinct pv_users.user_id),``count``(``distinct pv_users.ip)

from pv_users ``group by pv_users.gender;

--九

hive.map.aggr=``true``; ``--在map中会做部分聚焦操作,效率更高但需要更多的内存。

hive.groupby.mapaggr.checkinterval;``--在Map端进行聚合操作的条数数目

--十

hive.groupby.skewindata=``true``;``--数据倾斜是负载均衡,当选项设定为true,生成的查询计划会有两个

--MRJob。第一个MRJob中,Map的输出结果集合会随时分布到Reduce中,每个Reduce做部分聚合操作,并输出结果,

--这样处理的结果是相同的group by

--有可能被分发到不同的reduce中,从而达到负载均衡的目的;第二个MRJob再根据预处理的

--数据结果按照Group By key分布到Reduce中(这个过程可以保证相同的GroupBy key被分布到同一个Reduce中)

--最后完成最终的聚合操作

--Multi-Group-By INSERT

FROM test

INSERT OVERWRITE ``TABLE count1

SELECT count``(``distinct test.dqcode)

Group by test.zipcode

INSERT OVERWRITE ``TABLE count2

SELECT count``(``distinct test.dqcode)

group by test.sfcode;

--十二、排序

Order By colName ``ASC``/``DESC

hive.mapred.mode=strict;``--strict 时需要跟limit子句

hive.mapred.mode=nonstrict;``--nonstrict时使用单个reduce完成排序

Sort ``by colname ``ASC``/``DESC``;``--每个reduce内排序

distribute ``by``(子查询情况下使用):控制特定行应该到哪个reducer,并不保证reduce内数据顺序

cluster ``by``:当Sort ``By``、Distribute ``by``使用相同的列时。

--十三、合并小文件

hive.merg.mapfiles=``true``;``--合并map输出

hive.merge.mapredfiles=``false``;``--合并reduce输出

hive.merge.``size``.per.task=256*1000*1000;``--合并文件的大小

hive.mergejob.maponly=``true``;``--如果支持CombineHiveInputFormat则生成只有Map的任务执行merge

hive.merge.smallfiles.avgsize=16000000; ``--文件的平均大小小于该值时,会启动一个MR任务执行merge。

--十四、map/reduce数目

--减少map数目

set mapred.``max``.split.``size

set mapred.``min``.split.``size

set mapred.``min``.split.``size``.per.node;

set mapred.``min``.split.``size``.per.rack;

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

--增加map数目

--当input的文件都很大,任务逻辑复杂,map执行非常慢的时候,可以考虑增加Map数,来时的每个map处理的数据量减少,从而提高任务的执行效率。

--假设有这样一个任务

select data_desc,``count``(1),``count``(``distinct id),``sum``(``case when ...),``sum``(``case when ..),``sum``(...)

from a ``group by data_desc;

--如果表a只有一个文件、大小为120M,但包含几千万的记录,如果用1个map区完成这个任务,肯定是比较耗时的,这种情况下,我们要考虑将这个文件合理的拆分

--成多个,这样就可以用多个map任务去完成。

set mapred.reduce.tasks=10;

create table a_1 ``as select * ``from a distribte ``by rand(123);

--这样会将表a表的记录,随机的分散到包含10个文件a_1表中,在用a_1代替上面SQL中的a表,

--则会用10个 map任务去完成。每个map任务处理大于12M(几百万记录)的数据,效率肯定会好很多

reduce数目设置:

参数1:

hive.``exec``.reducers.bytes.per.reducer=1G;``--每个reduce任务的处理量

参数2:

hive.``exec``.reducers.``max``=999(0.95*TaskTracker数);``--每个任务最大的reduce数目

reducer数=``min``(参数2,总输入量/参数1)

set mapred.reduce.tasks:每个任务默认的reduce数目。典型为0.99*reduce槽数,hive将其设置为-1,自动确定reduce数目。

--15.使用索引

hive.optimize.``index``.filter:自动使用索引

hive.optimize.groupby:使用聚合索引优化groupby操作

'''

相关文章

  • 调参指南

    '''set hive.cli.print.header=``true``; set hive.``fetch``...

  • XGboost 基线模型及部分参数优化

    1 模型原理及调参参考 调参:XGBoost参数调优完全指南原理:xgboost入门与实战(原理篇) 2 输出基线...

  • XGBoost调参指南

    本文内容结构主要参考Complete Guide to Parameter Tuning in XGBoost w...

  • 调参

    1首先是数据增强,因为正常情况下,数据量往往不够,因此需要通过裁剪 2数据预处理,pca,normalizatio...

  • 调参

    参数更新 神经网络的学习目的是找到使损失函数尽可能小的参数,即解决一个最优化问题.但是由于神经网络参数空间过于复杂...

  • 调参

    死亡的神经元占的比例 RELU 文中给出了一种针对ReLU神经元的特殊初始化,并给出结论:网络中神经元的方差应该是...

  • 调参

    转载https://www.sohu.com/a/241208957_787107 基本原则:快速试错 一些大的注...

  • 调参

    1.lr用1e-2-1e-3结果较好。lr值小的话,上升test auc会比较慢,但最后结果说不定会比lr大要好。...

  • 2020最新调优、微服务、框架、分布式指南,我的“大厂”不是梦!

    01 性能调优学习指南 MySQL Tomcat JVM 1.1 调优面试指南 1.1.1 调优面试之MySQL(...

  • Day 6: 参数调节

    我们平时一直都在说“调参、调参”,但实际上,不是调“参数”,而是调“超参数” 1.参数(Parameter) 参数...

网友评论

      本文标题:调参指南

      本文链接:https://www.haomeiwen.com/subject/egivsctx.html