Hadoop虚拟机集群配置
一、下载工具VMWare Fusion:https://www.vmware.com/products/fusion.html
二、下载操作系统Ubuntu:https://www.ubuntu.com/download
三、在VirtualBox中安装一台Ubuntu系统虚拟机后(Master),clone出另外两台虚拟机(Slave)
1、虚拟机安装
一共3台虚拟机:分配情况和IP地址如下:
192.168.0.100 master — 192.168.0.101 slave1 — 192.168.0.102 slave2
2、虚拟机连接设置为桥连方式。
3、保证虚拟机的ip和主机的ip在同一个ip段,这样几个虚拟机和主机之间可以相互通信(在/etc/network/interfaces中设置各种网络参数,包括域名设置),设置完成后,重新启动sudo /etc/init.d/networking restart。
四、修改虚拟机用户配置,便于集群内主机之间访问:
1、sudo vim /etc/hostname
2、sudo vim /etc/hosts(域名访问设置:这里在访问网站时会发生错误,文章末尾介绍)
3、创建用户及用户组
(1)、创建hadoop用户组: sudo add group hadoop
(2)、创建Hadoop用户:sudo adducer -ingroup hadoop hadoop
(3)、给Hadoop用户添加权限:sudo vim /etc/sudoers
注:在root ALL=(ALL:ALL) ALL下添加hadoop ALL=(ALL:ALL) ALL
五、安装ssh: sudo apt-get install ssh
1、SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
(1)、远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)、用户使用这个公钥,将登录密码加密后,发送回来。
(3)、远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
2、已有ssh或验证是否安装成功ps -e | grep ssh
3、SSH无密码登录(本机测试)
(1)、Master主机使用ssh-keygen命令生成公钥私钥对:ssh-keygen -t rsa -P ‘’,生成的密钥对保存在~/.ssh中
(2)、将生成的公钥追加到授权的key文件中去:cat ~/.ssh/master.pub >>~/.ssh/authorized_keys
(3)、修改SSH配置文件/etc/ssh/sshd_config(设置完成后,重新启动service ssh restart):
(4)、目录及文件权限设置(权限设置不能图省事,若权限太大,数字签名会不支持)
chmod 644 authorized_keys
chmod 700 ~/.ssh/
(5)、验证ssh localhost,无密码登录成功:
(6)、config配置(ssh-keygen生成自定义公钥私钥名称(master; master.pub)情况下)
1)、在mac客户机命令行下创建公钥私钥对(-P表示密码,’’表示空密码)
kirogi$ ssh-keygen -t rsa -P ''
2)、在~/.ssh/文件夹下创建并配置config文件(为了找到私钥)
#Localhost
Host localhost //别名
HostName 127.0.0.1 //主机名(IP)
Port 22 //端口号
User hadoop //用户名
IdentityFile ~/.ssh/master //私钥文件路径
3)、上传公钥master.pub文件到服务端.ssh文件目录下
kirogi$ scp ~/.ssh/master.pub root@xxx.xx.xxx.xx:/root/.ssh/
4)、在服务端.ssh文件下,若无authorized_keys文件,则创建
~# touch authorized_keys
5)、服务端复制上传的公钥master到authorized_keys文件
cat /root/.ssh/master.pub >> authorized_keys
6)、masterr(.ssh)权限设置
chmod 644 authorized_keys
chmod 700 ~/.ssh/
注:权限设置不能图省事,要保证.ssh和authorized_keys只有用户自己有些权限,不然验证无效(目录及文件权限太大,为了保证安全,数字签名不支持)
7)、若出现错误:Agent admitted failure to sign using the key
ssh-add ~/.ssh/master
8)、测试:ssh localhost
原理(此处配置无需操作):为了实现Master主机到多个Slave主机的无密码登录,需要将Master生成的公钥发送到所有的Slave主机上:
1、ssh-copy-id -i ~/.ssh/master.pub remote-host
2、ssh-copy-id 将key直接写到远程机器的 ~/ .ssh/authorized_key.文件中
3、ssh remote-host(测试)
注:cat ~/.ssh/id_rsa.pub | ssh root@MasterHadoop 'cat >> ~/.ssh/authorized_keys’也可以达到相同的效果,在所有主机上均执行一次(chmod 600 ~/.ssh/authorized_keys)。
六、安装JDK
1、下载jdk:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html
2、解压jdk到/usr/java/目录下(一般自己创建java文件夹):
3、设置java环境变量(4种方式—采用第二种)
(1)、export PATH=/usr/java/jdk1.8.0_111/:$PATH(对当前用户当前窗口有效)
(2)、sudo vim ~/.bashrc(对当前用户永久生效)
//在最后一行添上(source ~/.bashrc生效):
(3)、sudo vim /etc/profile(对所有用户永久生效)
//在最后一行添上(系统重启生效):
export PATH=/usr/java/xxx:$PATH
(4)、vim /etc/environment(对所有用户永久生效)
//在末尾加上(系统重启生效):
PATH=“/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/java/xxx”
(5)、验证:java -version
七、Hadood集群安装
1、命令行下载(可以下载源码自行编译,我们这里使用已编译好的包)
wget是linux最常用的下载命令, 一般的使用方法是: wget + 空格 + 要下载文件的url路径:
sudo wget -c http://apache.fayea.com/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz
2、解压到/usr/hadoop/文件中
sudo tar -xzvf hadoop-2.8.0.tar.gz(更名为hadoop_2.8.0)
3、配置环境变量
4、配置Hadoop
(1)、hadoop-env.sh:/usr/hadoop/etc/hadoop/hadoop-env.sh
(2)、core-site.xml:/usr/hadoop/etc/hadoop/core-site.xml
(3)、hdfs-site.xml:/usr/hadoop/etc/hadoop/hdfs-site.xml
其中dfs.replicationb表示数据块应该被复制的份数(slave数量不能小于这个值)
(4)、mapred-site.xml:/usr/hadoop/etc/hadoop/mapred-site.xml
注:若文件不存在,则cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
(5)、yarn-env.sh:/usr/hadoop/etc/hadoop/yarn-env.sh
(6)、slaves:/usr/hadoop/etc/hadoop/slaves
(7)、yarn-site.xml:/usr/hadoop/etc/hadoop/yarn-site.xml
(8) 、权限设置:/usr/hadoop/
sudo chown -R hadoop:hadoop /usr/hadoop/hadoop_2.8.0
sudo chmod 777 /usr/hadoop
八、分别clone slave1、slave2
1、 网络配置:sudo vim /etc/network/interfaces
2、主机名:sudo vim /etc/hostname
3、主机域名配置:sudo vim /etc/hosts
4、删除master中私钥相关配置(config、known_hosts、master):cd ~/.ssh
九、格式化节点:hfs namenode -format(successfully)
十、启动:start-all.sh
1、出现错误
在~/.bashrc下设置:
2、出现警告(暂时跳过,需要自编译hadoop-native或下载对应版本的native)
十一、主机上查看
1、192.168.0.100:50070
2、192.168.0.100:8088
(1)、telnet 192.168.0.100 8088
(2)、查看master主机端口,netstat –tpnl
(3)、解决方法
命令:hostname -i
结果:127.0.0.1 192.168.0.100
解决:去掉/etc/hosts中“127.0.0.1 master”
(4)、访问成功