最近在学习Hadoop,因而想使用VMWare创建一个虚拟的集群环境。网上有不少参考资料,但参照其步骤进行设置时却仍是遇到了很多问题,因此在这里详细写一下个人配置过程,以及其中遇到的问题及相应的解决方法。一来作个记录,二来也但愿能帮到你们。java
咱们要创建一个具备以下配置的集群:node
host name | ip address | os | |
1 | master | 192.168.224.100 | CentOS |
2 | slave1 | 192.168.224.201 | CentOS |
3 | slave2 | 192.168.224.202 | CentOS |
其中master为name node和job tracker节点,slaveN为data node和task tracker节点。linux
若是你对VMWare和网络配置比较熟悉,能够忽略这一步,可是后面配置IP地址时具体的参数可能和我说的不同。若是你想经过一步一步操做就能成功的话,就须要这些设置shell
经过VMWare -> Edit -> Virtual Network Editor打开以下对话框:apache
在上面的列表中选中VMnet8 NAT那一行,而后按图设置全部内容,以后点击NAT Setting按钮,打开以下对话框,确保各个参数如图中所示设置。vim
虚拟机命名为master,建立过程当中网络模式能够任意选择,下面假设选择的是NAT方式。须要额外注意的是去【控制面板/管理工具/服务】中看一下VMWare相关的服务是否都已经启用,我就曾由于NAT服务没有启用,而形成各个虚拟机之间没法ping通,而浪费了不少时间。windows
到http://www.centos.org/中下去CentOS的iso镜像,使用minimal版本就能够,这样能效的控制虚拟机的大小。centos
而后就是虚拟机安装的过程了,咱们不须要安装VMWare Tools。并且这时不须要建立多台虚拟机,咱们将统一配置一台虚拟机,而后复制出其它虚拟机,后面的详细的说明。浏览器
后面的步骤中咱们假设使用root登陆虚拟机,密码假设为hadoop。bash
关掉SELINUX:vi /etc/selinux/config ,设置SELINUX=disabled,保存退出。
关闭防火墙:/sbin/service iptables stop;chkconfig --level 35 iptables off
修改IP地址为静态地址:vi /etc/sysconfig/network-scripts/ifcfg-eth0,将其内容改成以下图所示,注意HWADDR那一行,你所建立的虚拟机的值极可能与之不一样,保持原值,不要修改它!
修改主机名称: vi /etc/sysconfig/network,将其内容改成以下图所示:
修改hosts映射:vi /etc/hosts,将其内容改成以下图所示。咱们在这里就加入了slave1和slave2的映射项,以简化后面的步骤。
执行:service network restart 以重启网络。
我使用这个工具将windows中的文件传到虚拟机中,由于使用wget下载相应的软件包比较困难。
从http://www.putty.org/下载putty套件,解压到你喜欢的目录就能够了,确保里面有pscp.exe。
从下面的地址下载JDK,文件名是jdk-6u26-linux-i586.bin,若是这个地址已经失效,你能够在oracle的网站上下载最新的版本。
http://download.oracle.com/otn/java/jdk/6u26-b03/jdk-6u26-linux-i586.bin
我是在windows下用迅雷下载的,假设下载后文件放在 e:\jdk-6u26-linux-i586.bin 这个位置,在虚拟机开机的状态下从windows中打开命令提示符,运行以下命令(其中的pscp就是putty中的pscp.exe,因此你可能须要到相应的目录中去执行,或者将其所在的目录添加到PATH中):
pscp e:\jdk-6u26-linux-i586.bin root@192.168.224.100:~/
若是提示输入密码,就输入虚拟机中root账户的密码(假设为hadoop)。
而后进入虚拟机,执行以下命令:
mkdir -p ~/bin
mv ~/jdk-6u26-linux-i586.bin ~/bin
cd ~/bin
./jdk-6u26-linux-i586.bin
而后修改环境变量:vi ~/.bash_profile,在最后添加
export JAVA_HOME=/root/bin/jdk1.6.0_26
export PATH=$PATH:$JAVA_HOME/bin
保存退出后,执行 source ~/.bash_profile 使配置生效,以后能够执行java命令以判断是否已经配置成功。
从http://labs.renren.com/apache-mirror/hadoop/common/hadoop-0.20.2/中下载hadoop-0.20.2.tar.gz,放到~/bin目录下(若是你是在windows下下载的,就经过上面的方法将其复制到虚拟机中)。执行下列命令:
tar -xzvf hadoop-0.20.2.tar.gz
cd ~/bin/hadoop-0.20.2/conf
vi hadoop-env.sh
将JAVA_HOME一行的注释去掉,并改成以下设置:
export JAVA_HOME=/root/bin/jdk1.6.0_26
而后添加环境变量 vi ~/.bash_profile ,使其内容以下所示(已经合并了前面关于JAVA的设置)
export JAVA_HOME=/root/bin/jdk1.6.0_26
export HADOOP_HOME=/root/bin/hadoop-0.20.2
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
如今就能够在shell中运行hadoop,以肯定能正常执行了。下面还要对hadoop进行设置,全部要设置的文件都在~/bin/hadoop-0.20.2/conf目录下。若是你足够懒的话,能够在windows下建立这几个文件,把相应的内容复制到文件中,而后经过pscp.exe复制到虚拟机中去。
core-site.xml的内容:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>fs.default.name</name> <value>hdfs://master:9000</value> </property> <property> <name>Hadoop.tmp.dir</name> <value>/tmp/hadoop-root</value> </property> </configuration>
hdfs-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration>
mapred-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>mapred.job.tracker</name> <value>master:9001</value> </property> </configuration>
slaves
slave1
slave2
masters的内容为空,此文件用于配置secondary name node,我此次创建的集群不须要此节点,若是须要的话能够将其主机名加入此文件中(别忘了在/etc/hosts中加入相应的条目)。
使用VMWare中clone功能,复制出另外两台虚拟机,分别命名为slave1和slave2。由于克隆出的虚拟机网卡地址已经改变,因此要分别在复制出的两台虚拟机中执行如下操做:
打开三台虚拟机,登陆到master中,执行以下命令:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh slave1 "mkdir ~/.ssh"
scp ~/.ssh/id_dsa.pub slave1:~/.ssh/authorized_keys
ssh slave2 "mkdir ~/.ssh"
scp ~/.ssh/id_dsa.pub slave2:~/.ssh/authorized_keys
中间可能须要输入密码 ,按提示输入便可。如今分别执行以下命令
ssh localhost
ssh slave1
ssh slave2
不须要再输入密码就对了。
执行HDFS格式化命令:hadoop namenode -format
在master虚拟机中进入/root/hadoop-0.20.2/bin目录,执行 ./start-all.sh 就OK了。
你能够在宿主机中打开浏览器,指向 192.168.224.100:50070 查看HDFS的信息。
若是你是一步一步操做下来的,应该不会遇到什么问题,若是有问题,欢迎一块儿来讨论。