Solución:
Sé de al menos un uso, es para ejecutar comandos de shell en el sistema operativo Windows. Lo puedes encontrar en org.apache.hadoop.util.Shell
, otros módulos dependen de esta clase y usan sus métodos, por ejemplo getGetPermissionCommand()
método:
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" };
}
Aunque la respuesta de Max cubre el lugar real al que se refiere. Permítanme darles una breve descripción de por qué lo necesitan en Windows:
De la propia página de Confluence de Hadoop:
Hadoop requiere bibliotecas nativas en Windows para funcionar correctamente, lo que incluye el acceso al sistema de archivos file: //, donde Hadoop usa algunas API de Windows para implementar permisos de acceso a archivos similares a posix.
Esto se implementa en HADOOP.DLL y WINUTILS.EXE.
En particular,% HADOOP_HOME% BIN WINUTILS.EXE debe ser localizable
Y creo que debería poder ejecutar Spark y Hadoop en Windows.