hadoop-0.21.0集群环境的搭建

[size=medium]最近在看hadoop,成功搭建一个集群的环境说起来很简单,但中间会遇到很多很多的问题,下面就是我的配置全过程以及中间遇到过的问题和解决的办法。
本次部署环境是在VMWare9.0下虚拟了三台rhel6.0,部署1个namenode和2个datanode组成的小集群,VMWare和rhel安装过程不再赘述。
讲一下我在安装过程中遇到的问题,我是先安装完一台虚拟机,作为namenode,然后将这台虚拟机克隆出两台作为datanode。中间遇到的一个问题就是在修改hosts文件的时候,总是会自己加载源虚拟机的内容即namenode,原因是修改完以后值重启了service network,网上说一般hosts信息会有缓存,于是我修改完后直接reboot虚拟机,然后就解决了。如果在修改hosts文件的时候出现一样的情况可以试试。
VMware工具是一个很好的东西,它可以让你在主机与虚拟机之间移动操作的时候不需要按ctrl+alt,还有可以设置主机的共享文件,然后就可以直接将你需要的文件复制到虚拟机上去。打开VMware的虚拟机选项,如果你已经安装VMware工具,会有一个重新安装VMware选项,如果你还没安装就会有一个安装的选项。

[b]1、 ping通各主机。[/b]
VMWare使用的是NAT网络连接模式,使用的是VMnet8虚拟网卡。在宿主机中(我用的win7)使用ipconfig查看VMnet8的IP地址(网关地址)为192.168.5.1,所以要设置三台虚拟机的ip地址,使其与VMnet8在同一个网段内 。需要注意一点的是3台虚拟机的网络适配器选择桥接的方式。
我是直接在图形界面的network connection里面修改的。
这个地方我用的是DHCP即动态IP,然后用ipconfig命令查看,就可以知道各台机器的ip地址,当然设置成静态的也行,只是我用无线网络的时候,连接不上,所以就改成动态了。
3台虚拟机的地址:
192.168.5.13 namenode
192.168.5.14 datanode1
192.168.5.15 datanode2

[b]2 修改主机名称[/b],写入命令 vi /etc/sysconfig/network
写入主机名称
HOSTNAME=namenode
其他两个主机分别设置为
HOSTNAME=datanode1
HOSTNAME=datanode2
[b]3 修改hosts文件[/b],写入命令 vi /etc/hosts,在文件后面直接加上一下几行:(每个结点都要)
192.168.5.13 namenode.namenodedomain namenode
192.168.5.14 datanode1.datanode1domain datanode1
192.168.5.15 datanode2.datanode2domain datanode2

[b]4 jdk 安装[/b]
把你已经下好的jdk安装文件所在的文件夹设为共享的文件夹
方法:VMware->虚拟机->设置->选项->共享 选择你要共享的文件。然后在虚拟机里面的mnt目录下会有个hgfs目录,下面就是你所共享的文件夹。直接拷贝就可以了。我下的是rpm文件,则直接将文件拷贝到/usr,然后解压
rpm –ivh jdk-7u45-linux-i586.rpm
如果是tar.gz 那就用tar –zxvf 文件名,Rpm解压后会发现/usr目录下有了一个java目录,目录下就是jdk。。。。后面很长,由于我已经重命名了,所以不记得完整的名字,主要是便于后面的操作: mv jdk。。。 jdk1.7
修改环境变量 ,在vi /etc/profile 的文件下面 done之下 加入
JAVA_HOME=/usr/java/jdk1.7
PATH=$PATH:/usr/java/jdk1.7/bin
CLASSHOME=.:/usr/java/jdk1.7/lib
export JAVA_HOME PATH CLASSHOME (注:export后面没有冒号)
重新登录 使java环境生效。可以直接关掉终端再开终端。
测试: 分别输入java 和 javac 命令不会报错。
[b]5 创建一个hadoop用户,以后用它来创建、启动和管理hadoop。[/b]
Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户,所以应该在每台机器建一个同名的用户。
创建 zhang用户 adduser zhang
创建密码 passwd zhang

注意:以下操作都是在zhang用户进行
[b]6 ssh配置(伪分布也是要配置的)[/b]Hadoop需要namenode与datanode相互之间无密码登录,所以需要设置4台主机的无密码公钥认证方式的SSH。注意在每个主机节点上都要进行
ssh-keygen –t rsa 给当前用户grid创建公钥和私钥,连续enter键id_rsa
文件的储存位置 ,密码设置为空
cd /zhang/.ssh 进入/zhang/.ssh 目录下会看到id_rsa和id_rsa,pub 生成。
cp id_rsa.pub authorized_keys 第一次设置authorized_key文件不存在。
需要注意的是:每个节点都要执行以上的几个步骤,但是各台主机的authorized_keys内容是不一样的 ,将三个authorized_keys文件的内容组合到一起,复制到一个文件中,文件名仍为authorized_keys,然后复制到每个节点下,覆盖原来的authorized_keys文件。这个新的authorized_keys文件包含了三个节点的公钥,这样就可以互相访问了。
可以用scp命令进行节点间文件的拷贝,
如:scp /zhang/.ssh/authorized_keys datanode1:/home/zhang/.ssh/

