在oracle Virtual Box 虚拟机中搭建hadoop1.2.1完全分布式环境
来源:互联网 发布:it狂人360 编辑:程序博客网 时间:2024/06/03 14:28
一、初衷
对于学习Hadoop的我来将,没有足够的硬件设备,但又想安装完全分布式的Hadoop,一个master两个slave。手上就一台能联网的笔记本,那就使用oracle vitual box进行环境搭建把。环境搭建的效果为:在虚拟机中虚拟3台centos6.4 64位系统,每台都配置双网卡NAT,host-only模式。在宿主机器上安装eclipse进行Hadoop开发。
Hadoop环境搭建很大部分是在准备操作系统。具体如何搭建Hadoop其实就像解压缩普通的tar类似。然后再适当的配置Hadoop的dfs,mapredurce相关的配置,调整操作系统就可以开始着手学习Hadoop了。
二、拓补图
图片制作中… …
- master11:192.168.56.11
- slave12:192.168.56.12
- slave14:192.168.56.14
三、介质准备
- 虚拟机 oracle virtual box Mac
- 操作系统镜像 centos 6.4 64位 网易镜像
- java jdk-7u45-linux-x64.rpm 或者 jdk-6u45-linux-x64-rpm.bin
- hadoop1.x hadoop1.2.1
- eclipse eclipse mac版64位
其他版本可到相关官方网站根据需要自行下载
四、虚拟机和基础环境搭建
这里主要操作有:安装一个新的oracle virtual box,并先安装一个centos6.4 的64位的操作系统。配置操作系统双网卡、修改机器名为master11、新建hadoop用户组和hadoop用户、配置sudo权限、安装配置java环境、同步系统时间、关闭防火墙。其中有些步骤需要重启操作系统后成效,建议一切都配置后再重启并再次验证是否生效,并开始克隆两个DataNode节点服务器slave12\slave14。
4.1 安装虚拟机
可参见官方文档安装oracle virtual box
4.2 在虚拟机里安装centos6.4
此处使用的是mini版的centos6.4 64位网易提供的镜像。在安装中内存调整大于等于1g,默认为视图安装界面,小于1g则为命令行终端安装方式。可更具实际情况调整虚拟机资源分配。此处为内存1g,存储20g.网络NAT模式。
具体可参见centos安装
4.3 配置双网卡
使用自己的笔记本经常遇到的问题就是在不同的网络下ip是不一样的。那么我们在学习hadoop的时候岂不是要经常修改这些ip呢。索性就直接弄个host-only模式的让oracle virtual box提供一个虚拟的网关。具体步骤:
先关闭计算机 sudo poweroff
打开virtualbox主界面,依次点击屏幕左上角virtualbox->偏好设置->网络->点击右侧添加图标添加一个Host-Only网络vboxnet0,再设置参数值
主机虚拟网络界面(A)IPv4地址(I):192.168.56.1IPv4网络掩码(M):255.255.255.0IPv6地址(P):空IPv6网络掩码长度(L):0
DHCP服务器(D)选择启动服务器服务器地址(r):192.168.56.100服务器网络掩码(M):255.255.255.0最小地址(L):192.168.56.254最大地址(U):192.168.56.254
截图:配置网卡1。选中你刚新建的虚拟机,右键设置->网络->网卡1->点击启动网络连接(E)
连接方式(A):仅主机(Host-Only)适配器界面名称(N):vboxnet0(此处需要注意,如果没有进行步骤1那么这里可能无法选择,整个设置流程会提示有错误而无法继续)高级控制芯片(T):xxx混杂模式(P):拒绝MAC地址(M):系统随机即可接入网线(C):选中
配置网卡2。点击网卡2->点击启动网络连接(E)
连接方式(A):网络地址装换(NAT)界面名称(N):高级(d)控制芯片(T):xxx混杂模式(P):拒绝MAC地址(M):系统随机即可接入网线(C):选中
配置网络。启动操作系统,使用root用户进行网络配置。
12cd
/etc/sysconfig/network-scripts/
cp
ifcfg-eth0 ifcfg-eth1
配置ifcfg-eth0,ifcfg-eth1两个文件与virtual box 中的网卡mac值一一对应,
ONBOOT=yes
开机启动。并将ifcfg-eth1中的网卡名称eth0改为eth1,再重启网路服务。1service network start
其中eth0的网关信息比较多,需要根据情况具体配置。如,这里使用eth0为host-only模式,eth1为nat模式,eth0为固定ip,eth1为开机自动获取ip。可参考如下:
[root@master11 network-scripts]# cat ifcfg-eth0DEVICE=eth0HWADDR=08:00:27:55:99:EA(必须和virtual box 中的mac地址一致)TYPE=EthernetUUID=dc6511c2-b5bb-4ccc-9775-84679a726db3(没有可不填)ONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=staticNETMASK=255.255.255.0BROADCAST=192.168.56.255IPADDR=192.168.56.11
[root@master11 network-scripts]# cat ifcfg-eth1DEVICE=eth1HWADDR=08:00:27:13:36:C3TYPE=EthernetUUID=b8f8485e-b731-4b64-8363-418dbe34880dONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=dhcp
4.4 检查机器名称
检查机器名称。修改后,重启生效。
cat
/etc/sysconfig/network
这里期望得机器名称信息是:
NETWORKING=yes HOSTNAME=master11
4.5 建立hadoop用户组和用户
新建hadoop用户组和用户(以下步骤如无特殊说明默认皆使用hadoop)
groupadd hadoop
useradd
hadoop -g hadoop
passwd
hadoop
4.6 配置sudo权限
CentOS普通用户增加sudo权限的简单配置
查看sudo是否安装:
rpm -qa|
grep
sudo
修改/etc/sudoers文件,修改命令必须为visudo才行
visudo -f
/etc/sudoers
在root ALL=(ALL) ALL 之后增加
hadoop ALL=(ALL) ALL
Defaults:hadoop timestamp_timeout=-1,runaspw
增加普通账户hadoop的sudo权限timestamp_timeout=-1 只需验证一次密码,以后系统自动记忆runaspw 需要root密码,如果不加默认是要输入普通账户的密码
修改普通用户的.bash_profile文件(vi /home/hadoop/.bash_profile),在PATH变量中增加 /sbin:/usr/sbin:/usr/local/sbin:/usr/kerberos/sbin
4.7 安装java
使用hadoop用户sudo rpm -ivh jdk-7-linux-x64.rpm
进行安装jdk7。 配置环境变量参考CentOS-6.3安装配置JDK-7
4.8 同步服务
安装时间同步服务sudo yum install -y ntp
设置同步服务器 sudo ntpdate us.pool.ntp.org
4.9 关闭防火墙
hadoop使用的端口太多了,图省事,关掉。chkconfig iptables off
。需要重启。
4.10 克隆
使用虚拟机进行克隆2个datanode节点。配置网卡(参见第五步)。配置主机名(参见第六步)。配置hosts,最好也包括宿主机(sudo vi /etc/hosts
)
192.168.56.11 master11192.168.56.12 slave12192.168.56.14 slave14
同步时间
sudo
ntpdate us.pool.ntp.org
重启服务service network start
。可能出现错误参见device eth0 does not seem to be present, delaying initialization
4.11 配置ssh
- 单机ssh配置并回环测试输入1234
ssh
-keygen -t dsa -P
''
-f ~/.
ssh
/id_dsa
chmod
700 ~/.
ssh
cat
~/.
ssh
/id_dsa
.pub >> ~/.
ssh
/authorized_keys
chmod
600 ~/.
ssh
/authorized_keys
ssh localhost
不用输入密码直接登陆,表明ssh配置成功。(若未重新权限分配,可能无法实现ssh免密码登陆的效果。浪费了我不少时间。) - 配置master和slave间的ssh 在slave12上执行在master上执行12
scp
hadoop@master11:~/.
ssh
/id_dsa
.pub .
/master_dsa
.pub
cat
master_dsa.pub >>authorized_keys
ssh slave12
若,不输入密码直接登陆,配置即通过。 - 相同的步骤需要也在slave14和master11上重复一遍。
机器环境确认无误后可以轻松的安装hadoop。
五、hadoop1.2.1 安装与配置
经过了以上步骤准备Hadoop1.2.1的环境搭建就相对容易多了。此处就仅需要解压缩安装并配置Hadoop,再验证是否正常便可大功告成。
5.1 安装
- 重启master11,准备工作环境目录12
cd
~/
mkdir
env
- 解压Hadoop 1.2.1 tar1
tar
-zxvf hadoop-1.2.1.
tar
.gz -C ~
/env/
- 建立软链接1
ln
-s hadoop-1.2.1/ hadoop
- 配置环境变量(
vi ~/.bashrc
)12export
JAVA_HOME=
/usr/java/jdk1
.7.0_45
source
~/.bashrc
- 同步.bashrc12
scp
~/.bashrc hadoop@slave12:~/
scp
~/.bashrc hadoop@slave14:~/
- 创建数据文件存放路径。主要便于管理Hadoop的数据文件。效果如下1234567
cd
/home/hadoop/env
mkdir
data
/tmp
mkdir
data
/name
mkdir
data
/data
chmod
755 data
/data/
mkdir
mapreduce
/system
mkdir
mapreduce
/local
├── env│ ├── data│ │ ├── data│ │ ├── name│ │ └── tmp│ ├── hadoop -> hadoop-1.2.1/│ ├── hadoop-1.2.1│ │ ├── bin│ │ ├── build.xml│ └── mapreduce│ ├── local│ └── system
5.2 配置
配置 conf/core-site.xml 指定hdfs协议下的存储和临时目录
12345678<
property
>
<
name
>fs.default.name</
name
>
<
value
>hdfs://master11:9000</
value
>
</
property
>
<
property
>
<
name
>hadoop.tmp.dir</
name
>
<
value
>/home/${user.name}/env/data/tmp</
value
>
</
property
>
配置 conf/hdfs-site.xml 配置关于hdfs相关的配置。这里将原有默认复制3个副本调整为2个。学习时可根据需求适当调整。
123456789101112131415161718<
property
>
<
name
>dfs.name.dir</
name
>
<
value
>/home/${user.name}/env/data/name</
value
>
</
property
>
<
property
>
<
name
>dfs.data.dir</
name
>
<
value
>/home/${user.name}/env/data/data</
value
>
</
property
>
<
property
>
<
name
>dfs.replication</
name
>
<
value
>2</
value
>
</
property
>
<
property
>
<
name
>dfs.web.ugi</
name
>
<
value
>hadoop,supergroup</
value
>
<
final
>true</
final
>
<
description
>The user account used by the web interface. Syntax: USERNAME,GROUP1,GROUP2, ……</
description
>
</
property
>
配置 conf/mapred-site.xml
123456789101112<
property
>
<
name
>mapred.job.tracker</
name
>
<
value
>master11:9001</
value
>
</
property
>
<
property
>
<
name
>mapred.system.dir</
name
>
<
value
>/home/${user.name}/env/mapreduce/system</
value
>
</
property
>
<
property
>
<
name
>mapred.local.dir</
name
>
<
value
>/home/${user.name}/env/mapreduce/local</
value
>
</
property
>
配置masters
1vi
masters
写为
1master11
配置slaves
1vi
slaves
写为
12slave12
slave14
同步hadoop到子节点
12scp
-r ~
/env/
hadoop@slave12:~/
scp
-r ~
/env/
hadoop@slave14:~/
5.3 启动hadoop
在主节点上格式化namenode
1.
/bin/hadoop
namenode -
format
在主节点上启动Hadoop
1.
/bin/start-all
.sh
5.4 检查运行状态
通过web查看Hadoop状态
http://192.168.56.11:50030/jobtracker.jsphttp://192.168.56.11:50070/dfshealth.jsp
验证Hadoop mapredurce 执行
hadoop jar hadoop-xx-examples.jar
验证jobtracker和tasktracker1.
/bin/hadoop
jar hadoop-0.16.0-examples.jar wordcount input output
可wordcount参考Hadoop集群(第6期)_WordCount运行详解
六、常见错误
expected: rwxr-xr-x, while actual: rwxrwxr-x WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid directory in dfs.data.dir: Incorrect permission for /home/hadoop/env/data/data, expected: rwxr-xr-x, while actual: rwxrwxr-x
解决方案:chmod 755 /home/hadoop/env/data/data节点之间不能通信 java.io.IOException: File xxx/jobtracker.info could only be replicated to 0 nodes, instead of 1
java.net.NoRouteToHostException: No route to host
解决方案:关闭iptables,sudo /etc/init.d/iptables stop
got exception trying to get groups for user webuser
org.apache.hadoop.util.Shell$ExitCodeException: id: webuser:无此用户 at org.apache.hadoop.util.Shell.runCommand(Shell.java:255) at org.apache.hadoop.util.Shell.run(Shell.java:182)
解决方案: 在hdfs-site.xml文件中添加
1234567<
property
>
<
name
>dfs.web.ugi</
name
>
<
value
>hadoop,supergroup</
value
>
<
final
>true</
final
>
<
description
>The user account used by the web interface.Syntax: USERNAME,GROUP1,GROUP2, ……
</
description
>
</
property
>
加上这个配置。可以解决了
value 第一个为你自己搭建hadoop的用户名,第二个为用户所属组因为默认
web访问授权是webuser用户。访问的时候。我们一般用户名不是webuser所有要覆盖掉默认的webuser
七、附录
- 无意中Google到的一个hadoop
- 参考博文:hadoop学习之hadoop完全分布式集群安装 图文并茂
- 参考博文:用 Hadoop 进行分布式并行编程, 第 1 部分 理论与实践相结合
- 参考博文:centos安装
- 在oracle Virtual Box 虚拟机中搭建hadoop1.2.1完全分布式环境
- 在虚拟机virtual box 中搭建Linux(centos7)服务器(一)
- 虚拟机下CentOS-6.4搭建Hadoop1.1.2完全分布式集群
- hadoop1.1.2分布式环境搭建
- Hadoop1.2.1 完全分布式集群搭建实操笔记
- Hadoop1.2.1完全分布式部署
- Hadoop1.2.1环境搭建
- 基于Virtual Box搭建centos 7集群以及各类分布式系统环境搭建
- hadoop1.2.1伪分布式搭建
- 在Virtual Box中搭建Tiny Core Linux SSH服务器
- hadoop1.x 伪分布式环境搭建
- 在Hadoop1.2.1分布式集群环境下安装pig0.12.1
- 在Hadoop1.2.1分布式集群环境下安装hive0.12
- 虚拟机中Hadoop分布式环境搭建
- 【Hadoop】8、基于虚拟机的Hadoop1.2.1完全分布式集群安装
- Virtual Box + CentOS7 Minimal基础环境搭建
- Hadoop1.2.1+Hbase0.94.14完全分布式安装
- Hadoop1完全分布式安装
- Hadoop集群系列(目录)
- JDBC连接数据库 prepareStatement
- 网络编程--TCP
- php扩展和嵌入--如何在linux下配置LAMP环境
- android -- NDK 编译环境搭建
- 在oracle Virtual Box 虚拟机中搭建hadoop1.2.1完全分布式环境
- Windows Runtime 类型系统映射
- 第四日C
- linux下重命名文件或文件夹命令
- STL泛型编程-map映照容器
- Netflix:使用大数据驱动业务决策
- Unity编辑器类(Editor)小结
- 获取显示卡的信息 .
- 一个很有趣的网站:访问它可以告诉你当前设备的屏幕分辨率(whatismyscreenresolution.com )