1、安装Oracle VM VirtualBox
2、在VirtualBox虚拟中添加3个虚拟主机,分别命令为Linux1,Linux2,Linux3
注:我们建的虚拟主机都是Ubuntu版本的Linux主机
3、在设置>存储>虚拟光驱中添加Ubuntu镜像
注:如果没有虚拟光驱,可以自己添加一个留空的虚拟光驱,如下图:
4、虚拟机网络设置
1)在新建虚拟电脑的时候,默认只设置了网卡1,如下图:
注:网络地址转换(NAT)的时候,如果主机插了网线,虚拟机可以正常上网.但是如果虚拟机中有多个虚拟电脑,则它们的ip都相同,格式为:10.0.x.x
2)如果要装hadoop集群的话,我们希望每个节点都有一个私有ip,以实现他们的互联
3)因此,我们可以给虚拟主机添加一个网卡2,此网卡连接方式为Host-Only,这种模式下,每个虚拟主机都会分配一个独立的ip,如下:
注:仅主机(Host-Only)适配器这种方式会给每个虚拟电脑分配一个独立ip,这个ip在主机的VirtualBox Host-Only Network的ip网段内.
4)我搭建的分布式集群式在win10平台下进行的,由于VirtualBox不兼容win10,在安装VirtualBox的时候不会在主机中创建Host-Only连接,换了几个版本的BirtualBox,有的能创建,但是Host-Only方式依然找不到界面名称。因为我们网卡2设置为Nat方式。如下介绍。
5)如何配置一个Nat网络。
1.在VirtualBox主界面>管理>全局设定>网络>Nat网络>添加一个Nat网络
2.在虚拟主机设置>网络>网卡2中的连接方式选则Nat网络,界面名称选择刚才建立的Nat网络。
注:1/3台虚拟主机的网卡2的界面名称都必须选同一个Nat网络。
2/如果系统中本来存在Nat网络,可以不重建,每个虚拟主机选则同一个即可。
截图如下:
6)这样的网络设置,可以保证虚拟机既可以上网,又有私有ip.
5、启动虚拟主机,安装Ubuntu操作系统
注:每台主机的姓名要相同,计算机名必须不同。我们这里计算机名取f1,f2,f3
6、耐心等待Ubuntu操作系统安装完成!!!
7、虚拟主机和主机之间实现双向拖放和共享粘贴板以及文件夹。(非必需步骤)
1)导致这些问题的原因是Linux中没有安装增强功能
2)安装增强功能,点击->设备>>安装增强功能
3)如果点击安装增强功能提示没有虚拟光驱,则在VirtualBox中添加一个留空的虚拟光驱即可.如下图:
8、在每个Ubuntu系统中安装jdk
1)官网下载后是一个jdk-8u51-linux-x64.tar.gz的压缩包
2)sudo tar -zxvf jdk-8u51-linux-x64.tar.gz解压得到jdk1.8.0_51文件夹
3)执行命令sudo gedit /etc/profile,打开etc下的profile文件,在文件最后添加环境变量。
export JAVA_HOME=/usr/java/jdk1.8.0_51
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
4)在终端输入命令source profile重新加载环境变量,输入java命令测试安装结果,如果不行请重启电脑再试。
9、配置hosts文件
1)在每台虚拟主机的终端输入ifconfig命令查看本机ip
2)由于我是在win10平台,用的是Nat网络,所以每台主机分配的ip为:
10.0.2.4;10.0.2.5;10.0.2.6.
3)执行sudo gedit /etc/hosts命令打开hosts文件,在host文件中添加每台主机名以及它们的ip,如下图红框:
注:3台虚拟主机都得配置hosts文件。
10、建立用户组、新用户(前面按照要求安装Ubuntu的,这步可省略)
1)如果前面在安装Ubuntu的时候,3台虚拟主机的用户名都相同并且主机名都不相同,那么此步骤可以省略,我们可以直接使用当前的用户和主机。
2)建立用户组
sudo groupadd hadoop
3)创建用户
sudo useradd -s /bin/bash -d /home/fim -m fim -g hadoop -G admin
-s:指定用户的登陆shell
-d:指定用户主目录
-m:如果指定的主目录不存在,则创建主目录
-g:指定用户所属的用户组,用“,”分隔多个附加组
-G:指定用户所属的附加组
4)如果系统报admin组不存在,那么我们需要给hadoop用户组分配权限,否则,该组用户不能执行sudo操作。如:给hadoop用户组赋sudo权限:
1.打开/etc/sudoers文件
2.添加%hadoop ALL=(ALL) ALL
3.截图如下:
5)建议我们在安装Ubuntu的时候就建好用户名,这样省得麻烦,否则在以后的分布式搭建过程中都得切换到新建的用户名下。
11、配置ssh免密码登陆
1)Ubuntu默认只安装了openssh-client,没有安装spenssh-server。查看进程如下图:
2)执行命令:sudo apt-get install openssh-server安装,完成后进程如下:
注:如果安装时报错说:openssh-server 还没有可供安装的候选者,请执行sudo apt-get update更新apt-get。
3)生成ssh公钥和私钥
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
注:1/如果生成过程中报.ssh目录不存在,可以自己在~下创建该目录
2/linux中“~”表示用户目录,比如此处就表示/home/fim
4)查看.ssh目录下生成的文件
注:id_dsa.pub就是生成的公钥
5)将公钥加入自己所认证的密钥之中
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
注:1/此处如果切换到.ssh目录下,也可以执行cat id_dsa.pub >>authorized_keys
2/cat命令中,">>"符号表示追加,">"表示创建,千万别搞错了。
3/此处命令表示将id_dsa.pub文件内容追加到authorized_keys文件末尾
4/此处也可以用cp id_dsa.pub authorized_keys替代,因为authorized_keys文件还没有创建,如果文件不存在,cat和cp命令都会默认创建文件,cp命令表示将文件内容拷贝到另个文件中,需注意的是会覆盖原文件内容。
注:此处我们用的cp命令拷贝后再查看文件就多了一个authorized_keys文件
6)执行ssh localhost命令连接本机
注:如果报错connect to host localhost port 22: Connection refused就是因为我们没有安装openssh-server
7)3台虚拟主机都执行上面的操作
8)将f1主机的公钥拷贝到f2,f3主机.ssh目录下,使用scp命令,s=security
scp fim@f1:~/.ssh/id_dsa.pub ~/.ssh/h1_dsa.pub
查看拷贝后目录
注:1/此处可以用@主机名的方式访问远程主机,就是因为前面配置了hosts,否则此处要写ip,显得更加麻烦
2/访问远程主机需要输入密码,其实每次访问远程主机都需要输入一次密码,这就是我们配置ssh免密码登陆的原因。
9)将拷贝过来的文件添加到我们所认证的密钥之中
cat f1_dsa.pub >> authorized_keys
10)切换到f1主机,用命令ssh f2登陆f2主机,你会发现此时已经不再需要输入f2了,登陆f3也一样。
登陆之后,f1主机的命令行路径是这样,也就是说当前用户是f2主机的fim
注:exit命令退出远程主机。
11)在f1主机中,通过远程访问的方式,将f1的公钥拷贝过来并添加到认证密钥中。
scp fim@f1:~/.ssh/id_dsa.pub ~/.ssh/f1_dsa.pub
cat ~/.ssh/f1_dsa.pub >> ~/.ssh/authorized_keys
此处有点迷茫,这样理解:这命令是为了保证NameNode能够无密码连入自己本机。也可以说是NameNode能够无密码访问JobTracker。其实我是不明白这操作有什么意义,因为这操作仅仅让authorized_keys多了一段同样的密钥而已。
12)自此,ssh免密码登陆就配置好了。
12、下载并解压hadoop安装包
1)将解压后的包命名为hadoop,并将其移动到/usr/java目录下
2)配置环境变量,执行sudo gedit /etc/profile打开profile文件,添加下面变量,保存
export HADOOP_HOME=/usr/java/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
3)执行source /etc/profile加载配置文件
4)终端执行echo $HADOOP_HOME,如果输出hadoop安装路径,则表示配置成功
13、配置hadoop
1)修改 hadoop-env.sh
export JAVA_HOME=/usr/java/jdk
2)修改core-site.xml
3)修改hdfs-site.xml
4)修改mapred-site.xml
5)修改masters和slaves,在masters文件中加上namenode的主机名(ip),在slaves中加上datanode的主机名(ip)
#masters
f1
#slaves
f2
f3
14、将配置好的hadoop拷贝到各个子节点
1)将hadoop拷贝到f2节点
scp -r /usr/java/hadoop f2:~/java/hadoop
2)将hadoop拷贝到f3节点
scp -r /usr/java/hadoop f3:~/java/hadoop
注:1.-r表示拷贝目录,不加-r表示拷贝的是文件
2.scp命令拷贝时,只能拷贝到用户目录下,即:~/下
3)配置各子节点的hadoop环境变量
4)到此,我觉得我们的hadoop安装目录最好在用户目录为好。
15、将hadoop安装目录所有权限给当前用户
sudo chown -R fim hadoop
注:-R表示向下递归,表示hadoop的所有子目录
16、格式化NameNode、启动hadoop
hadoop namenode -format
start-all.sh
17、检验 hadoop 的启动情况
1)用jps命令检查hadoop启动情况
NameNode:
DataNode:
2)http://10.0.2.4:50070检查是否加入了新的 datanode
3)http://10.0.2.4:50030检查 map reduce的运行情况
附:
一、VirtualBox共享文件夹挂载
1)创建挂载点mkdir home/fim/software
2)挂载共享文件夹sudo mount -t vboxsf BaiduShare home/fim/software
二、change该目录包括子目录的用户(owner)
sudo chown -R 用户名:所属组 目录