Sziasztok,
Próbálom kideríteni, hogy melyik Hadoop/Yarn komponens próbál kommunikálni a 40896 porton. Az a sejtésem, hogy ez egy port tartománynak az egyik eleme. Az alábbi hibát kaptam a konténer logjában:
2015-05-15 11:51:36,526 WARN [main] org.apache.hadoop.mapred.YarnChild: Exception running child : java.net.NoRouteToHostException: No Route to Host from namenode/172.17.0.155 to 172.17.0.159:40896 failed on
socket timeout exception: java.net.NoRouteToHostException: No route to host; For more details see: http://wiki.apache.org/hadoop/NoRouteToHost
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:791)
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:757)
at org.apache.hadoop.ipc.Client.call(Client.java:1472)
at org.apache.hadoop.ipc.Client.call(Client.java:1399)
at org.apache.hadoop.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:244)
at com.sun.proxy.$Proxy8.getTask(Unknown Source)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:132)
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:717)
at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:530)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:494)
at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:607)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:705)
at org.apache.hadoop.ipc.Client$Connection.access$2800(Client.java:368)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1521)
at org.apache.hadoop.ipc.Client.call(Client.java:1438)
Ha van ötletetek kérlek segítsetek. Köszi
- 2443 megtekintés
Hozzászólások
Az xml konfigokat átnézted? Szerintem az egyikben benne lesz. Ha mást nem, akkor valamelyik default xml-ben.
Illetve, milyen hadoop komponensek futnak a 172.17.0.159 IP-n?
- A hozzászóláshoz be kell jelentkezni
A 172.17.0.159 egy slave, és egy DataNode ill egy NodeManager fut rajta. Az imént futtattam még 1x, és akkor pedig ezt kaptam:
No Route to Host from namenode/172.17.0.14 to namenode:58344. A namenode nevő gépen az alábbiak futnak: JobHistoryServer, NodeManager, ResourceManager, SecondaryNameNode, DataNode, NameNode. A probléma az, hogy a cluster Docker konténerekben fut különböző gépeken, szóval tudnom kell, hogy milyen portokat ajánlok ki a konténerekből. A konfigurációt egyébként megtekintheted itt. Volt már pár hely, ahol le kellett szabályoznom a port tartományt, de ez most kifogott rajtam. Próbáltam futás után megnézni mi fut azon a porton, de addigra már semmi (vagy eleve semmi).
- A hozzászóláshoz be kell jelentkezni
Hm, Docker. Na ez felvet egy problémát: a 172-vel kezdődő címekből ez esetben azt gondolnám, hogy tuti hibásak lesznek, és a no route to host is ezt támasztja alá. Ezek az IP-k csak egy fizikai gépen belül érvényesek (ez a docker0 bridge ip tartománya).
Ebből következően, ha több fizikai hostod van, akkor elsőként az IP-ket kellene jól átírni és csak utána a portokkal foglalkozni.
A portokkal kapcsolatban most sajnos nincs előttem élő hadoop, de érdemes lenne átnézni a default config xml-eket (ilyesmi nevekkel guglizd, hogy dfs-default.xml), mert azokban szinte biztosan benne lesznek a szükséges portok.
- A hozzászóláshoz be kell jelentkezni
Az IP is hibás, meg a port is, de ahhoz, hogy megtudjam hol javítsam ki az ip-t meg kéne tudnom, hogy mi akar ott kommunikálni. Ezeket már árnéztem:
https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common…
http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/hd…
http://hadoop.apache.org/docs/r2.6.0/hadoop-yarn/hadoop-yarn-common/yar…
http://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-map…
A többi esetben, mert nem ez volt az első így-úgy ki tudtam deríteni hogyna konfigoljam, hogy jó legyen, de az eddig bevált módszerek itt nem segítettek.
- A hozzászóláshoz be kell jelentkezni
# lsof -i tcp:39552
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 2717 root 235u IPv4 147112 0t0 TCP namenode:60573->172.17.0.15:39552 (SYN_SENT)
java 2733 root 235u IPv4 147111 0t0 TCP namenode:60572->172.17.0.15:39552 (SYN_SENT)
-bash-4.1# ps x | grep 2717
2717 ? Sl 0:01 /usr/lib/jvm/jre-1.8.0-openjdk/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx200m -Djava.io.tmpdir=/tmp/hadoop-root/nm-local-dir/usercache/root/appcache/application_1431716284376_0003/container_1431716284376_0003_01_000012/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/usr/local/hadoop/logs/userlogs/application_1431716284376_0003/container_1431716284376_0003_01_000012 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA org.apache.hadoop.mapred.YarnChild 172.17.0.15 39552 attempt_1431716284376_0003_m_000008_1 12
Elcsíptem egy ilyet.
- A hozzászóláshoz be kell jelentkezni
Kicsit álmos vagyok, úgyhogy remélem nem mondok hülyeséget, de mivel itt namenode (nn) akar kommunikálni, ezért ez vagy egy secondary nn felé akar menni, vagy ami még valószínűbb az a datanode.
A hostname-IP összerendelés /etc/hosts-ban van, ugye?
- A hozzászóláshoz be kell jelentkezni
"A hostname-IP összerendelés /etc/hosts-ban van, ugye?" ott van. A configban mindenhol namenode van, a master dockert -h namenode kapcsolóval indítom, a slaveken pedig a dockert hostoló gép ipje.
Kivétel a yarn.nodemanager.address, mert ott ${yarn.nodemanager.hostname}:36123 van namenode helyett, illetve a hdfs-site.xml fájlban van 0.0.0.0 a datanode-al kapcsolatban, de azokat a bootstrap script kicseréli a gép hostnevére
-
JVM futásidejű monitorozása
- A hozzászóláshoz be kell jelentkezni
A -h kapcsoló azt jelenti, hogy a konténernek is azonos lesz az ip-je a hosttal (közös net ns) ugye? Ha igen, akkor egy gonddal kevesebb van, de valami ehhez hasonló oka kell legyen szerintem annak, hogy a docker0 bridgehez tartozó ip-re akar csatlakozni. Én itt keresgélnék tovább.
Más ötletem most nincs sajnos, de ha meglesz a megoldás megköszönöm ha megosztod mert már érdekel.
- A hozzászóláshoz be kell jelentkezni
A -h a hostnevét adja meg a konténernek, és akkor nem a Docker generál neki random. Én arra szűkítettem a problémát, hogy a slaveen létrejön a YarnChild processz, ami egy ephemeral porton akarja magát láthatóvá tenni a master számára, és oda sajnos nem a hostnevét adja meg, illetve a port nincs publikálva a Dockerben. Mindeképp megosztom, ha lesz megoldás, köszi.
- A hozzászóláshoz be kell jelentkezni
Á, ez esetben még egy ötlet: ha a -h csak a host nevet állítja be, akkor próbáld meg --net=host kapcsolóval indítani a konténert. Ennek hatására a konténerben lévő eth0 és a host eth0 interfészeknek azonos IP:port tartományon kell osztozniuk (shared net ns). Ez talán hozza a host nevet is és a portokat se hiszem hogy kellene onnantól expose-olni.
Ami még jól jöhet ha nem ismered:
- https://docs.docker.com/articles/networking/#tools-and-examples
- https://docs.docker.com/articles/networking/#container-networking
- A hozzászóláshoz be kell jelentkezni
Ahhoz Dockert kéne frissítenem, de most inkább Swarmos irányba megyek, akkor tuti nem kell trükközni a hostnevekkel
- A hozzászóláshoz be kell jelentkezni
Ez se tuti :) Mióta legutóbb a Swarm-ot néztem, állítólag kijött belőle egy új release, szóval lehet már nem így van, de tudomásom szerint a Swarm nem foglalkozik a hálózattal, nem bővíti ki ilyen tekintetben a Docker képességeit.
- A hozzászóláshoz be kell jelentkezni
Azt remélem, hogy össze tudom linkelni a konténereket, és akkor nincs szükség "hálózatkezelésre", legalábbis olvastam erről a képességéről.
- A hozzászóláshoz be kell jelentkezni
Majd még nézd meg ezt a toolt is: https://github.com/coreos/flannel
Lényegileg egy overlay network segítségével összeköti a különböző gépeken lévő docker0 bridge-eket, ezzel elérve, hogy a konténerek úgy lássák egymást mint ha nem is lenne ott a Docker.
Persze ezzel is vannak bajok/kérdések, de neked valószínűleg Hadoophoz jó lesz.
- A hozzászóláshoz be kell jelentkezni
Látják egymást hálózaton ha azonos swarm clusterben vannak, szóval ez lesz a megoldás, Már csak egy service discovery-t kell beüzemelni hozzá :)
- A hozzászóláshoz be kell jelentkezni
Swarmon kívül telepítettél még valamit ami a hálózatot befolyásolja? (pl flannel)
Milyen IP-ket kapnak a konténerek? Ezeken az IP-ken tudják egymást pingelni két külön vason lévő konténer esetében?
- A hozzászóláshoz be kell jelentkezni
Semmit nem telepítettem, 172.0.0.0/x-es címeket kapnak, és igen tudom pingelni A virtuális gépen lévő konténert B virtuális gépen lévőről. A swarm gyakorlatilag egy közös Docker Enginet tesz elérhetővé a konténerek között.
-
JVM futásidejű monitorozása
- A hozzászóláshoz be kell jelentkezni
Hm, azt hiszem újra meg kell néznem ezt a swarmot, mert ezt a featuret nem láttam benne korábban pedig ezek szerint van.
Ez hasznos infó volt, köszi!
- A hozzászóláshoz be kell jelentkezni
Facepalm. Azért tudtam pingelni agépet, mert mindkét hálózatban voltak azonos címek. Igazad van a Swarm nem foglalkozik a hálózattal, viszont ezt találtam:
https://github.com/weaveworks/weave.
-
Konténerezett Hadoop és Cassandra cluster konfigurálása - első rész
- A hozzászóláshoz be kell jelentkezni
Ah, így oké :) Hirtelen nem tudtam mit kezdeni a dologgal, hogy neked működik ami nekem nem. Kösz az infót!
A weave elvileg hasonló mint a flanneld.
- A hozzászóláshoz be kell jelentkezni
subscribe
- A hozzászóláshoz be kell jelentkezni