2016-07-06 19 views
3

私は不思議です!私の知る限り、HDFSはデータノードプロセスを実行する必要があります。そのため、サーバ上でのみ動作します。 Sparkはローカルでも実行できますが、Hadoopのコンポーネントであるwinutils.exeが必要です。しかし、それは正確に何をしていますか?どのようにしてWindows上でHadoopを実行することはできませんが、Hadoop上に構築されたSparkを実行できますか?Spark on Windows - winutilsとは何か、なぜそれが必要なのですか?

+0

、スパークは、Hadoopのを使用していますように、ファイルを作成するためにchmodなどのUNIXコマンドを呼び出すようだと:あなたは、他のモジュールは、このクラスに依存し、それは例えば方法、だgetGetPermissionCommand()方法を使用して、org.apache.hadoop.util.Shellでそれを見つけることができますディレクトリ。 – Rdesmond

+0

Hadoopディストリビューションを取得した場合、Sparkを完全に実行することはできません。 winutilsを使わないでファイルを読み書きすることはできません。 –

+0

はい、SparkはHadoop上に構築されているため、いくつかのコンポーネントを使用することは理にかなっています。また、winutils.exeなしでは特定の操作を行うことはできません。質問は主にwinutils.exeの内容に関するものでしたか?それはどのような目的を持っていますか? –

答えて

4

私は少なくとも1つの使用法を知っていますが、これはWindows OS上でシェルコマンドを実行するためのものです。とりわけ

static final String WINUTILS_EXE = "winutils.exe"; 
... 
static { 
    IOException ioe = null; 
    String path = null; 
    File file = null; 
    // invariant: either there's a valid file and path, 
    // or there is a cached IO exception. 
    if (WINDOWS) { 
    try { 
     file = getQualifiedBin(WINUTILS_EXE); 
     path = file.getCanonicalPath(); 
     ioe = null; 
    } catch (IOException e) { 
     LOG.warn("Did not find {}: {}", WINUTILS_EXE, e); 
     // stack trace comes at debug level 
     LOG.debug("Failed to find " + WINUTILS_EXE, e); 
     file = null; 
     path = null; 
     ioe = e; 
    } 
    } else { 
    // on a non-windows system, the invariant is kept 
    // by adding an explicit exception. 
    ioe = new FileNotFoundException(E_NOT_A_WINDOWS_SYSTEM); 
    } 
    WINUTILS_PATH = path; 
    WINUTILS_FILE = file; 

    WINUTILS = path; 
    WINUTILS_FAILURE = ioe; 
} 
... 
public static String getWinUtilsPath() { 
    if (WINUTILS_FAILURE == null) { 
    return WINUTILS_PATH; 
    } else { 
    throw new RuntimeException(WINUTILS_FAILURE.toString(), 
     WINUTILS_FAILURE); 
    } 
} 
... 
public static String[] getGetPermissionCommand() { 
    return (WINDOWS) ? new String[] { getWinUtilsPath(), "ls", "-F" } 
        : new String[] { "/bin/ls", "-ld" }; 
} 
関連する問題