2016-04-07 16 views
0

私たちはLinuxのhadoopクラスタを持っていますが、さまざまな理由からいくつかのWindowsクライアントがLinuxクラスタにデータを接続してプッシュしています。 hadoop1ではcygwin経由でhadoopを実行することができました しかし、hadoop2ではに記載されているように、cygwinは必須ではありません。LinuxクラスタのWindows上のHadoop2クライアント

質問を正確に何が変わったのか

  1. ?なぜクライアント(唯一)は cygwinの下で動かないのですか?他の考慮すべき点はパスとは別に演奏されていますか?別に仕事の提出については、以下のプロパティから
  2. は、LinuxクラスタのHadoop-2.6.0-cdh5.5.2を抽出

    conf.set("mapreduce.app-submission.cross-platform", "true");

  3. との対話の窓/クライアントのために考慮する必要がある何か他のものがあります$ HADOOP_HOME/etcの正しい設定でcygwinから実行すると、いくつかのクラスパスまたはクラスパス形成の問題クラスが見つかりませんでしたか?彼らはcygwinのパスを含むように例えば次にクラスパスを見て次の実行

    hdfs dfs -ls 
    Error: Could not find or load main class org.apache.hadoop.fs.FsShell 
    

が見えます。私の質問上記の私が試してみて、この問題を解決するために、さらに行くべきであるために

16/04/07 16:01:05 ERROR util.Shell: 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. 
      at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:378) 
      at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:393) 
      at org.apache.hadoop.util.Shell.<clinit>(Shell.java:386) 
      at org.apache.hadoop.util.GenericOptionsParser.preProcessForWindows(GenericOptionsParser.java:438) 
      at org.apache.hadoop.util.GenericOptionsParser.parseGeneralOptions(GenericOptionsParser.java:484) 
      at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:170) 
      at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:153) 
      at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:64) 
      at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) 
      at org.apache.hadoop.fs.FsShell.main(FsShell.java:362) 
    16/04/07 16:01:13 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
    Warning: fs.defaultFs is not set when running "ls" command. 
    Found 15 items 
    -ls: Fatal internal error 
    java.lang.NullPointerException 
      at java.lang.ProcessBuilder.start(ProcessBuilder.java:1010) 
      at org.apache.hadoop.util.Shell.runCommand(Shell.java:505) 
      at org.apache.hadoop.util.Shell.run(Shell.java:478) 
      at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:738) 
      at org.apache.hadoop.util.Shell.execCommand(Shell.java:831) 
      at org.apache.hadoop.util.Shell.execCommand(Shell.java:814) 
      at org.apache.hadoop.fs.FileUtil.execCommand(FileUtil.java:1100) 
      at org.apache.hadoop.fs.RawLocalFileSystem$DeprecatedRawLocalFileStatus.loadPermissionInfo(RawLocalFileSystem.java:582) 
      at org.apache.hadoop.fs.RawLocalFileSystem$DeprecatedRawLocalFileStatus.getOwner(RawLocalFileSystem.java:565) 
      at org.apache.hadoop.fs.shell.Ls.adjustColumnWidths(Ls.java:139) 
      at org.apache.hadoop.fs.shell.Ls.processPaths(Ls.java:110) 
      at org.apache.hadoop.fs.shell.Command.recursePath(Command.java:373) 
      at org.apache.hadoop.fs.shell.Ls.processPathArgument(Ls.java:98) 
      at org.apache.hadoop.fs.shell.Command.processArgument(Command.java:271) 
      at org.apache.hadoop.fs.shell.Command.processArguments(Command.java:255) 
      at org.apache.hadoop.fs.shell.FsCommand.processRawArguments(FsCommand.java:118) 
      at org.apache.hadoop.fs.shell.Command.run(Command.java:165) 
      at org.apache.hadoop.fs.FsShell.run(FsShell.java:305) 
      at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 
      at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) 
      at org.apache.hadoop.fs.FsShell.main(FsShell.java:362) 

:jarファイルは、これは以下になり

in $HADOOP_HOME/etc/hdfs.sh locate the dfs command and change to 
     elif [ "$COMMAND" = "dfs" ] ; then 
     if $cygwin; then 
     CLASSPATH=`cygpath -p -w "$CLASSPATH"` 
     fi 
     CLASS=org.apache.hadoop.fs.FsShell 

を見上げることができるように、Windowsのパスに変換しようとし私の既存のクライアントの.shスクリプトを再利用するか、あるいは.batを変換することができますか?

+0

下で実行していないいくつかのコマンドをオフにするためのスクリプトを修正

hereを説明したパスにインストールする必要があります.batは命令の長さに関連するすべての制限を伴う悪夢になっています。クラスパスなど – sunny

答えて

0

cygwinがcygwinパスではなくwindowsパスを返す必要があるという問題があります。またwinutils.exeは、単に実際の勝利のパスを返し、クライアント.SHを変換cygwinの

#!/bin/bash 
# fix $HADOOP_HOME/bin/hdfs 
sed -i -e "s/bin=/#bin=/g" $HADOOP_HOME/bin/hdfs 
sed -i -e "s#DEFAULT_LIBEXEC_DIR=\"\$bin\"/../libexec#DEFAULT_LIBEXEC_DIR=\"\$HADOOP_HOME\\\libexec\"#g" $HADOOP_HOME/bin/hdfs 
sed -i "/export CLASSPATH=$CLASSPATH/i CLASSPATH=\`cygpath -p -w \"\$CLASSPATH\"\`" $HADOOP_HOME/bin/hdfs 

# fix $HADOOP_HOME/libexec/hdfs-config.sh 
sed -i -e "s/bin=/#bin=/g" $HADOOP_HOME/libexec/hdfs-config.sh 
sed -i -e "s#DEFAULT_LIBEXEC_DIR=\"\$bin\"/../libexec#DEFAULT_LIBEXEC_DIR=\"\$HADOOP_HOME\\\libexec\"#g" $HADOOP_HOME/libexec/hdfs-config.sh 

# fix $HADOOP_HOME/libexec/hadoop-config.sh 
sed -i "/HADOOP_DEFAULT_PREFIX=/a HADOOP_PREFIX=" $HADOOP_HOME/libexec/hadoop-config.sh 
sed -i "/export HADOOP_PREFIX/i HADOOP_PREFIX=\`cygpath -p -w \"\$HADOOP_PREFIX\"\`" $HADOOP_HOME/libexec/hadoop-config.sh 

# fix $HADOOP_HOME/bin/hadoop 
sed -i -e "s/bin=/#bin=/g" $HADOOP_HOME/bin/hadoop 
sed -i -e "s#DEFAULT_LIBEXEC_DIR=\"\$bin\"/../libexec#DEFAULT_LIBEXEC_DIR=\"\$HADOOP_HOME\\\libexec\"#g" $HADOOP_HOME/bin/hadoop 
sed -i "/export CLASSPATH=$CLASSPATH/i CLASSPATH=\`cygpath -p -w \"\$CLASSPATH\"\`" $HADOOP_HOME/bin/hadoop 
関連する問題