1基础环境
1.1背景
过去一个多月的时间里,本人利用业余时间努力,认真的学习hadoop,前阵子我利用虚拟机搭建了一个伪分布环境,今天,我将这基础上搭建一个全分布式环境。
1.2软硬件环境
硬件:虚拟机两个,都安装redhat-enterprise 6-i386
系统(有虚拟机就是好,多益我们这群穷L丝),机器名称分别取为master,node1。注:如果安装系统后需修改主机名称可以
通过修改/etc/sysconfig/network档案来完成。
软件:安装JDK1.6.0_45,安装SSH(安装系统的时候已默认安装)。
1.3网络环境
在搭建集群环境的过程中,必须保证两台虚拟机能彼此通信,所以,在安装虚拟机的时选择网络连接方式的时候选择Bridge方式,这样可以保证两台虚拟机被分配的Ip属在同一局域网内。下面是两台虚拟机的Ip:
master的Ip:192.168.1.102
node1的Ip:
192.168.1.104
确定好两台机器的ip后,接下来修改两台机器的/etc/hosts档案,修改后的内容如下:
192.168.1.102
master
192.168.1.104
node1
1.4创建hadoop用户
在两台机器上都创建一个名为hadoop的用户
和
组。
$ groupadd hadoop
$ useradd hadoop -g hadoop
1.5 SSH
访问设置
该步骤是目的是生成无密码公钥(即在master端无需输入密码进可以通过SSH进去到node1下),预知更多请学习SSH相关知识,
设置步骤如下:
#在mater机器下切换到Hadoop
用户
su hadoop
cd /home/hadoop/
#生成公钥和私钥
ssh-keygen -t
rsa #执行这句的时候一路敲enter键
cd .ssh
cat id_rsa.pub >
authorized_keys
chmod go-wx
authorized_keys
#把公钥拷贝到node1的/home/hadoop/下
scp id_rsa.pub
node1@192.168.1.104:~/
#进入到node1的hadoop用户下
cd /home/hadoop/.ssh
cat ../id_rsa.pub>
authorized_keys
通过上面的操作,SSH无密码登录设置就完成了,可以在master
hadoop用户下执行
ssh node1 #如果能进入到node1的hadoop用户那说明就ok!
2集群配置
2.1集群总体概况图
在本次集群配置中,master机器用来运行namenode
和 jobtracker这两个守护进程,同时也运行datanode(因为我只搞了两台虚拟机),node1用来运行datanode
和 tasktracker。

hadoop目录结构:
hadoop安装目录:/opt/modules/hadoop/hadoop-1.1.2/
name目录:/opt/data/hadoop/hdfs/name/
data目录:/opt/data/hadoop/hdfs/data/
namesecondary目录:/opt/data/hadoop/hdfs/namesecondary/
mapred目录:/opt/data/hadoop/hdfs/mapred/
2.2配置
把master上的整个hadoop安装目录拷贝到node1上。
在master上修改hadoop_install/conf/masters档案,修改后的内容如下:
master
在master上修改hadoop_install/conf/slaves档案,修改后的内容如下:
master
node1
分别在master和node1上完成下面操作,且保证修改内容一致:
修改hadoop-env.xml文件,设置JAVA_HOME的路径;
修改core-site.xml文件,内容如下:
<!--
fs.default.name
hdfs://master:9000
fs.checkpoint.dir
/opt/data/hadoop/hdfs/namesecondary
fs.checkpoint.period
1800
fs.checkpoint.size
33554432
io.compression.codecs
org.apache.hadoop.io.compress.DefaultCodec,org.apache.haddoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec
fs.trash.interval
1440
-->
修改hdfs-site.xml文件,内容如下:
<!--
dfs.name.dir
/opt/data/hadoop/hdfs/name
dfs.data.dir
/opt/data/hadoop/hdfs/data
dfs.http.address
master:50070
dfs.replication
2
dfs.block.size
67108864
dfs.permissions
false
-->
修改mapred-site.xml文件,内容如下:
<!--
mapred.job.tracker
master:9001
mapred.local.dir
/opt/data/hadoop/mapred/mrlocal
true
mapred.system.dir
/opt/data/hadoop/mapred/mrsystem
true
mapred.tasktracker.map.tasks.maxinum
4
true
mapred.tasktracker.reduce.tasks.maxinum
2
true
io.sort.mb
32
true
mapred.child.java.opts
-Xmx64M
mapred.compress.map.output
true
-->
2.3格式化namenode
在master
执行:hadoop namenode -format,如无异常则打印如下日志:
注:由于我是在之前的伪分布式环境基础上搭建此环节的,在master上已经format过namenode了,如果再次执行,会报错了。解决办法是把dfs.name.dir的配置目录删除掉再执行format就可以了。
2.4在master启动hdfs守护进程
[hadoop@master bin]$ start-dfs.sh

在master上查看hdfs守护进程启动结果:

在node1上查看datanode的启动结果:

2.5在master启动jobtrakcer守护进程
[hadoop@master bin]$ start-mapred.sh

在master上查看jobtrakcer守护进程启动结果:

在node1查看tasktracker启动结果:

到这里,就基本搭建好了一个两个节点的hadoop集群环境啦!开心吗?
2.6关闭hadoop
