2016-07-15 3 views
0

説明

をクリーンアップされていません。それは数日間はうまく動作しますが、一時的な出力バッファとして使用されるHDFSフォルダのアイテム/名前クォータ制限に到達することもあります。そのため、MongoRecordWriterクラスの「Mongo出力をバッファリングするための一時ファイルを開くことができませんでした」(下記のスタックトレースを参照)、アプリケーションからのMongoDBへの書き込みを防止します。のmongo-Hadoopの - saveAsNewAPIHadoopFile() - 古いフォルダは、私たちのアプリケーションはモンゴに書き込むためのmongo-のHadoop saveAsNewAPIHadoopFile()メソッドを使用している

いくつかの掘削を行った後、我々はモンゴ-Hadoopの中MongoOutputCommitterクラスの方法は、出力タスクではなく、それぞれの一時ファイルを含むフォルダを作成した一時ファイルを削除しますcleanupResources(最終TaskAttemptContext taskContext)ことに気づきました。この動作を制御するための設定/設定オプションは見つかりませんでした。そのHDFSフォルダの名前クォータを増やすことはできますが、それはHDFSのパフォーマンスに影響を与える可能性があり、何も解決しません。私たちはnohupメンテナンスの仕事をすることができますが、それは管理するための追加の人工物であり、回避策としてそれを見ています。


質問

  1. の構成を経由してその動作を制御する方法はありますか?
  2. そうでない場合、これは機能またはバグとみなされますか?おそらく、それはわかっていないが、古い一時的な空の フォルダを管理するためにHDFS管理者に残されたのはおそらく でした。


スタックトレース

java.lang.RuntimeException: Could not open temporary file for buffering Mongo output 
    at com.mongodb.hadoop.output.MongoRecordWriter.<init>(MongoRecordWriter.java:78) 
    at com.mongodb.hadoop.MongoOutputFormat.getRecordWriter(MongoOutputFormat.java:46) 
... 
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.FSLimitException$MaxDirectoryItemsExceededException): The directory item limit of /user/ec2-user/tmp is exceeded: limit=1048576 items=1048576 
    at org.apache.hadoop.hdfs.server.namenode.FSDirectory.verifyMaxDirItems(FSDirectory.java:2021) 
    at org.apache.hadoop.hdfs.server.namenode.FSDirectory.addChild(FSDirectory.java:2072) 
    at org.apache.hadoop.hdfs.server.namenode.FSDirectory.unprotectedMkdir(FSDirectory.java:1841) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsRecursively(FSNamesystem.java:4348) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInternal(FSNamesystem.java:2748) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt(FSNamesystem.java:2632) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:2519) 
    at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.create(NameNodeRpcServer.java:566) 
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.create(ClientNamenodeProtocolServerSideTranslatorPB.java:394) 
    at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) 
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619) 
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:962) 
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2039) 
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2035) 
    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:1635) 
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2033) 

    at org.apache.hadoop.ipc.Client.call(Client.java:1471) 
    at org.apache.hadoop.ipc.Client.call(Client.java:1402) 
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:232) 
    at com.sun.proxy.$Proxy21.create(Unknown Source) 
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.create(ClientNamenodeProtocolTranslatorPB.java:295) 
    at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187) 
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102) 
    at com.sun.proxy.$Proxy22.create(Unknown Source) 
    at org.apache.hadoop.hdfs.DFSOutputStream.newStreamForCreate(DFSOutputStream.java:1725) 
    at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1669) 
    at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1594) 
    at org.apache.hadoop.hdfs.DistributedFileSystem$6.doCall(DistributedFileSystem.java:397) 
    at org.apache.hadoop.hdfs.DistributedFileSystem$6.doCall(DistributedFileSystem.java:393) 
    at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) 
    at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:393) 
    at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:337) 
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:914) 
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:895) 
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:792) 
    at com.mongodb.hadoop.output.MongoRecordWriter.<init>(MongoRecordWriter.java:75) 
    ... 9 more 
+0

私はMongo-hadoopチーム[ここ](https://jira.mongodb.org/browse/HADOOP-292)にバグとして報告しました。 – MiguelPeralvo

答えて

0

それはbugとして報告されました。これはr2.0.0-rc0のcommitに修正されました。

0

私もこの例外に遭遇しましたが、私が使用したバージョンは2.0.2です。まだ修正されていない可能性があります。

関連する問題