Hadoop 2.2.0シングルノードをセットアップして起動しました。 FS http://localhost:50070/
次に、次のコードを使用してダミーファイルを書き込もうとしました。
public class Test {
public void write(File file) throws IOException{
FileSystem fs = FileSystem.get(new Configuration());
Path outFile = new Path("test.jpg");
FSDataOutputStream out = fs.create(outFile);
}
次の例外が発生します
INFO: DEBUG - field org.Apache.hadoop.metrics2.lib.MutableRate org.Apache.hadoop.security.UserGroupInformation$UgiMetrics.loginSuccess with annotation @org.Apache.hadoop.metrics2.annotation.Metric(valueName=Time, value=[Rate of successful kerberos logins and latency (milliseconds)], about=, type=DEFAULT, always=false, sampleName=Ops)
INFO: DEBUG - field org.Apache.hadoop.metrics2.lib.MutableRate org.Apache.hadoop.security.UserGroupInformation$UgiMetrics.loginFailure with annotation @org.Apache.hadoop.metrics2.annotation.Metric(valueName=Time, value=[Rate of failed kerberos logins and latency (milliseconds)], about=, type=DEFAULT, always=false, sampleName=Ops)
INFO: DEBUG - UgiMetrics, User and group related metrics
INFO: DEBUG - Creating new Groups object
INFO: DEBUG - Trying to load the custom-built native-hadoop library...
INFO: DEBUG - Failed to load native-hadoop with error: Java.lang.UnsatisfiedLinkError: no hadoop in Java.library.path
INFO: DEBUG - Java.library.path=/usr/lib/jvm/jdk1.7.0/jre/lib/AMD64:/usr/lib/jvm/jdk1.7.0/jre/lib/i386::/usr/Java/packages/lib/i386:/lib:/usr/lib
INFO: WARN - Unable to load native-hadoop library for your platform... using builtin-Java classes where applicable
INFO: DEBUG - Falling back to Shell based
INFO: DEBUG - Group mapping impl=org.Apache.hadoop.security.ShellBasedUnixGroupsMapping
INFO: DEBUG - Group mapping impl=org.Apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback; cacheTimeout=300000
INFO: DEBUG - hadoop login
INFO: DEBUG - hadoop login commit
INFO: DEBUG - using local user:UnixPrincipal: qualebs
INFO: DEBUG - UGI loginUser:qualebs (auth:SIMPLE)
INFO: DEBUG - Failed to detect a valid hadoop home directory
Java.io.IOException: HADOOP_HOME or hadoop.home.dir are not set.
at org.Apache.hadoop.util.Shell.checkHadoopHome(Shell.Java:225)
at org.Apache.hadoop.util.Shell.<clinit>(Shell.Java:250)
at
org.Apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.Java:639)
at org.Apache.hadoop.fs.FilterFileSystem.setPermission(FilterFileSystem.Java:468)
at org.Apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.Java:456)
at org.Apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.Java:424)
at org.Apache.hadoop.fs.FileSystem.create(FileSystem.Java:905)
at org.Apache.hadoop.fs.FileSystem.create(FileSystem.Java:886)
at org.Apache.hadoop.fs.FileSystem.create(FileSystem.Java:783)
at org.Apache.hadoop.fs.FileSystem.create(FileSystem.Java:772)
at com.qualebs.managers.HadoopDFS.writer(HadoopDFS.Java:41)
HADOOP_HOMEまたはhadoop.home.dirはどこに設定しますか?オペレーティングシステムはUbuntu 11.10です。
私が構成した唯一の構成ファイルは、プロパティが追加された次のファイルです
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
熱心にあなたの返事を待っています。
私はこれを行うことによって私の解決策を見つけました:
_System.setProperty("hadoop.home.dir", "/");
_
この例外は_org.Apache.hadoop.util.Shell
_の checkHadoopHome()
によってスローされます
それが役に立てば幸い!
私はこれと同じ正確なエラーメッセージを何かから受け取っていましたが、パスに関連しているとはまったく思いません。ロガーを不適切に設定しました:
エラーの原因でした:
import org.Apache.log4j._
trait Logger {
val logger = LogManager.getRootLogger
}
修正しました:
import org.Apache.log4j._
trait Logger {
val logger = LogManager.getRootLogger
logger.setLevel(Level.INFO)
}
解決策は、パスを変更することではないかもしれません。
hadoop専用のユーザーを使用していない場合は、ターミナルbashファイルに追加してください。
1. start terminal
2. Sudo vi .bashrc
3. export HADOOP_HOME=YOUR_HADOOP_HOME_DIRECTORY(don't include bin folder)
4. save
5. restart terminal and check it if it's saved by typing : echo $HADOOP_HOME
このセットアップはWindowsでは機能しません。回避策は、プロジェクトにフォルダー(たとえば、winutils/bin)を作成し、その中にwinutils.exeを配置することです( https://wiki.Apache.org/hadoop/WindowsProblems を参照)。次に、Javaコードで
static {
String OS = System.getProperty("os.name").toLowerCase();
if (OS.contains("win")) {
System.setProperty("hadoop.home.dir", Paths.get("winutils").toAbsolutePath().toString());
} else {
System.setProperty("hadoop.home.dir", "/");
}
}
お役に立てば幸いです。