=====HDFS Files remote lesen - Mit MS Windows Clients mit Hadoop arbeiten=====
=== HDFS Zugriff über Windows ===
Software Clients:
* http://bigdata.red-gate.com/hdfs-explorer.html
=== Java Klasse um vom Windows Host auf das HDFS zuzugreifen===
package gpi.hadoop;
/**
see main code:
https://sites.google.com/site/hadoopandhive/home/hadoop-how-to-read-a-file-from-hdfs
*/
import java.io.*;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.conf.*;
public class ReadHDFS {
public static void main(String[] args) throws Exception {
try {
//configuration
Configuration conf = new Configuration();
Path path = new Path("hdfs://nosqldb01:9000/data/gpi/README.txt");
//handle to the file
FileSystem fs = FileSystem.get(path.toUri(), conf);
FSDataInputStream inputStream = fs.open(path);
//read the file
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String line;
line = br.readLine();
while (line != null) {
System.out.println(line);
line = br.readLine();
}
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
== Fehler beim ersten Versuch: ==
2014-07-13 13:16:34,686 ERROR [main] util.Shell (Shell.java:getWinUtilsPath(336)) - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
Lösung:
Hadoop Home Directory setzen: Java Parameter **hadoop.home.dir** wie z.B: "-Dhadoop.home.dir=D:\entwicklung\libraries\hadoop-2.4.1"
**UND**
Die Libraries für Windows übersetzen siehe => https://wiki.apache.org/hadoop/Hadoop2OnWindows oder alternativ hier eine übersetze Version der Libraries laden => http://www.srccodes.com/p/article/39/error-util-shell-failed-locate-winutils-binary-hadoop-binary-path .
==== Hadoop local mit cygwin auf einen Windows 7 Rechner aufrufen ====
Cygwin installieren und Umgebung wie unter Linux in der .bashrc setzen:
#Hadoop Home
export HADOOP_HOME=/cygdrive/d/entwicklung/libraries/hadoop-2.4.1
# Avoid Java Lib errros
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib -Dhadoop.home.dir=D:\entwicklung\libraries\hadoop-2.4.1"
# Hadoop environment Variables
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
#JAVA
export JAVA_HOME=/cygdrive/d/entwicklung/java/jdk1.7.0_45
#fix CLASSPATH
export HADOOP_CLASSPATH=$(cygpath -pw $($HADOOP_HOME/bin/hadoop classpath)):$HADOOP_CLASSPATH
#Defaults
export PATH=$HADOOP_HOME/bin:$PATH
Beim ersten Test des ausgepackten Hadoop wird folgender Fehler mit dem Classpath geworfen:
$ ./hadoop version
Fehler: Hauptklasse org.apache.hadoop.util.VersionInfo konnte nicht gefunden oder geladen werden
Lösung:
Umgebung anpassen oder im Script den Aufbau vom Klassenpfad anpassen:
export HADOOP_CLASSPATH=$(cygpath -pw $($HADOOP_HOME/bin/hadoop classpath)):$HADOOP_CLASSPATH
Hadoop Konfigurationsdateien auf den Windows Rechner kopieren.
Test:
hdfs dfs -ls /
Fehler:
2014-08-06 20:06:25,222 ERROR [main] util.Shell (Shell.java:getWinUtilsPath(336) ) - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Ha doop binaries.
at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:318)
Lösung:
Auch hier scheint ein Problem mit den Pfaden in Cygwin vorzuliegen, siehe dieses Jira Ticket https://issues.apache.org/jira/browse/HADOOP-10133
Datei $HADOOP_HOME\libexec\hadoop-config.sh anpassen:
# nach allen anderen HADOOP_OPTS das so setzen:
HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.home.dir="$(cygpath -pw "$HADOOP_PREFIX")""
Nächster Fehler:
Exception in thread "main" java.lang.RuntimeException: core-site.xml not found
at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:
Lösung noch nicht gefunden, für jeden Tipp dankbar :-(