1 搭建这个完全分布式的前提环境:
配置好了jdk环境
配置好了ssh免密码登录(详见我的另外一篇博客,专门说ssh免密码登录)
我这里设置了四台机器,一台做master,另外三台做slave,hosts配置如下
192.168.8.94 master
192.168.8.95 slave1
192.168.8.96 slave2
192.168.8.97 slave3
2 hadoop配置(以下的配置只在master上进行,配置好了hadoop之后,再发送到另外三台slave机器上,再配置环境变量就可以了)
首先把hadoop 2.6.0.tar.gz解压到/usr/local目录下
解压命令:sudo tar -xzvf hadoop 2.6.0.tar.gz
然后把解压后的文件夹改名为hadoop
2.1 下面配置环境变量:
配置bashrc,命令 sudo vim ~/.bashrc
配置信息如下图:
修改好了之后,执行source命令生效环境变量,命令 source ~/.bashrc
配置/etc/profile
配置信息如下:
修改好了之后,执行source /etc/profile 命令生效
2.2 配置hadoop的配置文件
所有hadoop的配置文件都在/usr/local/hadoop/etc/hadoop
首先是slaves文件,把所有slave的主机名都写在里面,一行一个,就可以了(注意,要与hosts里配置的名字相一致)
slave1
slave2
slave3
hadoop-env.sh文件
之前这一行是被注释掉的,解除注释后,加上自己的jdk绝对路径。
yarn-env.sh文件,和hadoop-env.sh一样,配置jdk环境变量
core-site.xml 文件
<property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> </property>
hdfs-site.xml文件
<property> <name>dfs.namenode.secondary.http-address</name> <value>master:9001</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/data</value> </property> <property> <name>dfs.replication</name> <value>4</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property>
mapred-site.xml
这个配置文件本来是不存在的,但是有一个名为mapred-site.xml.template的模板文件,执行mv mapred-site.xml.template mapred-site.xml复制重命名一份就行了,然后做配置
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property>
yarn-site.xml文件
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8032</value> </property> <property>
<name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property>
<name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property>
这样,hadoop的所有配置就做好了。
然后再把这个/usr/local/hadoop文件分别发送给另外三个slave,执行如下命令即可,不过要在目标文件夹设置好读写权限
比如在slave1上设置读写权限,在/usr/local目录下执行如下命令即可
sudo chown -R hadoop ./
其中hadoop是我的用户名,./表示当前目录
然后再master机器上执行如下命令就可以把hadoop文件发送到slave1上了,slave2和3方法相同
scp -r /usr/local/hadoop hadoop@slave1:/usr/local/
3 发送过去之后修改slave中几个配置文件
首先就是像master一样配置环境变量,前边写了,不赘述了。然后修改core-site.xml文件dfs.datanode.data.dir这一项,如下
<property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/data/node1</value> </property>
在data后边又添加了一个目录叫node1,在slave2上添加的就叫nade2,以此类推,不这样配置会检测不出当前存在的某些虚拟机。
以上就完成了,然后就是通过命令启动master上的hadoop,slave上的某些进程就会启动,就ok了。