- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Mapreduce和Hive中map reduce个数设定
Mapreduce中mapper个数的确定:在map阶段读取数据前,FileInputFormat会将输入文件分割成split。split的个数决定了map的个数。影响map个数,即split个数的因素主要有:HDFS块的大小,即HDFS中dfs.block.size的值。如果有一个输入文件为1024m,当块为256m时,会被划分为4个split;当块为128m时,会被划分为8个split。文件的大小。当块为128m时,如果输入文件为128m,会被划分为1个split;当块为256m,会被划分为2个split。文件的个数。FileInputFormat按照文件分割split,并且只会分割大文件,即那些大小超过HDFS块的大小的文件。如果HDFS中dfs.block.size设置为64m,而输入的目录中文件有100个,则划分后的split个数至少为100个。splitsize的大小。分片是按照splitszie的大小进行分割的,一个split的大小在没有设置的情况下,默认等于hdfs block的大小。但应用程序可以通过两个参数来对splitsize进行调节。Mapper个数的计算如下:Step1,splitsize=max(minimumsize,min(maximumsize,blocksize))。如果没有设置minimumsize和maximumsize,splitsize的大小默认等于blocksizeStep2,计算过程可以简化为如下的公式,详细算法可以参照FileInputSplit类中的getSplits方法total_split ;for(file :输入目录中的每个文件){file_split = 1;if(file.sizesplitsize){file_split=file_size/splitsize;}total_split+=file_split;}Mapreduce中Reducer个数确定:在缺省情况下,一个mapreduce的job只有一个reducer;在大型集群中,需要使用许多reducer,中间数据都会放到一个reducer中处理,如果reducer数量不够,会成为计算瓶颈。reducer的最优个数与集群中可用的reducer的任务槽数相关,一般设置比总槽数稍微少一些的reducer数量;Hadoop文档中推荐了两个公式:0.95*NUMBER_OF_NODES*mapred.tasktracker.reduce.tasks.maximum1.75*NUMBER_OF_NODES*mapred.tasktracker.reduce.tasks.maximum备注:NUMBER_OF_NODES是集群中的计算节点个数;mapred.tasktracker.reduce.tasks.maximum:每个节点所分配的reducer任务槽的个数(节点内核数);在代码中通过:JobConf.setNumReduceTasks(Int numOfReduceTasks)方法设置reducer的个数;Hive job相关参数配置和mapreduce数目控制在 hive\conf\hive_site.xml中配置如下性能调优项:开启动态分区:hive.exec.dynamic.partition=true默认值:false描述:是否允许动态分区hive.exec.dynamic.partition.mode=nonstrict默认值:strict描述:strict是避免全分区字段是动态的,必须有至少一个分区字段是指定有值的。读取表的时候可以不指定分区。hive.exec.max.dynamic.partitions.pernode=100默认值:100描述:each mapper or reducer可以创建的最大动态分区数hive.exec.max.dynamic.partitions=1000默认值:1000描述:一个DML操作可以创建的最大动态分区数hive.exec.max.created.files=100000默认值:100000描述:一个DML操作可以创建的文件数设置如下参数取消一些限制(HIVE 0.7后没有此限制):hive.merge.mapfiles=false默认值:true描述:是否合并Map的输出文件,也就是把小文件合并成一个maphive.merge.mapredfiles=false默认值:false描述:是否合并Reduce的输出文件,也就是在Map输出阶段做一次reduce操作,再输出hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;表示执行前进行小文件合并配置如下参数,可以开启H
文档评论(0)