8

WindowsマシンでNutchを使用してSolrを使用しようとすると、次のエラーが発生します。

Exception in thread "main" java.io.IOException: Failed to set permissions of path: c:\temp\mapred\staging\admin-1654213299\.staging to 0700

私が学んだ多くのスレッドから、nutchで使用されているように見えるhadoopはchmod、Unixマシンでは機能するが、Windowsでは機能しない魔法を実行します。

この問題は1年以上前から存在しています。コード行が表示され、修正が提案されているスレッドが1つ見つかりました。私は本当にこの問題を抱えているのは彼らだけですか?他のすべての人は、Windowsでnutchを実行するためにカスタムビルドを作成していますか?または、Hadoopのものや別のソリューションを無効にするオプションはありますか?たぶん、ナッチ以外のクローラー?

これが私がしていることのスタックトレースです:

    admin@WIN-G1BPD00JH42 /cygdrive/c/solr/apache-nutch-1.6
    $ bin/nutch crawl urls -dir crawl -depth 3 -topN 5 -solr http://localhost:8080/solr-4.1.0
    cygpath: can't convert empty path
    crawl started in: crawl
    rootUrlDir = urls
    threads = 10
    depth = 3
    solrUrl=http://localhost:8080/solr-4.1.0
    topN = 5
    Injector: starting at 2013-03-03 17:43:15
    Injector: crawlDb: crawl/crawldb
    Injector: urlDir: urls
    Injector: Converting injected urls to crawl db entries.
    Exception in thread "main" java.io.IOException: Failed to set permissions of path:         c:\temp\mapred\staging\admin-1654213299\.staging to 0700
        at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:689)
        at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:662)
        at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:509)
        at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:344)
        at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:189)
        at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:116)
        at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:856)
        at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:850)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Unknown Source)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
        at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:850)
        at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:824)
        at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1261)
        at org.apache.nutch.crawl.Injector.inject(Injector.java:281)
        at org.apache.nutch.crawl.Crawl.run(Crawl.java:127)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
        at org.apache.nutch.crawl.Crawl.main(Crawl.java:55)
4

5 に答える 5

4

これが機能するまでには少し時間がかかりましたが、これがnutch1.7で機能するソリューションです。

  1. MavenリポジトリからHadoopCore0.20.2をダウンロードします
  2. $NUTCH_HOME/lib/hadoop-core-1.2.0.jarダウンロードしたファイルを同じ名前に変更して置き換えます。

それはそれであるはずです。

説明

この問題は、UNIXで実行されており、ファイルのアクセス許可ルールを順守していることを前提としているため、hadoopが原因で発生します。この問題は実際には2011年に解決されましたが、nutchは使用するHadoopバージョンを更新しませんでした。関連する修正はここここにあります

于 2014-02-07T20:49:41.130 に答える
2

Nutchも使用していますが、Windowsでの実行はサポートされていません。Cygwinでは、1.4バージョンで同様の問題が発生しました。mapreduceなども同様です。

Ubuntuでvm(仮想ボックス)とWindowsとLinuxの間の共有ディレクトリを使用して問題を解決したので、Windowsで開発および構築し、LinuxでNutch(クロール)を実行できます。

于 2013-03-05T20:50:47.927 に答える
1

NutchをWindowsで実行していますが、カスタムビルドはありません。使ってないので久しぶりです。しかし、私が理解するのに時間がかかったのは、必要な権限を取得するためにWindows管理者としてcygwinを実行する必要があるということです。

于 2013-03-04T08:59:38.403 に答える
1

別のアプローチを提案します。このリンクをチェックしてください。Windowsでエラーを飲み込む方法を説明しており、HadoopをダウングレードしたりNutchを再構築したりする必要はありません。Nutch 2.1でテストしましたが、他のバージョンにも適用されます。クローラーとインデクサーを起動するための単純な.batも作成しましたが、これはNutch 2.x用であり、Nutch1.xには適用できない場合があります。

後世のために、このアプローチには以下が含まれます。

  1. カスタムLocalFileSystem実装の作成:

    public class WinLocalFileSystem extends LocalFileSystem {
    
        public WinLocalFileSystem() {
            super();
            System.err.println("Patch for HADOOP-7682: "+
                "Instantiating workaround file system");
        }
    
        /**
         * Delegates to <code>super.mkdirs(Path)</code> and separately calls
         * <code>this.setPermssion(Path,FsPermission)</code>
         */
        @Override
        public boolean mkdirs(Path path, FsPermission permission)
                throws IOException {
            boolean result=super.mkdirs(path);
            this.setPermission(path,permission);
            return result;
        }
    
    
        /**
         * Ignores IOException when attempting to set the permission     
         */
        @Override
        public void setPermission(Path path, FsPermission permission)
                throws IOException {
            try {
                super.setPermission(path,permission);
            }
            catch (IOException e) {
                System.err.println("Patch for HADOOP-7682: "+
                    "Ignoring IOException setting persmission for path \""+path+
                    "\": "+e.getMessage());
            }
        }
    }
    
  2. それをコンパイルし、JARを下に配置します${HADOOP_HOME}/lib

  3. そして、変更して登録します${HADOOP_HOME}/conf/core-site.xml

    fs.file.implcom.conga.services.hadoop.patch.HADOOP_7682.WinLocalFileSystemWindowsで問題HADOOP-7682のパッチを有効にします

于 2014-02-18T15:19:50.703 に答える
0

プロジェクトの依存関係hadoop-coreとhadoop-toolsを変更する必要があります。0.20.2バージョンを使用していますが、正常に動作します。

于 2014-03-03T13:49:58.573 に答える