前几天参考了hadoop.apache.org的文档以及csdn学院上的一个视频,在一个破旧刀片机上安装了hadoop,暂且把流程做个记录。
由于刀片机好久没用了,所以首先做的是安装操作系统。发现一共4台刀片,每个刀片只有200多G的硬盘空间,真是好小。安装重启过程中又发现原来每个刀片配置了2个286G的硬盘并且做了raid1,为了进行空间扩容,果断把打算做datanode用的刀片改成raid0,做namenode的刀片继续用raid1.不过其中一台datanode坏了一块硬盘,所以只好继续用raid1.于是最后结果是2台raid0刀片,2台raid1刀片。
分区时给/目录只分配了50G左右,绝大部分空间分配给了/hdfs目录,这里也可以设置为其他的想要存储hadoop数据文件的目录
安装完操作系统后,把namenode的机器命名为hadoop0,datanode机器命名为1、2、3、4,并修改了各个机器的/etc/hosts文件把对其他机器的ip解析加进去。按照官方文档要求,安装了jdk和rsync,并且用ssh-keygen制作了免密码登陆的验证文件,按照文档要求分别部署在各个机器的/root/.ssh/里面。
修改了hadoop里面的etc/hadoop/core-site.html文件,增加了下面这段:其实就是指定了hdfs的入口,namenode的ip。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop0:9000</value>
</property>
</configuration>
接着修改hdfs-site.xml,用类似上面的格式,设置了下面几个参数
<property>
<name>dfs.name.dir</name> //namenode存储文件的路径
<value>/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name> //datanode存储文件的路径
<value>/hdfs/datanode</value>
</property>
<property>
<name>dfs.tmp.dir</name> //临时文件路径
<value>/hdfs/tmp</value>
</property>
<property>
<name>dfs.replication</name> hdfs内文件备份数目,必须大于1
<value>2</value>
</property>
接着修改slaves这个文件,这个文件定义了哪些节点为datanode节点,把hadoop1-3加进去就ok了~。
之后把hadoop复制到所有的节点上,在namenode上执行hadoop文件夹里的sbin/start-dfs.sh,就可以启动hdfs了
之后理论上通过http://hadoop0/50070就可以看到hdfs的状态了。但是这时候我却无法访问这个网址,后来发现是iptables把端口封掉了。关掉namenode上面的iptables的规则后,这个网址可以访问了,但是却只有namenode的信息,看不到datanode,而datanode上面的hadoop进程却存在。这时依然是iptables的问题,导致datanode和namenode无法通信。关掉所有datanode上面的iptables的规则后,重启hadoop,终于正常了。接下来就可以用命令行来放几个文件上去进行测试了~