Hadoop full distributed clusterのステップを構築します.
11824 ワード
前言:
今日はhadoop in actionのchapter 2.3を勉強しました.そこでfull distributed hadoop clusterを作りたいです.本のようにしてきましたが、問題が山積みになりました.最後に一つの問題の解決のもとで成功しました.後から来る同仁を防止するために、回り道をして、ここで措置と相応する注意事項を記録しておきます.
ここで、このブログの作者に感謝します.http://blog.csdn.net/a15039096218/article/details/7832152成果をありがとうございます.間違いの原因を見つけました.
環境:
JDK 1.6.0_30
Hadoop:1.2.1
1 設定ファイル
A)xml設定
本のデフォルトの配置ファイルを使えばいいです.自分のnamenodeマシンのhostnameによって設定ファイルを変更します.木の上のものをコピーして適当に直したほうがいいです.最初から自分で書きます.
core-site.xml
masters:second name nodeのhostnameを入れます.
slaaves:data nodeのhostnameを入れます.
2 ssh及びhostnameに関する準備
A)ssh無料登録設定:
「hadoop in action」の設定を使って、基本的には問題がないです.問題があれば、チェックします.sshフォルダchmod 700、authorizdkeys chmod 600;
name nodeマシンを創立して各ノードの登録を免除します.
B)hostnameの準備
各ノードには、自分とname nodeのhostnameに対応するipを配置する. /etc/hostsファイルに配置する.
例えば、hadoop 1ノードipは192.16.1.101であり、master ipは192.16.1.100である.hadoop 1ノードに配置する必要があります.
192.16.1.100マスター
192.16.1.11 hadoop 1
二つのマッピング
マスターノードには、ホームnameを各ノードのipマップに配置します.
配置がよくなければ、エラーを出しやすいです.
C)iptablesは9000ポートを展開する.
9000ポートを展開する配置規則を追加します.
iptables-I INPUT 1-p tcp-m state--state NEW-m tcp--dport 9000-j ACCEPT
service iptables save
もちろん、簡単で乱暴な方法を使ってもいいです.service iptables stopまたはiptables-Fはiptablesを一時的に無効にします.
この段階でやっていないと、エラーを出しやすいです.
この時マスターのname nodeプロセスとjob trackerプロセスは起動に成功しましたが、すべてのslaaveノードのdatanodeとtasktrackerプロセスは成功しました.
3 namendoe-format
前の二歩が完成したら、覚えてください.HOME/bin hadoop namenode-formatは、このステップを忘れたらエラーを報告します.
4 start-all.sh
三歩前に完成したら、$HADOOP_を使用できます.HOME/bin start-all.shが起動し、各ノードが対応するプロセスがあるかどうかを確認すればいいです.
よくあるエラー
エラー1:Does not contain a valid host:port authority:file://
エラー2:org.apache.hadoop.hdfs.server.datanode.DataNode:java.net.Uniknown HostException
エラー3: NoRouteToHost Exception:No route to host
エラー4: org.apache.hadoop.hdfs.server.namenode.FSS Namesystem:FSS Namesystem initialization failed.
エラー5:Incomppatible namespaceIDs in/tmp/hadoop-lscm/dfs/data:namenode namespaceID=1585693735;datanode namespaceID=1804912251
Your Hadoop namespaceID became corupted.Unfortunally the easure st thing to do reformat the HFS.
ソリューション:
You need to do something like this:
参考記事:
hadoop起動エラーのまとめ http://blog.csdn.net/a15039096218/article/details/7832152
Hadoop初体験——問題のまとめ http://www.cnblogs.com/hustcat/archive/2010/06/30/1768506.html
今日はhadoop in actionのchapter 2.3を勉強しました.そこでfull distributed hadoop clusterを作りたいです.本のようにしてきましたが、問題が山積みになりました.最後に一つの問題の解決のもとで成功しました.後から来る同仁を防止するために、回り道をして、ここで措置と相応する注意事項を記録しておきます.
ここで、このブログの作者に感謝します.http://blog.csdn.net/a15039096218/article/details/7832152成果をありがとうございます.間違いの原因を見つけました.
環境:
JDK 1.6.0_30
Hadoop:1.2.1
1 設定ファイル
A)xml設定
本のデフォルトの配置ファイルを使えばいいです.自分のnamenodeマシンのhostnameによって設定ファイルを変更します.木の上のものをコピーして適当に直したほうがいいです.最初から自分で書きます.
core-site.xml
<?xml version=”1.0”?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
<description>The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation.
</description>
</property>
</configuration>
hdfs-site.xml<?xml version=”1.0”?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
<description>The actual number of replications can be specified when the
file is created.</description>
</property>
</configuration>
mapred-site.xml<?xml version=”1.0”?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
<description>The host and port that the MapReduce job tracker runs at.
</description>
</property>
</configuration>
B) マスター、slaavesファイルmasters:second name nodeのhostnameを入れます.
slaaves:data nodeのhostnameを入れます.
2 ssh及びhostnameに関する準備
A)ssh無料登録設定:
「hadoop in action」の設定を使って、基本的には問題がないです.問題があれば、チェックします.sshフォルダchmod 700、authorizdkeys chmod 600;
name nodeマシンを創立して各ノードの登録を免除します.
B)hostnameの準備
各ノードには、自分とname nodeのhostnameに対応するipを配置する. /etc/hostsファイルに配置する.
例えば、hadoop 1ノードipは192.16.1.101であり、master ipは192.16.1.100である.hadoop 1ノードに配置する必要があります.
192.16.1.100マスター
192.16.1.11 hadoop 1
二つのマッピング
マスターノードには、ホームnameを各ノードのipマップに配置します.
配置がよくなければ、エラーを出しやすいです.
C)iptablesは9000ポートを展開する.
9000ポートを展開する配置規則を追加します.
iptables-I INPUT 1-p tcp-m state--state NEW-m tcp--dport 9000-j ACCEPT
service iptables save
もちろん、簡単で乱暴な方法を使ってもいいです.service iptables stopまたはiptables-Fはiptablesを一時的に無効にします.
この段階でやっていないと、エラーを出しやすいです.
この時マスターのname nodeプロセスとjob trackerプロセスは起動に成功しましたが、すべてのslaaveノードのdatanodeとtasktrackerプロセスは成功しました.
3 namendoe-format
前の二歩が完成したら、覚えてください.HOME/bin hadoop namenode-formatは、このステップを忘れたらエラーを報告します.
4 start-all.sh
三歩前に完成したら、$HADOOP_を使用できます.HOME/bin start-all.shが起動し、各ノードが対応するプロセスがあるかどうかを確認すればいいです.
よくあるエラー
エラー1:Does not contain a valid host:port authority:file://
ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.lang.IllegalArgumentException: Does not contain a valid host:port authority: file:///
at org.apache.hadoop.net.NetUtils.createSocketAddr(NetUtils.java:164)
at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:212)
at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:244)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:280)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:569)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1479)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1488)
エラーの原因:配置ファイルにあって、自分で手書きする時は「property」属性が少なくなりました.この問題があったら、プロファイルの属性が正しいか確認してください.エラー2:org.apache.hadoop.hdfs.server.datanode.DataNode:java.net.Uniknown HostException
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.net.UnknownHostException: hadoop1: hadoop1
at java.net.InetAddress.getLocalHost(InetAddress.java:1360)
at org.apache.hadoop.security.SecurityUtil.getLocalHostName(SecurityUtil.java:271)
at org.apache.hadoop.security.SecurityUtil.login(SecurityUtil.java:289)
at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:313)
at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1712)
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1651)
at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1669)
at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1795)
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1812)
にこのエラーが発生すると、対応するノードのhostnameが対応するipアドレスをマッピングしていないので、マッピングを修正すれば良い.エラー3: NoRouteToHost Exception:No route to host
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Call to hadoop1/192.168.1.101:9000 failed on local exception: java.net.NoRouteToHostException: No route to host
at org.apache.hadoop.ipc.Client.wrapException(Client.java:1150)
at org.apache.hadoop.ipc.Client.call(Client.java:1118)
at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:229)
at $Proxy5.getProtocolVersion(Unknown Source)
at org.apache.hadoop.ipc.RPC.checkVersion(RPC.java:422)
at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:414)
at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:392)
at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:374)
at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:453)
at org.apache.hadoop.ipc.RPC.waitForProxy(RPC.java:335)
at org.apache.hadoop.ipc.RPC.waitForProxy(RPC.java:300)
at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:385)
at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:321)
at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1712)
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1651)
at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1669)
at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1795)
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1812)
Caused by: java.net.NoRouteToHostException: No route to host
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)
at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:511)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:481)
at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:457)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:583)
at org.apache.hadoop.ipc.Client$Connection.access$2200(Client.java:205)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1249)
at org.apache.hadoop.ipc.Client.call(Client.java:1093)
... 16 more
これは一般的にdatanodeに現れて、この異常が発生しました.理由はmasterの9000ポートにアクセスできないことです.原因はiptablesファイアウォールでブロックされたり、masterのnamenodeが起動できなかったりします.エラー4: org.apache.hadoop.hdfs.server.namenode.FSS Namesystem:FSS Namesystem initialization failed.
ERROR org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem initialization failed.
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-lscm/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:304)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:104)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:427)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:395)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:299)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:569)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1479)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1488)
2014-07-10 18:50:59,385 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-lscm/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:304)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:104)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:427)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:395)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:299)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:569)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1479)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1488)
このエラーを報告したのは、namenodeがフォーマットされていないからです.HOME/bin hadoop namenode-formatフォーマットで結構です.エラー5:Incomppatible namespaceIDs in/tmp/hadoop-lscm/dfs/data:namenode namespaceID=1585693735;datanode namespaceID=1804912251
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /tmp/hadoop-lscm/dfs/data: namenode namespaceID = 1585693735; datanode namespaceID = 1804912251
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:232)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:147)
at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:414)
at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:321)
at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1712)
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1651)
at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1669)
at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1795)
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1812)
理由:Your Hadoop namespaceID became corupted.Unfortunally the easure st thing to do reformat the HFS.
ソリューション:
You need to do something like this:
bin/stop-all.sh
rm -Rf /tmp/hadoop-your-username/*
bin/hadoop namenode -format
データを削除する時は、すべてのデータノードのデータを削除してください.参考記事:
hadoop起動エラーのまとめ http://blog.csdn.net/a15039096218/article/details/7832152
Hadoop初体験——問題のまとめ http://www.cnblogs.com/hustcat/archive/2010/06/30/1768506.html