vmware10上三台虚拟机的Hadoop2.2.0集群搭建
由于官方版本的Hadoop是32位,若在64位Linux上安装,则必须先重新在64位环境下编译Hadoop源代码。为了方便,采用32位Ubuntu虚拟机 和Hadoop2.2安装。
安装参考博客:
1 http://www.micmiu.com/bigdata/hadoop/hadoop2x-cluster-setup/
2 http://f.dataguru.cn/thread-18125-1-1.html
3 http://blog.sina.com.cn/s/blog_611317b40100t5od.html
环境搭建:
物理机win7
虚拟机vmware10+3台ubuntu12.04 32位(可以配置好一台然后完全复制另外两台)
虚拟机采用NAT模式上网,
{ 在Virtual Network Editor中将Subnet IP设为192.168.23.0
为虚拟机配置静态Ip
autho eht0
iface eth0 inet static
address 192.168.23.5
gateway 192.168.23.2
netmask 255.255.255.0
network 192.168.23.0
broadcast 192.168.23.255
配置虚拟机DNS
在/etc/resolvconf/resolv.conf.d/base以及/etc/resolv.conf中加入
nameserver 8.8.8.8
虚拟机端口映射
将虚拟机的22(ssh)端口应射成主机的8841端口,以后ssh远程访问虚拟机都用主机的端口访问
Sudo vi /etc/vmware/vmnet8/nat/nat.conf
在[incomingtcp]下加入
8421=192.168.23.5:22
需要注意的是再加入端口之前要查看端口是否占用
Netstat –ap|grep 8421
} 这部分我安装时没有关心。
安装好虚拟机,为方便设置: 用户名:hadoop 主机名分别为:master 、slave、slave2
配置各台虚拟机的ip:
Ipconfig :查看各个虚拟机的ip,没台机器就可以取这个ip。
hostname |
IP |
用途 |
master |
192.168.164.133 |
NameNode/ResouceManager |
Slave1 |
192.168.164.134 |
DataNode/NodeManager |
slave2 |
192.168.164.135 |
DataNode/NodeManager |
ps:如果是虚拟机可以把环境配置好后,copy多个实例即可,需要注意修改hostname
1 vi /etc/hosts 添加如下内容:
192.168.164.133 master
192.168.164.134 slave1
192.168.164.135 slave2
2 修改各台主机的主机名:
Vi /etc/hostname
3 3台主机分别更新: sudo apt-get update
3台主机分别关闭防火墙:sudo ufw disable
将hadoop用户添加root权限: gpasswd -a hadoop root
4 配置jdk
在3台:在/usr目录下新建setup目录,用于安装jdk和hadoop
解压jdk到setup目录
重命名为jdk1.7 : mv jdk-1.7.x/ jdk1.7/
配置jdk的环境变量:
gedit /etc/profile
添加:红色部分为自己的jdk目录
#set Java environment
JAVA_HOME=/usr/setup/jdk1.7
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH JAVA_HOME CLASSPATH
验证:Java -version
Jdk配置完毕。(这一步完成后可以复制虚拟机)复制后注意配置主机名。
“公私钥“认证方式简单的解释:首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub; 私钥文件:~/.ssh/id_rsa)。然后把公钥放到服务器上(~/.ssh/authorized_keys), 自己保留好私钥.在使用ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了。
1 安装ssh:
3台主机分别:sudo apt-get install ssh
然后 :ssh-keygen -t rsa 一直回车 选择是选 y
回到master主机上,使用跨主机的管道和重定向将slave1,slave2主机上的公钥id_rsa.pub添加到 master上的authorized_keys文件中。
分别将通过
ssh slave1 cat ~/.ssh/id_rsa.pub && ssh slave2cat ~/.ssh/id_rsa.pub
添加到
authorized_keys,
然后复制authorized_keys到slave1 和slave2中:
scp authorized_keys hadoop@slave1:~/.ssh/
scp authorized_keys hadoop@slave2:~/.ssh/
(或者 :在master上执行:
$cat ~/.ssh/id_rsa.pub | ssh 远程用户名@远程服务器ip 'cat >> ~/.ssh/authorized_keys'
)
测试:ssh slave1
Ssh slave2
第一次需要密码,后续ssh时可以实现无密码登陆。
1 下载hadoop,http://apache.fayea.com/apache-mirror/hadoop/common/
选择hadoop-2.2.0.tar.gz
32位环境下不用编译。复制到setup目录(这部分看个人习惯)解压
tar zxvf hadoop-2.2.0.tar.gz
mv hadoop-2.2.0 hadoop
2 配置hadoop的环境变量
vi ~/.bash_profile
添加如下内容:
# set java environment
export JAVA_HOME=/usr/setup/jdk1.7
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
# set Hadoop environment
export HADOOP_PREFIX="/usr/setup/hadoop"
export PATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
export HADOOP_YARN_HOME=${HADOOP_PREFIX}
3 编辑
修改JAVA_HOME的配置:
export JAVA_HOME=/usr/setup/jdk1.7
4 编辑
修改JAVA_HOME的配置:
export JAVA_HOME=/usr/setup/jdk1.7
5编辑
ps:这里红色部分master我在slave中改成了对应的主机名slave1或slave2,测试通过
6 编辑
7编辑
ps:这里红色部分master我在slave中改成了对应的主机名slave1或slave2,测试通过
8编辑
默认没有mapred-site.xml文件,copy mapred-site.xml.template 一份为 mapred-site.xml即可
9编辑
添加:
slave1
slave2
1 启动Hadoop
1.1、第一次启动需要在master执行format :hdfs namenode -format
1.2、在master执行 start-dfs.sh:
在master验证启动进程:
[hadoop@master ~]$ jps 7695 Jps 7589 SecondaryNameNode 7403 NameNode
在slavex验证 启动进程:
hadoop@slave1 ~$ jps 8724 DataNode 8815 Jps
1.3、在Master.Hadoop 执行 start-yarn.sh :
在master验证启动进程:
在slavex验证 启动进程:
hadoop@slave1 ~$ jps 9013 Jps 8724 DataNode 8882 NodeManager
2 演示
(这部分参考http://www.micmiu.com/bigdata/hadoop/hadoop2x-cluster-setup/)
2.1 演示hdfs 一些常用命令,为wordcount演示做准备
hdfs dfs -ls /
hdfs dfs -mkdir /user
hdfs dfs -mkdir -p /user/test/wordcount/in
hdfs dfs -ls /user/test/wordcount
2.2、本地创建三个文件 test1.txt、test2.txt、test3.txt, 分别写入如下内容:
test1:
hi baixl welcome to hadoop
more see hadoop
test2:
hi baixl welcome to bigdata
more see hadoop
test3:
hi baixl welcome to spark
more see hadoop
把 test打头的三个文件上传到hdfs:
[hadoop@Master ~]$ hdfs dfs -put test*.txt /user/test/wordcount/in[hadoop@Master ~]$ hdfs dfs -ls /user/test/wordcount/inFound 3 items-rw-r--r-- 3 hadoop supergroup 50 2014-01-22 16:06 /user/micmiu/wordcount/in/test1.txt-rw-r--r-- 3 hadoop supergroup 50 2014-01-22 16:06 /user/micmiu/wordcount/in/test2.txt-rw-r--r-- 3 hadoop supergroup 49 2014-01-22 16:06 /user/micmiu/wordcount/in/test3.txt
2.3、然后cd 切换到Hadoop的根目录下执行:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /user/micmiu/wordcount/in /user/micmiu/wordcount/out
到此 wordcount的job已经执行完成,执行如下命令可以查看刚才job的执行结果:类似如下:
[hadoop@Master hadoop]$ hdfs dfs -ls /user/test/wordcount/outFound 2 items-rw-r--r-- 3 hadoop supergroup 0 2014-01-22 16:38 /user/micmiu/wordcount/out/_SUCCESS-rw-r--r-- 3 hadoop supergroup 83 2014-01-22 16:38 /user/micmiu/wordcount/out/part-r-00000[hadoop@Master hadoop]$ hdfs dfs -cat /user/test/wordcount/out/part-r-00000BigData 1Hadoop 1Hi 3baixl 3Spark 1hadoop 3more 3see 3to 3welcome 3