web-dev-qa-db-ja.com

Hadoop Mapreduceエラー入力パスが存在しません:hdfs:// localhost:54310 / user / hduser / input "

Ubuntu Linux 15.04にhadoop 2.6をインストールし、正常に動作しました。しかし、サンプルのテストmapreduceプログラムを実行すると、次のエラーが発生します。

org.Apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:54310/user/hduser/input.

親切に助けてください。以下はエラーの詳細です。

hduser@krishadoop:/usr/local/hadoop/sbin$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount input output
Picked up Java_TOOL_OPTIONS: -javaagent:/usr/share/Java/jayatanaag.jar 
15/08/24 15:22:37 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-Java classes where applicable
15/08/24 15:22:38 INFO Configuration.deprecation: session.id is deprecated. Instead, use dfs.metrics.session-id
15/08/24 15:22:38 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
15/08/24 15:22:39 INFO mapreduce.JobSubmitter: Cleaning up the staging area file:/app/hadoop/tmp/mapred/staging/hduser1122930879/.staging/job_local1122930879_0001
org.Apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:54310/user/hduser/input
    at org.Apache.hadoop.mapreduce.lib.input.FileInputFormat.singleThreadedListStatus(FileInputFormat.Java:321)
    at org.Apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.Java:264)
    at org.Apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.Java:385)
    at org.Apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.Java:597)
    at org.Apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.Java:614)
    at org.Apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.Java:492)
    at org.Apache.hadoop.mapreduce.Job$10.run(Job.Java:1296)
    at org.Apache.hadoop.mapreduce.Job$10.run(Job.Java:1293)
    at Java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.Java:415)
    at org.Apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.Java:1628)
    at org.Apache.hadoop.mapreduce.Job.submit(Job.Java:1293)
    at org.Apache.hadoop.mapreduce.Job.waitForCompletion(Job.Java:1314)
    at org.Apache.hadoop.examples.WordCount.main(WordCount.Java:87)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:606)
    at org.Apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.Java:71)
    at org.Apache.hadoop.util.ProgramDriver.run(ProgramDriver.Java:144)
    at org.Apache.hadoop.examples.ExampleDriver.main(ExampleDriver.Java:74)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:606)
    at org.Apache.hadoop.util.RunJar.run(RunJar.Java:221)
    at org.Apache.hadoop.util.RunJar.main(RunJar.Java:136)
8
kan1969

間違った入力パスについて言及したようです。 Hadoopは/user/hduser/inputで入力パスを検索しています。 Hadoopは、Unixのようなツリー構造にも従います。ディレクトリinputに言及するだけであれば、/user/{username}/inputとして解釈されます。

hadoop fs -mkdir -p /user/hduser/input

hadoop fs -put <datafile>  /user/hduser/input
6
Amal G Jose

このパス(ファイル)を物理的に確認してもエラーが発生する場合は、ローカルファイルシステムとHadoop分散ファイルシステム(HDFS)と混同している可能性があります。このmap-reduceを実行するには、このファイルをHDFSに配置する必要があります(ローカルファイルシステム内にのみ配置することはできません)。

このコマンドを使用して、ローカルファイルシステムファイルをHDFSにインポートできます。

hadoop fs -put <local_file_path> <HDFS_diresctory> 

このコマンドを使用して、インポートしたファイルがHDFSに存在することを確認します。

hadoop fs -ls <HDFS_path>
4

クラスタノードではなく、ローカルモードでPigを起動する必要があります。

pig -xローカル

1
Walker Rowe

Hadoopジョブを実行する前に、入力を作成してアップロードする必要があります。たとえば、input.txtファイル、次の操作を行う必要があります。

$HADOOP_HOME/bin/hdfs dfs -mkdir /user/hduser/input
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal $HADOOP_HOME/input.txt /user/hduser/input/input.txt

1行目はディレクトリを作成し、もう1行は入力ファイルをhdfs(hadoop fylesystem)にアップロードします。

1
chomp

プログラムは入力のHadoopパスを見つけることができません。 HadoopのDFSではなく、ローカルシステムファイルを検索しています。

この問題は、プログラムがHDFSの場所を特定できれば解消されます。設定ファイルで指定されたHDFSの場所をプログラムに認識させる必要があります。これを行うには、これらの行をプログラムコードに追加します。

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml"));
conf.addResource(new Path("/usr/local/hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml"));
  1. hDFSでディレクトリを作成する必要があります。たとえば、「hadoop fs -mkdir/input_dir」
  2. 次に、MapReduceプログラムを実行します。入力ディレクトリの絶対パスを指定する必要があるため、形式は次のようになります。
    hadoop jar jarFileName.jar className /input_dir /outputdir

以下はwrongです。これは相対パスであるためですhadoop jar jarFileName.jar className input_dir outputdirwrong

0
Zhihui Shao

入力および出力ファイル/ディレクトリを使用してjarファイルをコンパイルするときは、入力ファイルがすでに(指定されたパスに)作成されており、出力ファイルが存在しないことを確認する必要があります。

テキストファイルを入力ファイルとして提供する場合は、まずテキストファイルをローカルファイルシステムからhdfsにコピーし、次のコマンドを使用してコンパイルします。

hadoop fs -copyFromLocal /input.txt /user/hduser/input.txt
/usr/local/hadoop/sbin$ yarn jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /user/hduser/input.txt /output

/input.txtは、任意のテキストファイルのアドレスに置き換えることができます。

0
Shravanya