网上很多hadoop集群搭建的文章,我这里只写下hdfs,不写mapreduce那块了。主要用来自己记得。
hadoop版本,我用的是比较新的2.3.0。
集群环境
mater 10.19.70.114
slave1 10.19.71.144
slave2 10.19.70.145
系统 ubuntu。windows用户不好意思,已经很久不怎么用windows了。
解压hadoop后,添加配置项$HADOOP_HOME到你解压的目录的hadoop下面。比如我的~/hadoop-2.3.0。至于这个配置项有没有用,我确实不知道。
添加JAVA_HOME,好吧,我试了用配置项,死活不行。好吧,我不知道网上那些是怎么信誓旦旦的成功的,可能是版本问题,我后来改了 $HADOOP_HOME/etc/hadoop-env.sh脚本,在里面加了JAVA_HOME配置。
注意$HADOOP_HOME/etc/hadoop这个目录,后面基本上所有的配置文件都在这里改,可能和老版本位置不太一样。
添加ssh免登权限。这个很多人都只是说配置,没说为什么要配置。其实说白了,集群么,你如果在master启动整个集群时候,master会根据配置,去找所有slave机器,然后通过ssh去启动slave上面的启动脚本。问题来了,他是用什么账号去ssh的,说实话我没搞清楚,我估计就是用你现在master上的那个账号,比如我登陆master机器的账号是hadoop,估计他就直接ssh hadoop@master了。所以你最好在整个集群所有机器上配置相同名字的账号,至于密码,随便吧,这个大家应该知道的。
另外一个,没有必要配置那么多免登,如果你是在master机器上启动集群,那就让master免登所有的slave。如果你在slave1上启动所有集群,那就让slave1免登整个集群其它机器。这个不难理解吧,至于免登,随便找找吧,到处都有,记得别弄反了,我经常弄反。
好关键的hadoop配置,记得我的版本是2.3.0,配置文件和老版本可能不太一样。另外这里只说hdfs,所以我没改map reduce配置,我也不会去启动map reduce的相关东西,东西一点一点来。
到$HADOOP/etc/hadoop下面找到一个core-site.xml。
其中将master机器改成
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://0.0.0.0:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/tmp</value>
</property>
</configuration>
所有的slave改成
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master-hadoop:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/tmp</value>
</property>
</configuration>
在所有的slave机器上,添加host绑定 masterIP master-hadoop
大家可能看到master配置fs.defaultFS和slave不太一样,我用的是0.0.0.0,知道网络的朋友,你们懂得,我就不多做解释了。我一开始没注意,到后来发现slave死活链接不到master上去,启动时候是不会报错啦,但一旦你想操作datanode时候,你懂得,直接报错是没有datanode.原因就是没连上。
最后改下hdfs-site.xml,不管master还是slave都一样。
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.namenode.data.dir</name>
<value>file:/home/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name> #数据副本数量,默认3,我们是两台设置2
<value>2</value>
</property>
</configuration>
注意,我有2台slave所以我的dfs.replication配置是2。
最后启动,好吧,我只配置了hdfs,所以我启动的如下:
$HADOOP_HOME/sbin/start-dfs.sh。然后我只配置master免登slave,所以我只能在master上启动,你们要是不嫌麻烦,所以机器俩俩之间都配置了免登,那就随便哪台都可以启动。