在初次搭建hadoop的过程难免会出现一些问题。诸如集群突然显示虚拟机出现了问题,导致某一个DataNode数据丢失 并且无法通过Xshell远程访问其他的DataNode 主机和虚拟机无法互相ping通,网上能找的解决办法基本都找了,依然无法解决。因此我能想到的是只能删除虚拟机,重新克隆一台机器,然而还是无法通过远程连接,无奈之下,我重启电脑,发现又可以通过Xshell远程访问了。具体原因尚不知晓。
克隆成功后发现集群先格式化集群正常启动 但是通过web监控页面的50070端口发现没有DataNode存在 上传文件时 显示由于副本为0 必须至少要有一个副本 因此上传失败。找原因发现可能由于我在格式化NameNode之后,没有删除主从节点上面的用于保存临时数据的文件夹(即dfs.name.dir配置的路径下的文件),导致内部namenode存在的关于文件系统的元信息和数据节点对应不上造成的。
删除掉各个节点上面的Hadoop的临时文件目录即:hadoop.tmp.dir目录(对应hdfs-site.xml中设置的dfs.name.dir路径 例如我设置的是/opt/hadoop-2.5.1)然后格式化集群,最后重启集群,会重新生成这个目录,这样问题会解决。
那么,如何确定硬盘的容量呢?如果有6TB左右的数据容量,看你副本数量设置是多少,一般默认是3,那么仅这些就需要18T硬盘,稍微大一点20T吧;这仅仅是HDFS存储;当然要随着保存的时间而适度增加。尚学堂•百战程序员陈老师指出如果你集群上面要跑计算,MR计算出来的数据要保存HDFS的,还是要根据你的结果数据来做判断,大小就看你计算任务了。
计算硬盘大小方法:(原始数据+中间数据+结果数据)*副本数量=总硬盘大小。
关于内存的容量,主要就是用内存保存block和node之间对应关系的,也是要根据数据大小计算的,6T/Block大小(默认为128M)=有多少block-->M个。
一个block占多少内存: 保守地设置每一百万数据块需要1000MB内存;
namenode总内存(兆M)=M*1000MB/100万;
datanode的内存: 一般问题不大,一般都是用于mr的计算,这个东西根据你性能的需要设置
关于多少台机器?根据Task任务的数量和你的性能指标来做决定。一个Block对应一个Mapper任务,上面算出来M个Block了,mapper任务也是那么多。实际测试一下,一定数据量在x台机器上运行时间,根据你的指标去评定要多少台机器。hadoop集群的性能和节点个数近似成正向关系。
领取专属 10元无门槛券
私享最新 技术干货