当我在小数据上运行代码时,我没有得到以下错误.但是当我在更大的数据集上运行相同的代码时,我在使用多个输出时遇到以下错误.请帮忙!
org.apache.hadoop.ipc.RemoteException:
org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException: failed to create file
/home/users/mlakshm/alop176/data-r-00001 for
DFSClient_attempt_201208010142_0043_r_000001_1 on client 10.0.1.100, because this file
is already being created by DFSClient_attempt_201208010142_0043_r_000001_0 on 10.0.1.130 at
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.recoverLeaseInternal(FSNamesystem.java:1406)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInternal(FSNamesystem.java:1246)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:1188)
at org.apache.hadoop.hdfs.server.namenode.NameNode.create(NameNode.java:628)
at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:563)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1388)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1384)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:416)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1382)
at org.apache.hadoop.ipc.Client.call(Client.java:1070)
at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:225)
at $Proxy2.create(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59)
at $Proxy2.create(Unknown Source)
at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.<init>(DFSClient.java:3248)
at …Run Code Online (Sandbox Code Playgroud) 我想将mapper输出的一部分写入文件夹,比如HDFS中的文件夹A. 输出的另一部分,我希望它由reducer处理.这可能吗?我知道多输出.这可能使用多个输出吗?
谢谢!
作业的减少阶段失败了:
每个任务失败的原因是:
任务尝试_201301251556_1637_r_000005_0无法报告状态600秒.杀!
问题详情:
Map阶段接收每个记录的格式:time,rid,data.
数据格式为:data元素及其计数.
例如:a,1b,4c,7对应于记录的数据.
映射器为每个数据元素输出每个记录的数据.例如:
key:(time,a,),val:(rid,data)key:(time,b,),val:(rid,data)key:(time,c,),val:(rid,data)
每个reduce从所有记录中接收与相同密钥对应的所有数据.例如:key:(time,a),val:(rid1,data)和key:(time,a),val:(rid2,data)到达同一个reduce实例.
它在这里进行一些处理并输出类似的rids.
对于小型数据集(如10MB),我的程序运行没有问题.但是,由于上述原因,当数据增加到1G时失败.我不知道为什么会这样.请帮忙!
减少代码:
下面有两个类:
VCLReduce0SplitCoreSplit一个. VCLReduce0SPlit
public class VCLReduce0Split extends MapReduceBase implements Reducer<Text, Text, Text, Text>{
// @SuppressWarnings("unchecked")
public void reduce (Text key, Iterator<Text> values, OutputCollector<Text, Text> output, Reporter reporter) throws IOException {
String key_str = key.toString();
StringTokenizer stk = new StringTokenizer(key_str);
String t = stk.nextToken();
HashMap<String, String> hmap = new HashMap<String, String>();
while(values.hasNext())
{
StringBuffer sbuf1 = new StringBuffer();
String val = values.next().toString();
StringTokenizer st = …Run Code Online (Sandbox Code Playgroud) 我想帮助理解算法.我首先粘贴了算法解释,然后是我的疑惑.
算法:(用于计算记录对之间的重叠)
给定用户定义的参数K,文件DR(*Format:record_id,data*)被分成K个近似等大小的块,使得文档Di的数据落入第i/K th块中.
我们覆盖了Hadoop的分区功能,该功能将映射器发出的密钥映射到reducer实例.每个键(i,j)都映射到j/Kth组中的reducer.
特殊键i,*及其相关值,即文档的数据最多被复制K次,以便可以在每个缩减器处传送文档的全部内容.因此,组中的每个缩减器仅需要在存储器中恢复并加载一个DR文件块,其大小可以通过改变K而任意设置为小.因此可以计算重叠.这是以复制通过MapReduce框架提供的文档为代价的.
释疑:
我做了一些假设:
声明:每个键(i,j)都映射到j/Kth组中的reducer.假设:存在K个减少节点,并且该密钥被映射到j/Kth reduce节点.
怀疑:是否有一些减少节点组合在一起?比如0,1,2节点被分组为0组?
声明:文档的数据最多可复制K次,因此可以在每个reducer上传送文档的全部内容.
所以这意味着K等于没有.减速机节点?如果没有,我们正在浪费计算节点,而不是正确使用它们?
主要疑问:K是否等于减速器节点的数量?
希望得到回应!
谢谢!
java hadoop mapreduce elastic-map-reduce hadoop-partitioning
如何将文件加载到主内存?
我用的是我读的文件
BufferReader buf = new BufferedReader(FileReader());
Run Code Online (Sandbox Code Playgroud)
我认为这是从磁盘逐行读取文件.这有什么好处?
将文件直接加载到内存中有什么好处?我们如何用Java做到这一点?
我找到了一些例子Scanner或RandomAccessFile方法.他们将文件加载到内存中吗?我应该使用它们吗?我应该使用哪两个?
提前致谢!!!
我想了解hadoop中的文件系统计数器.
下面是我跑的工作的计数器.
在我运行的每个作业中,我发现读取的Map文件字节几乎等于读取的HDFS字节.我观察到地图写入的文件字节是映射器读取的文件字节和hdfs字节的总和.请帮忙!本地文件和hdfs是否读取了相同的数据,并且两者都是由Map Phase写入本地文件系统的?
Map
Run Code Online (Sandbox Code Playgroud)
FILE_BYTES_READ 5,062,341,139
HDFS_BYTES_READ 4,405,881,342
FILE_BYTES_WRITTEN 9,309,466,964
HDFS_BYTES_WRITTEN 0
谢谢!
我想让我对hadoop分布式缓存有所了解.我知道当我们将文件添加到分布式缓存时,文件会被加载到集群中每个节点的磁盘上.
那么如何将文件数据传输到集群中的所有节点.是通过网络吗?如果是这样,它会不会对网络造成压力?
我有以下想法,他们是否正确?
如果文件很大,不会有网络拥塞?
如果节点数量很大,即使文件大小适中,文件的复制和传输到所有节点,都不会导致网络拥塞和内存限制?
请帮助我理解这些概念.
谢谢!!!