实时搜索: hadoop 几个map

hadoop 几个map

760条评论 1939人喜欢 3544次阅读 429人点赞
现在有5台机器。
写了个MAP程序从5台机器本地读取数据进行分析。
但是在执行的时候总是有rack-map启动。导致某个机器的数据没有处理。
求指教这个怎么弄? , 能给个例子或者具体配置信息吗
假如我要把文件a给一个map处理,文件b给另一个map处理,我是应该创建两个job还是创建一个job , 我的reduce方法中,需要找出map()传递过来的部分数据,哪些在本地文件中出现过,因此需要在reduce()中首先加载一个本地txt文件,以HashMap形式存储。因此请问谁可以提供一个reduce()加载文件的代码实例? ...

Hadoop任务分配,怎么确保每个机器1个MAP,不重复?: 如果是固定5台机器,每个作业固定5个map任务,那把参数mapreduce.tasktracker.map.tasks.maximum设成1应该就能保证每个机器刚好一个了。同时把推测性执行关了:mapred.map.tasks.speculative.execution设为false

windows下的hadoop程序怎么在集群中运行: 1.下载hadoop的安装包,这里使用的是"hadoop-2.6.4.tar.gz":
2.将安装包直接解压到D盘根目录:
3.配置环境变量:
4.下载hadoop的eclipse插件,并将插件放到eclipse的plugins目录下:
5.打开Eclipse,选择菜单"Window"-->"Preferences",在左侧找到"Hadoop Map/Reduce",

在右侧选择hadoop的目录:
6.打开菜单"Window"中的"Show View"窗口,选择"Map/Reduce Locations":
7:在打开的"Map/Reduce Locations"面板中,点击小象图标,打开新建配置窗口:
8.填写hadoop集群的主机地址和端口:
9.新创建的hadoop集群连接配置,右上角的齿轮可以修改配置信息:
10.打开菜单"Window"中的"Show View"窗口,找到"Project Explorer":
11.在"Project Explorer"面板中找到"DFS Locations",展开下面的菜单就可以连接上HDFS,

可以直接看到HDFS中的目录和文件:
12.在"Project Explorer"面板中点击鼠标右键,选择新建,就可以创建"Map/Reduce"项目了:
13.下面我们创建了一个名为"hadoop-test"的项目,可以看到它自动帮我们导入了很多的jar包:
14.在项目的src下面创建log4j.properties文件,内容如下:
log4j.rootLogger=debug,stdout,R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=mapreduce_test.log

如何确定 Hadoop map和reduce的个数: map的数量通常是由hadoop集群的DFS块大小确定的,也就是输入文件的总块数,正常的map数量的并行规模大致是每一个Node是10~100个,对于CPU消耗较小的作业可以设置Map数量为300个左右,但是由于hadoop的每一个任务在初始化时需要一定的时间,因此比较合理的情况是每个map执行的时间至少超过1分钟。具体的数据分片是这样的,InputFormat在默认情况下会根据hadoop集群的DFS块大小进行分片,每一个分片会由一个map任务来进行处理,当然用户还是可以通过参数mapred.min.split.size参数在作业提交客户端进行自定义设置。还有一个重要参数就是mapred.map.tasks,这个参数设置的map数量仅仅是一个提示,只有当InputFormat 决定了map任务的个数比mapred.map.tasks值小时才起作用。同样,Map任务的个数也能通过使用JobConf 的conf.setNumMapTasks(int num)方法来手动地设置。这个方法能够用来增加map任务的个数,但是不能设定任务的个数小于Hadoop系统通过分割输入数据得到的值。当然为了提高集群的并发效率,可以设置一个默认的map数量,当用户的map数量较小或者比本身自动分割的值还小时可以使用一个相对交大的默认值,从而提高整体hadoop集群的效率。

2 reduece的数量
reduce在运行时往往需要从相关map端复制数据到reduce节点来处理,因此相比于map任务。reduce节点资源是相对比较缺少的,同时相对运行较慢,正确的reduce任务的个数应该是0.95或者1.75 *(节点数 ×mapred.tasktracker.tasks.maximum参数值)。如果任务数是节点个数的0.95倍,那么所有的reduce任务能够在 map任务的输出传输结束后同时开始运行。如果任务数是节点个数的1.75倍,那么高速的节点会在完成他们第一批reduce任务计算之后开始计算第二批 reduce任务,这样的情况更有利于负载均衡。同时需要注意增加reduce的数量虽然会增加系统的资源开销,但是可以改善负载匀衡,降低任务失败带来的负面影响。同样,Reduce任务也能够与 map任务一样,通过设定JobConf 的conf.setNumReduceTasks(int num)方法来增加任务个数。

3 reduce数量为0
有些作业不需要进行归约进行处理,那么就可以设置reduce的数量为0来进行处理,这种情况下用户的作业运行速度相对较高,map的输出会直接写入到 SetOutputPath(path)设置的输出目录,而不是作为中间结果写到本地。同时Hadoop框架在写入文件系统前并不对之进行排序。

Hadoop 中 map任务数,reduce任务数 和机器节点数之间是什么关系: 搜到了答案,我觉得回答地不错。

根据Google发布的论文

MapReduce: Simplified Data Processing on Large Clusters
http://static.googleusercontent.com/media/research.google.com/zh-CN//archive/mapreduce-osdi04.pdf

这里引用3.5 TaskGranularity的一小段,下文中M代表map任务数,R代表reduce任务数

