LoveJW 发表于 2014-11-26 16:48:21

jixianqiuxue 发表于 2014-11-26 16:32
如果真如楼主所说,那么有两个问题
1.为何楼主的的错误会出现,创建文件失败,创建文件失败,但是却能追 ...

这个真的是能追加成功,但是为什么报错我现在也搞不明白,你说的这个环境配置具体指哪??我在工程里只加了一个hdfs-site.xml,而且没有修改任何配置

bioger_hit 发表于 2014-11-26 19:49:43

LoveJW 发表于 2014-11-26 16:48
这个真的是能追加成功,但是为什么报错我现在也搞不明白,你说的这个环境配置具体指哪??我在工程里只加 ...

你这个帖子收藏了,有时间验证下。等得出结果,在讨论。也建议楼主可以从多方面验证,可能是环境问题。

LoveJW 发表于 2014-11-26 19:51:56

bioger_hit 发表于 2014-11-26 19:49
你这个帖子收藏了,有时间验证下。等得出结果,在讨论。也建议楼主可以从多方面验证,可能是环境问题。

...

嗯,我现在在看源码这一块,看到底怎么回事

soeasy 发表于 2014-12-5 15:53:09

咨询个HDFS问题:
1. 在多线程高速并发反复append写入文件时存在这个现象;(设计了读写锁对同一文件写入时保护)
2. 文件是打开,写入,append,关闭流程;
看资料好像是hdfs一种保护机制,具体细节没有研究

数据DataNode节点对应的错误是
2014-12-05 14:32:21,700 ERROR security.UserGroupInformation (UserGroupInformation.java:doAs(1494)) - PriviledgedActionException as:root (auth:SIMPLE) cause:org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException: failed to create file /user/root/rcfclient_0723data_thread_00019.txt for DFSClient_NONMAPREDUCE_260549844_1 on client 10.10.10.253 because current leaseholder is trying to recreate file.

C++接入客户端对应的错误信息如下
hdfsOpenFile(rcfclient_0723data_thread_00019.txt): FileSystem#append((Lorg/apache/hadoop/fs/Path;)Lorg/apache/hadoop/fs/FSDataOutputStream;) error:
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException): failed to create file /user/root/rcfclient_0723data_thread_00019.txt for DFSClient_NONMAPREDUCE_260549844_1 on client 10.10.10.253 because current leaseholder is trying to recreate file.
      at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.recoverLeaseInternal(FSNamesystem.java:2275)
      at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.appendFileInternal(FSNamesystem.java:2153)
      at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.appendFileInt(FSNamesystem.java:2386)
      at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.appendFile(FSNamesystem.java:2347)
      at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.append(NameNodeRpcServer.java:508)
      at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.append(ClientNamenodeProtocolServerSideTranslatorPB.java:320)
      at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:59572)
      at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:585)
      at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:928)
      at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2048)
      at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2044)
      at java.security.AccessController.doPrivileged(Native Method)
      at javax.security.auth.Subject.doAs(Subject.java:415)
      at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
      at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2042)

soeasy 发表于 2014-12-5 15:54:25

同问,解决过或知道问题原因的请站内短信给我

EASONLIU 发表于 2014-12-16 22:52:23

顶顶顶!!!!!!

codefarmer 发表于 2015-4-27 16:34:55

System. setProperty( "hadoop.home.dir", "D:/hadoop" );
conf.setBoolean( "dfs.support.append", true );
          conf.set( "dfs.client.block.write.replace-datanode-on-failure.policy" ,
                  "NEVER" );
          conf.set( "dfs.client.block.write.replace-datanode-on-failure.enable" ,
                  "true" );

IT_雪夜归人 发表于 2015-12-28 22:23:23

goldtimes 发表于 2014-11-26 12:34
首先修改面配置文件,相信你已经修改了




这个代码对文件追加过一次,再次追加就会报错,不知到如何解决,hadoop 2.5.2CDH 5.5.1版都试过了,还没有找到解决方法呢。

IT_雪夜归人 发表于 2015-12-28 22:24:00

楼主最后这个问题解决了没?

hjx615 发表于 2016-1-8 10:47:41

public static void appen(String content, String path, FileSystem fs) {
                // System.out.println("测试:"+content);
                InputStream in = null;
                OutputStream out = null;
                try {
                        Path hdfs_path = new Path(path);
                        Configuration conf = new Configuration();
                        conf.setBoolean("dfs.support.append", true);
                        // FileSystem fs = FileSystem.get(URI.create(hdfs_path.toString()),
                        // conf);
                        fs.setReplication(hdfs_path, (short) 1);
                        in = new BufferedInputStream(new ByteArrayInputStream(
                                        content.getBytes()));
                        out = fs.append(hdfs_path);
                        IOUtils.copyBytes(in, out, conf);
                        // fs.close();
                } catch (Exception e) {
                        logger.error(e);
                } finally {
                        IOUtils.closeStream(in);
                        try {
                                if (in != null) {
                                        in.close();
                                }
                                if (out != null) {
                                        out.close();
                                }
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }

                }
        }

我也这问题,定时任务一直跑,第一个任务跑完没有问题,任务第二次跑就出像楼主一样的bug.
如果任务一直跑好好的,我把任务手动停了,再跑也会有这bug.出现bug后,要过比较久或重启hadoop,就没有这问题。我怀疑文件没有正常关闭,但其实都有关闭
页: 1 [2] 3
查看完整版本: 往hdfs上追加数据【hadoop写数据】