我听说过很多关于map/reduce的内容,特别是在谷歌大规模并行计算系统的背景下.究竟是什么?
在Hadoop中什么时候开始减少任务?它们是在完成一定百分比(阈值)的映射器后开始的吗?如果是这样,这个门槛是否固定?通常使用什么样的阈值?
现在,我有一个Hadoop工作,它创建了一个非常有名的计数器.例如,以下一个:stats.counters.server-name.job.job-name.mapper.site.site-name.qualifier.qualifier-name.super-long-string-which-is-not-within-standard-limits.此计数器在Web界面和getName()方法调用上被截断.我发现Hadoop对计数器最大名称有限制,此设置ID mapreduce.job.counters.counter.name.max用于配置此限制.所以我将此增加到,500并且web界面现在显示完整的计数器名称.但是getName()计数器仍然返回截断的名称.
请问某人,解释一下或指出我的错误?谢谢.
编辑1
我的hadoop服务器配置由单个服务器组成,其中包含hdfs,yarn和map-reduce.在map-reduce期间,有一些计数器增量,在作业完成后,在ToolRunnerI中使用的获取计数器org.apache.hadoop.mapreduce.Job#getCounters.
编辑2
Hadoop版本如下:
Hadoop 2.6.0-cdh5.8.0
Subversion http://github.com/cloudera/hadoop -r 042da8b868a212c843bcbf3594519dd26e816e79
Compiled by jenkins on 2016-07-12T22:55Z
Compiled with protoc 2.5.0
From source with checksum 2b6c319ecc19f118d6e1c823175717b5
This command was run using /usr/lib/hadoop/hadoop-common-2.6.0-cdh5.8.0.jar
Run Code Online (Sandbox Code Playgroud)
我做了一些额外的调查,似乎这个问题描述了与我类似的情况.但这很令人困惑,因为我可以增加计数器的数量而不是计数器名称的长度......
编辑3
今天我花了很多时间调试hadoop的内部.一些有趣的东西:
org.apache.hadoop.mapred.ClientServiceDelegate#getJobCounters方法从具有TRUNCATED名称和FULL显示名称的yarn返回一组计数器.org.apache.hadoop.mapreduce.Counter#getName方法在reducer执行期间正常工作.在mapreduce中,每个reduce任务将其输出写入名为part-r-nnnnn的文件,其中nnnnn是与reduce任务关联的分区ID.map/reduce是否合并这些文件?如果有,怎么样?
在Hadoop v1中,我已经分配了每个7GB的mapper和reducer slot,大小为1GB,我的mappers和reducer运行正常.我的机器有8G内存,8个处理器.现在使用YARN,当在同一台机器上运行相同的应用程序时,我收到了容器错误.默认情况下,我有这样的设置:
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
</property>
Run Code Online (Sandbox Code Playgroud)
它给了我错误:
Container [pid=28920,containerID=container_1389136889967_0001_01_000121] is running beyond virtual memory limits. Current usage: 1.2 GB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.
Run Code Online (Sandbox Code Playgroud)
然后我尝试在mapred-site.xml中设置内存限制:
<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
Run Code Online (Sandbox Code Playgroud)
但仍然得到错误:
Container [pid=26783,containerID=container_1389136889967_0009_01_000002] is running beyond physical memory limits. Current usage: 4.2 GB of 4 GB physical memory used; 5.2 GB of 8.4 GB virtual memory used. …Run Code Online (Sandbox Code Playgroud) 使用MongoDB $in子句时,返回文档的顺序是否始终对应于数组参数的顺序?
mapreduce mongoose mongodb mongodb-query aggregation-framework
我正在尝试使用Hive Thrift和JDBC接口编写一个非平凡的Hive作业,而我在设置一个像样的JUnit测试时遇到了麻烦.非平凡,我的意思是这项工作至少会产生一个MapReduce阶段,而不是只处理Metastore.
测试应该启动一个Hive服务器,将一些数据加载到一个表中,在该表上运行一些非平凡的查询,并检查结果.
我根据Spring参考连接了Spring上下文.但是,MapReduce阶段的作业失败,抱怨没有Hadoop二进制文件存在:
java.io.IOException:无法运行程序"/ usr/bin/hadoop"(在目录"/ Users/yoni/opower/workspace/intellij_project_root"中):error = 2,没有这样的文件或目录
问题是Hive Server在内存中运行,但依赖于Hive的本地安装才能运行.为了让我的项目自成一体,我需要嵌入Hive服务,包括HDFS和MapReduce集群.我尝试使用相同的Spring方法启动Hive服务器并将其指向MiniDFSCluster和MiniMRCluster,类似于Hive QTestUtil源和HBaseTestUtility中使用的模式.但是,我无法让它发挥作用.
经过三天试图纠缠Hive集成测试后,我想我会问社区:
我看过的其他资源:
编辑:我完全清楚,针对Hadoop集群(无论是本地还是远程),可以针对全栈Hive实例运行集成测试.如上所述,问题在于,这不是有效测试Hive工作流的可行解决方案.
我有一个包含商店列表的大型CSV文件,其中一个字段是ZipCode.我有一个名为ZipCodes的单独的MongoDB数据库,它存储任何给定邮政编码的纬度和经度.
在SQL Server中,我将执行一个名为InsertStore的存储过程,该过程将在ZipCodes表上查找以获取相应的纬度和经度,并将数据插入到Stores表中.
MongoDB中是否存在类似于存储过程概念的内容?基本上,对于每个插入,我需要查找该存储的经度和经度并保存它.
我对Map/Reduce的概念不太熟悉,但这在这里是否相关?谢谢!
我通常使用大约20 Gb的文本文件,我发现自己经常计算给定文件中的行数.
我这样做的方式现在只是cat fname | wc -l,而且需要很长时间.有没有更快的解决方案?
我在安装了Hadoop的高性能集群中工作.我想知道地图减少方法是否有帮助.
我希望解决方案像一线运行一样简单,就像wc -l解决方案一样,但不确定它是多么可行.
有任何想法吗?
我正进入(状态:
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask
Run Code Online (Sandbox Code Playgroud)
尝试使用hive控制台中的命令创建分区表的副本时:
CREATE TABLE copy_table_name LIKE table_name;
INSERT OVERWRITE TABLE copy_table_name PARTITION(day) SELECT * FROM table_name;
Run Code Online (Sandbox Code Playgroud)
我最初得到一些语义分析错误,不得不设置:
set hive.exec.dynamic.partition=true
set hive.exec.dynamic.partition.mode=nonstrict
Run Code Online (Sandbox Code Playgroud)
虽然我不确定上面的属性是做什么的?
蜂巢控制台的全部输出:
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set …Run Code Online (Sandbox Code Playgroud)