机器:一台6年前的旧笔记本,舍不得扔,让它发挥余热^_^
软件安装
在ubuntu software里安装virtual box
在virtual box安装虚拟机
由于笔记本内存较小,所以安装非桌面版本的linux,我安装的是centos 7,有兴趣的同学可以试试ubuntu的server版本。如果你的机器配置较好,就适当调大虚拟内存和硬盘,最好每台虚拟机2G内存以上。
创建虚拟机
选择虚拟硬盘
硬盘大小20G
挂载centos7的iso安装文件
网络选择桥接,关于virtual box的四种网络连接方式,请自行google、百度
之后点击start,就进入centos安装了,注意三台机器都创建一个相同的用户名,这里为hugotan,安装完毕,重启系统
网络设置
esc 冒号,wq保存,重启网络service network restart,如果是ubuntu系统,用gedit打开/etc/network/interfaces文件进行设置再重启网卡,测试是否可以上网及ping通主机
ps:如果主机不能解析域名但ping的通ip,是dns的问题
sudo vi /etc/resolv.conf
在末尾添加nameserver 8.8.8.8
配置时钟同步
由于hadoop集群对时间同步要求较高,需配置时钟同步,在从机器调整时区cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime,同步标准时间sudo ntpdate us.pool.ntp.org,如果报错the NTP socket is existing 执行service ntpd stop,如果没装ntpdate,yum install -y ntpdate(如果安装centos时已选好时区和时间,此步忽略)。
关闭防火墙
由于hadoop需要很多监听端口,在防火墙配置太麻烦,直接先关闭防火墙
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
在ubuntu里的命令为sudo ufw disable
安装jdk
下载rpm安装包,执行
rpm -ivh jdk-8u161-linux-x64.rpm
sudo vi /etc/profile
在末尾添加
JAVA_HOME=/usr/java/jdk1.8.0_161
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
保存退出,重新载入source /etc/profile
检查是否安装成功java -version
到此,把slave1节点机器复制一份,名为slave2,修改下IP地址和机器名,并修改hosts映射。
ps:
重命名机器名命令:vi /etc/hostname
修改hosts映射:vi /etc/hosts
集群间配置ssh免密登录
在三台机器的hugotan用户下都执行ssh-keygen -t rsa来生成rsa秘钥。
按顺序做如下操作:
如在master上将公钥放到authorized_keys里sudo cat id_rsa.pub >> authorized_keys,再把公钥传给slave1的~/.ssh目录下sudo scp authorized_keys hugotan@slave1:~/.ssh,然后把slave1 的公钥追加到authorized_keys,再传到slave2的~/.ssh目录下,又把slave2 的公钥追加到authorized_keys,最后返回每台机器复制一份authorized_keys。目的为了保证都加入了每台机器的公钥,而不落下。如果再更多台机器以此类推。
记得将authorized_key授权,执行chmod 600 authorized_key,不然会出现添加两台机器时可以互相访问,到第三台就有的可以访问有的不能访问。
期间碰到问题,在服务器添加完公钥后报错sign_and_send_pubkey: signing failed: agent refused operation这个时候只要执行如下语句就可以了
ssh-add
ps:注意查看系统安全日志命令:
sudo tail /var/log/secure -n 20
安装hadoop
从官网下载最新的版本,解压安装到当前用户的工作目录中
tar -xzvf hadoop-3.0.0.tar.gz -C ~/
为运行hadoop创建工作目录,每个节点都创建相同的目录:
mkdir ~/dfs
mkdir ~/dfs/tmp
mkdir ~/dfs/data
mkdir ~/dfs/name
这些文件目录,等一下在配置文件里就知道它们的用途了。
设置hadoop环境变量
gedit ~/.bashrc 或这vi ~/.bashrc
在末尾添加如下内容以下内容:
export JAVA_HOME=/usr/java/jdk1.8.0_161
export HADOOP_HOME=/home/hugotan/hadoop-3.0.0
export PATH=$PATH:$HADOOP_HOME/bin
hadoop配置
进入hadoop-3.0.0,添加从节点信息
vi etc/hadoop/workers
在workers文件添加
slave1
slave2
core-site.xml添加配置
hdfs-site.xml添加配置
mapred-site.xml添加配置项
yarn-site.xml添加配置项
同步节点
接下来将master节点上配置好的Hadoop文档,同步到其他节点
scp -r /home/hugotan/hadoop-3.0.0/ hugotan@slave1:/home/hugotan/
scp -r /home/hugotan/hadoop-3.0.0/ hugotan@slave2:/home/hugotan/
启动集群
格式化文件系统,在主节点上执行命令:hdfs namenode -format进入sbin文件夹,启动hdfs执行:./start-dfs.sh ,启动yarn执行./start-yarn.sh。
在浏览器输入地址http://master:9870、http://master:8088,会出现如下界面。
要查看mapreduce的jobhistory,在~/hadoop-3.0.0/bin$目录,输入mapred historyserver,在浏览器输入http://master:19888可见如下页面:
终于,基本的集群环境算是搭建完成了,后续跑一跑demo来感受下hadoop吧!
ps:由于virtualbox没安装增强功能,命令窗口显示太小,可以在主机使用ssh工具登录来操作。
欢迎关注微信公众号:大数据学习实践
参考资料:
《大数据技术基础--基于Hadoop与Spark》罗富强 李瑶 陈虹君 编著
http://hadoop.apache.org/
https://www.jianshu.com/p/1d99be0d2544
……