测试:是否能互相登录ssh datanode1 登录datanode1。
注意:在测试中会遇到
The authenticityof host [datanode1] can't be established.
Keyfingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
Are you sure you want to continue connecting (yes/no)?
OpenSSH告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。键入“yes”。这将把这台主机的“识别标记”加到“~/.ssh/know_hosts”文件中。第二次访问这台主机的时候就不会再显示这条提示信息了。
退出:exit
[b]7 在master安装hadoop[/b]
从共享文件里拷贝hadoop-0.21.0.tar.gz安装包到master的 zhang/ 中,配置完成后,会复制给各个slaver
解压hadoop-0.21.0.tar.gz安装包: tar –zxvf hadoop-0.21.0.tar.gz
同样可将解压包重命名为hadoop0210。

以下文件均在hadoop0210/conf/下
[b]8 配置hadoop运行环境[/b]
hadoop-env.sh的配置主要就是加入JAVA_HOME,将前面的#号去掉,后面修改JAVA_HOME的路径,
Export JAVA_HOME=/usr/java/jdk1.6
[b]9配置hadoop其他文件。[/b]
(1)core-site.xml (IP为namenodeIP)


fs.default.name
hdfs://192.168.5.13:9000


(2)hdfs-site.xml


dfs.data.dir
/home/zhang/hadoop0210/data


dfs.name.dir
/home/zhang/hadoop0210/name



dfs.replication
2


(3)mapred-site.xml配置(IP为Master的IP)


mapred.job.tracker
192.168.5.13:9001



(4)masters文件
写上namenode的主机名 namenode
(5)slaves文件
写上datanode的主机名 两个(如果让master也成为一个slaver节点的话,就把namenode写上)
datanode1
datanode2
[b]10 将hadoop0202 此目录copy到每个datenode中去,注意每个文件要配置好再copy。[/b]
scp -r ./hadoop0202 datanode1:/home/zhang
scp -r ./hadoop0202 datanode2:/home/zhang
(设置hadoop的环境变量,每台主机都设置:
登陆到root用户 vi /etc/profile ,在下面加入
HADOOP_HOME=/home/zhang/hadoop0210
PATH=$PATH:/home/zhang/hadoop0210/bin
export HADOOP_HOME PATH )
[b]11 初始化 建立文件结构,在namenode中执行[/b]
hadoop namenode –format
[b]12 启动 start-all.sh[/b]
(有可能会有一个warn说:name should be Specified as a URI。。。。。,这个先不管,还需要去查相关资料。后面数据处理可以正常运行得到结果)
[b]13 检查各个守护进程是否启动 [/b]ls /usr/jdk1.6/bin/jps
会显示 /usr/jdk1.6/bin/jps
输入 /usr/jdk1.6/bin/jps 会看到namenode上关于hadoop的一些java进程。(NameNode SecondaryNameNode JobTracker)
同样在各datanode上执行以上命令,也会看到datanode上关于hadoop的一些java进程。(DataNode TaskTracker)
检查你的9000和9001端口有没有启动:netstat –nat|grep 9000
Netstat –nat|grep 9001
有可能会发现这两个端口没有启动,那么有一种原因就是防火墙的问题
使用命令 service iptables status 查看防火墙的状态,如果是开启就关闭之。Service iptables stop我的问题就是这样解决的。
[b]14 启动浏览器,[/b]
输入http://192.168.5.13:50030 这个是关于mapreduce的一些情况。
输入http://192.168.5.13:50070这个是关于HDFS的一些情况。

验证配置结果:
[b]1.首先熟悉下相关的命令[/b]bin/hadoop dfs –ls 列出HDFS下的目录
bin/hadoop dfs –put text.txt test把本地的text文件上传
到HDFS并命名为test
bin/hadoop dfs –get test text 与上面的相反,把HDFS文件
下载到本地并命名为text
bin/hadoop dfs –rmr out删除HDFS上面的out文件
bin/hadoop dfs –cat in/*查看HDFS上in目录
[b]2.先创建本地的文件[/b]
创建input目录 : mkdir input
在input目录下创建一个文件,添加一些内容 ,最后保存退出:vim file
[b]3.在HDFS创建目录 [/b]
bin/hadoop dfs –mkdir example example可以自己定义
[b]4.将文件上传到HDFS[/b]
我是直接把目录上传到HDFS的example
bin/hadoop dfs –put input/ example(如果报错,可以在example前面加个/试试,我试了,两个都可以)
[b]5.运行hadoop自带的wordcount[/b]
bin/hadoop jar hadoop-mapred-examples-0.21.0.jar wordcount
example/input output
解释下这个命令,就是运行hadoop自带的测试jar文件,里面有一个wordcount用来统计文件里字符的个数,example/input是我们上传的一个字符文件,然后output是
统计结果输出的目录,里面会有一个part-r-00000文件,这个文件就是统计的结果,用cat查看
[b]6.查看测试结果[/b]bin/hadoop dfs –cat output/part-r-00000
另一种查看结果的方法是把HDFS上的文件加载到本地然后查看
Bin/hadoop dfs –get output output
执行完上述的命令后在当前的目录会有一个output目录,里面就是上
面说的结果文件
这里有几点说明下:put和get命令的不同:put是本地文件在前,HDFS文件在后,get是HDFS文件在前,本地文件在后,这很好理解,就是哪个是源哪个是目的的问题。
cat 结果文件就会展示每个字符出现的次数。
到此,一个集群环境搭建成功结束。[/size]

你可能感兴趣的:(2013-10,hadoop)