2016-07-06 2 views
3

Мне любопытно! Насколько мне известно, HDFS требует, чтобы процессы datanode запускались, и именно поэтому он работает только на серверах. Spark может запускаться локально, но для этого нужен winutils.exe, который является компонентом Hadoop. Но что именно он делает? Как это, что я не могу запустить Hadoop в Windows, но я могу запустить Spark, который построен на Hadoop?Spark on Windows - Что такое winutils и зачем оно нам нужно?

+0

Среди других вещей, похоже, Спарк использует Hadoop, который вызывает команду Unix, такие как CHMOD для создания файлов и каталоги. – Rdesmond

+0

Вы не можете полностью запустить Spark, если вы захватите дистрибутив Hadoop. Вы не можете читать и писать файлы без winutils. –

+0

Да, Spark построен на Hadoop, поэтому имеет смысл использовать некоторые его компоненты. Кроме того, вы не можете выполнять определенные операции без winutils.exe, вопрос в основном касался того, что находится в этом winutils.exe? Какую цель он имеет? –

ответ

4

Я знаю хотя бы одно использование, оно предназначено для запуска команд оболочки в ОС Windows. Вы можете найти его в org.apache.hadoop.util.Shell, другие модули зависят от этого класса и используют это методы, например getGetPermissionCommand() метода:

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" }; 
} 
Смежные вопросы