下载地址:https://www.virtualbox.org/wiki/downloads
名称最后具有说明意义。版本根据个人情况。
在下物理机系统Win7x64,处理器i53210,内存8G。
virtualbox格式vdi,VMWare格式vmdk,微软格式vhd(virtualbox不支持),Parallels格式hdd(virtualbox不支持)。
vdi转vmdk:VBoxManage.exe clonehd 原镜像.vmdk 目标镜像.vdi --format VDI
vdi转vhd :VBoxManage.exe clonehd 原镜像.vdi 目标镜像.vmdk --format VMDK
vmdk转vhd:VBoxManage.exe clonehd 原镜像.vdi 目标镜像.vhd --format VHD
共享粘贴板和鼠标拖放的实现还需要系统安装结束后安装增强功能。
注意:不要使用“自动登录”。在下使用的是Ubuntu10.10,曾经这一步选择自动登录,给后续工作造成了很大麻烦。此时的用户名最好是一个通用的名称,因为后续会涉及SSH登录。
实现和物理机的粘贴板共享、鼠标拖放。
现在有很多视图模式可以使用:
为了避免不必要的麻烦,在学习中建议关闭防火墙,这一步如果有修改,需重启系统:
OpenSSH:http://archive.ubuntu.com/ubuntu/pool/main/o/openssh/
http://mirrors.oschina.net/ubuntu/pool/main/o/openssh/
这里不要下载太新的版本,以为你的Linux可能缺少其依赖。
JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
Hadoop:http://www.apache.org/dyn/closer.cgi/hadoop/common/
SHELL$ sudo dpkg -i openssh-client_5.3p1-3ubuntu3_i386.deb
SHELL$ sudo dpkg -i openssh-server_5.3p1-3ubuntu3_i386.deb
SHELL$ sudo dpkg -i sudo dpkg -i ssh_5.3p1-3ubuntu3_all.deb
在我们的学习环境中没有必要使用密码,所以创建密钥时留空,直接回车。
当然从这一步到6)可以先放弃,因为后续我们还需要单独在每台主机上操作。
SHELL$ ssh-keygen
创建自动密码验证文件。如果使用cat命令,一个>为覆盖写入,另个为追加写入。还可以使用cp命令。
SHELL$ sudo cat id_rsa.pub > authorized_keys
SHELL$ sudo cat id_rsa.pub >> authorized_keys
SHELL$ sudo cp id_rsa.pub authorized_keys
因为在下的jdk是gz格式,所以首先需要解压。解压后移动到合适的目录,注意不要用当前用户的工作目录,这是为了简化后续工作。
解压:SHELL$ sudo tar -zxvf jdk-7u51-linux-i586.gz
移动:SHELL$ sudo mv jdk1.7.0_51 /home
SHELL$ sudo gedit /etc/profile
SHELL$ sudo source /etc/profile
同样,为了简化后续工作解压后移动到合适的目录。
解压:SHELL$ sudo tar -zxvf hadoop-2.3.0.tar.gz
移动:SHELL$ sudo mv hadoop-2.3.0 /home
配置环境变量:在环境变量加入hadoop的sbin目录并重载。
%virtualbox% CMD> VBoxManage internalcommands sethduuid 虚拟系统文件.vmdk
依照上文创建虚拟系统,到配置硬盘文件这一步:
先打开工作目录,发现虚拟系统文件夹已经创建,将复制出的系统文件放入:
然后使用已有的虚拟硬盘文件:
这样,每个虚拟系统的全部信息都保存在同一个文件夹了。
也可以使用VirtualBox的系统复制功能:
主机名 | 角色 | 登录用户 | hostname | hosts | IP | 网关 |
hapmaster | 主控 master | hadoop (全部7个主机的用户都是同样的) |
hapmaster | 127.0.0.1 localhost 192.168.1.240 hapmaster 192.168.1.241 hapslave1 192.168.1.242 hapslave2 192.168.1.243 hapslave3 192.168.1.244 hapslave4 192.168.1.245 hapslave5 192.168.1.246 hapslave6 |
192.168.1.240 | 192.168.1.1 |
hapslave1 | 附属 slave | hadoop | hapslave1 |
127.0.0.1 localhost ... |
192.168.1.241 |
192.168.1.1 |
hapslave2 | 附属 slave | hadoop | hapslave2 |
127.0.0.1 localhost ... |
192.168.1.242 |
192.168.1.1 |
hapslave3 |
附属 slave | hadoop | hapslave3 |
127.0.0.1 localhost ... |
192.168.1.243 |
192.168.1.1 |
hapslave4 | 附属 slave | hadoop | hapslave4 |
127.0.0.1 localhost ... |
192.168.1.244 |
192.168.1.1 |
hapslave5 | 附属 slave | hadoop | hapslave5 |
127.0.0.1 localhost ... |
192.168.1.245 |
192.168.1.1 |
hapslave6 | 附属 slave | hadoop | hapslave6 |
127.0.0.1 localhost ... |
192.168.1.246 |
192.168.1.1 |
下面就开始对7个系统分别进行配置,本文档记录以从属机hapslave1为例:
首先我们启动虚拟系统,直接使用root用户登录:
创建模板系统时我们已经初始化了root用户,所以,以后在学习环境中完全可以一直使用root用户。另外,如果你在安装ubuntu时初始化用户为“hadoop”,这一步和2)就可以跳过了。
(1)在root下修改登录用户名
SHELL$ chfn -f 新登录名 原登录名
(2)使用root修改用户
SHELL$ usermod -l 新登录名 -d /home/新登录名 -m 原登录名
如果这一步使用的用户是非root,在命令前要加sudo 。建议继续在root下修改。主控机hapmaster也不需要此步骤。
SHELL$ sudo gedit /etc/hostname
无论主控机还是从属机,现在开始都需要单独配置。注意每次重启系统后一定要确认一下。
SHELL$ sudo gedit /etc/hosts
127.0.0.1 localhost 192.168.1.240 hapmaster 192.168.1.241 hapslave1 192.168.1.242 hapslave2 192.168.1.243 hapslave3 192.168.1.244 hapslave4 192.168.1.245 hapslave5 192.168.1.246 hapslave6
注意:配置hostname和hosts后需重启系统。可以在4)、5)步骤都结束后最终重启系统。或者执行:
SHELL$ sudo /etc/init.d/networking restart
然后配置这个网卡:
SHELL$ sudo gedit /etc/network/interfaces
auto eth0 iface eth0 inet static address 192.168.1.24* gateway 192.168.1.1 netmask 255.255.255.0
这一步,如果只看到一个“lo”,一定要检查虚拟系统的网络配置是否开启。
配置interfaces后重启网卡:
SHELL$ sudo /etc/init.d/networking restart
SHELL$ sudo chown -hR 用户 hadoop根目录
首先,把全部虚拟主机的网络都配置为桥接,以组成一个局域网。
然后逐个启动系统。都启动后最好使用ping命令测试是否能够互相通讯。
在创建模板系统时,已经在hapmaster主机创建了authorized_keys密钥文件,并且拷贝出的6个从属系统上也都有这个文件。
现在把7台主机上面的authorized_keys、id_rsa、id_rsa.pub三个文件都删掉。这三个文件在/home/用户名/.ssh/目录里。
下面使用hapmaster主机开始操作:
注意:远程用户要对远程主机上指定的目录有足够权限。
SHELL$ scp 文件 远程用户@远程主机:目录
SHELL$ cat 源文件 目标文件
如果在执行追加时提示“bash: authorized_keys: 权限不够”,可以使用chown命令给当前用户添加操作.ssh目录的权限。
每个主机都获取了保存有7个主机公钥的authorized_keys文件后,开始测试SSH登录。
这一步的配置在7台系统上是相同的。在hadoop2.3.0中,以下配置文件都在%hadoop%/etc/hadoop目录里。现在以hapslave1系统为例进行配置。
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <!-- 当前集群NameNode的IP地址和端口号。2.0前使用fs.default.name,但后续兼容--> <name>fs.defaultFS</name> <value>hdfs://192.168.1.240:9000</value> </property> <property> <!-- 设置临时文件目录 --> <name>hadoop.tmp.dir</name> <!-- 当前用户须要对此目录有读写权限。可使用命令sudo chown -hR hadoop /home/hadoop-2.3.0/ --> <value>/home/hadoop-2.3.0/hadoop-temp</value> </property> </configuration>
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <!-- SecondaryNamenode网络地址 --> <name>dfs.namenode.secondary.http-address</name> <value>192.168.1.240:9001</value> </property> <property> <!-- NameNode工作目录,须预先存在 --> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop-2.3.0/dfs-name</value> </property> <property> <!-- DataNode工作目录 --> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop-2.3.0/dfs-data</value> </property> <property> <!-- 文件(副本)的存储数量 --> <name>dfs.replication</name> <!-- 小于或等于附属机数量。默认3 --> <value>4</value> </property> <property> <!-- 可以从网页端监控hdfs --> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <!-- map-reduce运行框架 --> <name>mapreduce.framework.name</name> <!-- yarn:分布式模式 --> <value>yarn</value> </property> </configuration>
<?xml version="1.0"?> <configuration> <property> <name>Yarn.nodemanager.aux-services</name> <value>mapreduce.shuffle</value> </property> </configuration>
export JAVA_HOME=/home/jdk1.7.0_51
export JAVA_HOME=/home/jdk1.7.0_51
这里保存的是全部从属机的主机名。
hapslave1 hapslave2 hapslave3 hapslave4 hapslave5 hapslave6
SHELL$ sudo scp -rpv /home/hadoop-2.3.0/etc/hadoop/* 其它主机:/home/hadoop-2.3.0/etc/hadoop/
注意:需无任何warning或error。
SHELL../bin$ hdfs namenode -format 或 hadoop namenode -format
hadoop@hapmaster:/home/hadoop-2.3.0/bin$ hdfs namenode -format 14/03/14 13:27:47 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = hapmaster/127.0.0.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 2.3.0 STARTUP_MSG: classpath = /home/hadoop-2.3.0/etc/hadoop:/home/hadoop-2.3.0/share/hadoop/common/lib/jsr305-1.3.9.jar:/home/hadoop-2.3.0/share/hadoop/common/lib/junit-4.8.2.jar: STARTUP_MSG: build = http://svn.apache.org/repos/asf/hadoop/common -r 1567123; compiled by 'jenkins' on 2014-02-11T13:40Z STARTUP_MSG: java = 1.7.0_51 ************************************************************/ 14/03/14 13:27:47 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT] Formatting using clusterid: CID-82cb09b4-74eb-4053-9b46-8de025de7f74 14/03/14 13:27:50 INFO namenode.FSNamesystem: fsLock is fair:true 14/03/14 13:27:51 INFO namenode.HostFileManager: read includes: HostSet( ) 14/03/14 13:27:51 INFO namenode.HostFileManager: read excludes: HostSet( ) 14/03/14 13:27:51 INFO blockmanagement.DatanodeManager: dfs.block.invalidate.limit=1000 14/03/14 13:27:51 INFO blockmanagement.DatanodeManager: dfs.namenode.datanode.registration.ip-hostname-check=true 14/03/14 13:27:51 INFO util.GSet: Computing capacity for map BlocksMap 14/03/14 13:27:51 INFO util.GSet: VM type = 32-bit 14/03/14 13:27:51 INFO util.GSet: 2.0% max memory 966.7 MB = 19.3 MB 14/03/14 13:27:51 INFO util.GSet: capacity = 2^22 = 4194304 entries 14/03/14 13:27:51 INFO blockmanagement.BlockManager: dfs.block.access.token.enable=false 14/03/14 13:27:51 INFO blockmanagement.BlockManager: defaultReplication = 4 14/03/14 13:27:51 INFO blockmanagement.BlockManager: maxReplication = 512 14/03/14 13:27:51 INFO blockmanagement.BlockManager: minReplication = 1 14/03/14 13:27:51 INFO blockmanagement.BlockManager: maxReplicationStreams = 2 14/03/14 13:27:51 INFO blockmanagement.BlockManager: shouldCheckForEnoughRacks = false 14/03/14 13:27:51 INFO blockmanagement.BlockManager: replicationRecheckInterval = 3000 14/03/14 13:27:51 INFO blockmanagement.BlockManager: encryptDataTransfer = false 14/03/14 13:27:51 INFO blockmanagement.BlockManager: maxNumBlocksToLog = 1000 14/03/14 13:27:51 INFO namenode.FSNamesystem: fsOwner = hadoop (auth:SIMPLE) 14/03/14 13:27:51 INFO namenode.FSNamesystem: supergroup = supergroup 14/03/14 13:27:51 INFO namenode.FSNamesystem: isPermissionEnabled = true 14/03/14 13:27:51 INFO namenode.FSNamesystem: HA Enabled: false 14/03/14 13:27:51 INFO namenode.FSNamesystem: Append Enabled: true 14/03/14 13:27:52 INFO util.GSet: Computing capacity for map INodeMap 14/03/14 13:27:52 INFO util.GSet: VM type = 32-bit 14/03/14 13:27:52 INFO util.GSet: 1.0% max memory 966.7 MB = 9.7 MB 14/03/14 13:27:52 INFO util.GSet: capacity = 2^21 = 2097152 entries 14/03/14 13:27:52 INFO namenode.NameNode: Caching file names occuring more than 10 times 14/03/14 13:27:52 INFO util.GSet: Computing capacity for map cachedBlocks 14/03/14 13:27:52 INFO util.GSet: VM type = 32-bit 14/03/14 13:27:52 INFO util.GSet: 0.25% max memory 966.7 MB = 2.4 MB 14/03/14 13:27:52 INFO util.GSet: capacity = 2^19 = 524288 entries 14/03/14 13:27:52 INFO namenode.FSNamesystem: dfs.namenode.safemode.threshold-pct = 0.9990000128746033 14/03/14 13:27:52 INFO namenode.FSNamesystem: dfs.namenode.safemode.min.datanodes = 0 14/03/14 13:27:52 INFO namenode.FSNamesystem: dfs.namenode.safemode.extension = 30000 14/03/14 13:27:52 INFO namenode.FSNamesystem: Retry cache on namenode is enabled 14/03/14 13:27:52 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis 14/03/14 13:27:52 INFO util.GSet: Computing capacity for map Namenode Retry Cache 14/03/14 13:27:52 INFO util.GSet: VM type = 32-bit 14/03/14 13:27:52 INFO util.GSet: 0.029999999329447746% max memory 966.7 MB = 297.0 KB 14/03/14 13:27:52 INFO util.GSet: capacity = 2^16 = 65536 entries 14/03/14 13:27:52 INFO common.Storage: Storage directory /home/hadoop-2.3.0/dfs-name has been successfully formatted. 14/03/14 13:27:52 INFO namenode.FSImage: Saving image file /home/hadoop-2.3.0/dfs-name/current/fsimage.ckpt_0000000000000000000 using no compression 14/03/14 13:27:52 INFO namenode.FSImage: Image file /home/hadoop-2.3.0/dfs-name/current/fsimage.ckpt_0000000000000000000 of size 218 bytes saved in 0 seconds. 14/03/14 13:27:52 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 14/03/14 13:27:52 INFO util.ExitUtil: Exiting with status 0 14/03/14 13:27:52 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at hapmaster/127.0.0.1 ************************************************************/ hadoop@hapmaster:/home/hadoop-2.3.0/bin$
http://localhost:50070