Furthermore, R is often constrained by users because the output of each reduce task ends up in a separate output fi le. In practice, we tend to choose M so that each individual task is roughly 16 MB to 64 MB of input data(so that the locality optimization described above is most effective), and we make R a small multiple of the number of worker machines we expect to use. We often perform MapReduce computations with M = 200,000 and R = 5,000, using 2,000 worker machines.

总的来说
map任务数倾向于把输入文件可以分割成16MB到64MB之间,因为这刚好是GFS每个分块文件的大小,可以减少数据在网络中流动
reduce任务数通常是机器节点数的小倍数
至于机器节点数?有钱就要任性,多多益善。。

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:曾凌恒
链接:http://www.zhihu.com/question/26816539/answer/34133965

hadoop为了给不同的map提供不同的输入,应该在代码中说明还是在hadoop配置文件中说明,具体怎么写或设置: 使用MultipleInputs,然后在job初始化时调用MultipleInputs的addInputPath方法设置多格式输入,具体使用请自行查看API学习

hadoop用java写map(),reduce()方法,如何在reduce()中加载一个本地文件?: mr程序不在本地跑,而且你也无法知道哪个map或者reduce程序在那台机器跑,所以不可能在map或者reduce任务过程中读取本地文件。但是hadoop提供了一个共享缓存--DistributedCache ,你可以将mr程序中使用到的文件或者其他东西上传到DistributedCache 中,然后在map或者reduce运行前,会自动将文件下载到本地,这时就可以访问了。
具体如何使用请自行学习

Hadoop中Map的数量是如何确定的: 一般情况下,都为1,特殊情况除外。
minSize:取的1和mapred.min.split.size中较大的一个。
blockSize:HDFS的块大小,默认为64M,一般大的HDFS都设置成128M。
splitSize:就是最终每个Split的大小,那么Map的数量基本上就是totalSize/splitSize。
接下来看看computeSplitSize的逻辑:
首先在goalSize(期望每个Mapper处理的数据量)和HDFS的block size中取较小的,然后与mapred.min.split.size相比取较大的。
有了2的分析,下面调整Map的数量就很容易了。
3.1 减小Map-Reduce job 启动时创建的Mapper数量
当处理大批量的大数据时,一种常见的情况是job启动的mapper数量太多而超出了系统限制,导致Hadoop抛出异常终止执行。解决这种异常的思路是减少mapper的数量。具体如下:
3.1.1 输入文件size巨大,但不是小文件
这种情况可以通过增大每个mapper的input size,即增大minSize或者增大blockSize来减少所需的mapper的数量。增大blockSize通常不可行,因为当HDFS被hadoop namenode -format之后,blockSize就已经确定了(由格式化时dfs.block.size决定),如果要更改blockSize,需要重新格式化HDFS,这样当然会丢失已有的数据。所以通常情况下只能通过增大minSize,即增大mapred.min.split.size的值。
3.1.2 输入文件数量巨大,且都是小文件

如何在Hadoop的MapReduce程序中处理JSON文件: import org.json.simple.JSONObject;  
public class HelloWorld{  
    public static void main(String[] args){  
        JSONObject obj=new JSONObject();  
        obj.put("name","foo");  
        obj.put("num",new Integer(100));  
        obj.put("balance",new Double(1000.21));  
        obj.put("is_vip",new Boolean(true));  
        obj.put("nickname",null);  
        System.out.print(obj);  
    }  
}

  • pos机一个机器能几个人用

    cf王者之魂m4黄金雷神可以刀人吗?: 可以,和雷神一样有枪托,其实就是雷神的皮肤枪,但不加子弹,也不是英雄级,而且死亡会掉落 ...

    308条评论 5177人喜欢 2012次阅读 466人点赞
  • mta多少钱

    cf刀战碎步怎么走阿还有改键怎么改好操作一点求大神指教: 这个游戏的常规操纵键无非就是4个方向键,蹲,跳静走键,还有鼠标双健,其实只要控制好方向键和出刀时间就已非菜鸟了,但要成为一个狠人还要具备更多的非硬件因素。小碎步把后退键S改成Alt 然后W和Alt同时按住 按A...

    489条评论 4715人喜欢 2552次阅读 456人点赞
  • 22画繁体字有哪些

    信托理财产品与其它理财产品有什么区别?: (1)资金门槛较其他理财产品高。信托资金门槛为100万。  (2)所有权与利益权相分离。即受托人享有信托财产的所有权,而受益人享有受托人经营信托财产所产生的利益。  (3)信托财产的独立性。信托一经有效成立,信托财产...

    869条评论 3141人喜欢 3946次阅读 446人点赞
  • 2017最火的网红是谁

    常见农村道路交通安全隐患有哪些: 常见的农村道路交通安全隐患有:1.不是水平道路,泥泞的道路不平坦和道路坑多路烂。2.道路过小,车辆增多后容易产生安全问题。3.素质差,缺乏安全意思可能存在在道路上丢石头等容易产生事故的违法现象。4.道路弯多路小容易产...

    852条评论 5774人喜欢 1522次阅读 746人点赞
  • 20米多少尺

    穿越火线幸运出击明明已经游戏时长达90分钟为什么突然说我没有绑定大区什么意思: 如果在抽奖开放时间段,比如10点,11点准时去抽奖,由于人数太多大区会失效,这个任务我也在做,我也经常这样,所以抽奖可以等个1个小时之后再去抽,绑定的大区就不会掉,如果你在人爆满的时候大区掉了,是很难继续绑定的。 ...

    384条评论 1146人喜欢 4210次阅读 886人点赞