hadoop平台搭建小记 (兼文档从小白做起? )+自身遇到的bug
备注 : 本身这是博主写的 但是中间很多精华并不是我写的 所以不算原创文 仅此声明~~~~~~
1 安装docker
引流...
https://blog.csdn.net/tina_ttl/article/details/51372604
2 搭建hadoop
同上....两步走
https://blog.csdn.net/u013140345/article/details/79771208
https://blog.csdn.net/u013140345/article/details/79773212
PS:不单单是用比较流行的CRT或者docker本身给的Terminal 同样可以用xshell等等支持ssh的连接 但是记住 因为他们之间的关系
是本机(宿主机)-》搭载docker虚拟机(docker平台)-》搭载docker的容器 ,所以xftp不好连接进入容器本身操作文件 ..比较好的做法就是做文件夹映射到固定位置 以下会有文档记录博主当时做的时候的参考文档 ... 我们所连接的容器是由每次开主机之后 进入 Terminal开启Docker 所分配的172.17.0.xx也是docker的局域ip xshell是连不上的 xshell每次都是连接192.168.99.100由docker进去容器..用xshell仅仅是因为方便 !
在做docker+hadoop集群搭建的时候最重要的就是ssh服务
建议将ssh服务吃透 才能比较好的去调整可能出现的hadoop搭建失败问题.... (注意ssh的各个文件..)
docker本身类似一个虚拟机平台 通过拉取公用仓库所提供的的镜像到私人仓库(开启docker之后的192.168.99.100 ->进去之后的 命令docker images 即是你私人拥有的镜像)然后通过run调用镜像新建容器提供使用..
建议在上手docker装载各种操作系统或者数据库,服务等等之类的的时候随时记得保存镜像 免得出现从删库到跑路的情况~
下面有一份常用的docker命令表 (非全部..).记得 一般就ok了
.常用命令:(前面一般都加docker)
docker ps -a :查看容器(当前所有容器)
images :查看所有镜像(自己的)
pull + 镜像名:Tag名 :从公共镜像库拉取所需镜像
run + -it + -v 文件夹映射,比如 /c/Users:/root/build) + 容器名【:tag名】 + /bin/bash(shell命令) :新建容器
exit :离开容器 (使用run之后第一次离开容器会自动关闭容器)
attench :进入开启的容器(再次exit或者ctrl+d会关闭)
exec : 进入开启的容器(再次exit或者ctrl+d 不会关闭)
start + 容器ID(前三位以上都可以)(或者容器名字 容器名字在run的时候加参数 --name 标识出来) :开启容器
stop + 容器ID(同上) :关闭容器
rm :删除容器
rmi :删除镜像
以上是一般会用到的 还有更多命令有兴趣可以自己查..
然后是作者搭建时曾经遇到的问题 (两个节点DataNode有一个搭建失败 )
java.io.IOException: Incompatible clusterIDs in /usr/local/hadoop/datanode_dir: namenode clusterID = CID-a5104754-f75d-47c1-a0da-c7100947ed8e; datanode clusterID = CID-cd1c8df6-ddad-4ef2-a240-0e8188e3f585
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:760)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadStorageDirectory(DataStorage.java:293)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadDataStorage(DataStorage.java:409)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:388)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:556)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1574)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1535)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:368)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:266)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:750)
at java.lang.Thread.run(Thread.java:748)
2018-10-08 11:19:52,632 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Block pool ID needed, but service not yet registered with NN, trace:
java.lang.Exception
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.getBlockPoolId(BPOfferService.java:196)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.hasBlockPoolId(BPOfferService.java:206)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.shouldRetryInit(BPOfferService.java:812)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.shouldRetryInit(BPServiceActor.java:792)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:755)
at java.lang.Thread.run(Thread.java:748)
原因 (作者在搭建一主公2忠臣集群的时候 - - 换了docker的局域ip 然后ssh就互相拼不通了 同时中间一个从服务器就暴露了clusterID不同的问题 (操作不当引起的????) )
解决方案 1 查配置文件etc/hadoop/hdfs-site.xml 知道data存放文件夹 进入其中的current 然后vim编辑 VERSION文件 修改clusterID为和 报错信息中的namenode 的ID相同 即可
2 直接删除data存放文件夹 (第一种的变种 在停掉集群之后删除错误data让hadoop自动格式化创建初始文件 ...)
附录:博客主用过的文档....
百度云盘...
链接:https://pan.baidu.com/s/1f9sQWO-CMUKdvVuDSvy04Q 密码:3fw6