一:虚拟机
1.下载虚拟机https://www.vmware.com/cn/products/workstation-player/workstation-player-evaluation.html
2.下载centos7镜像ios文件:下载地址http://isoredirect.centos.org/centos/7/isos/x86_64
3.安装好虚拟机后如下图创建新的虚拟机:
创建新虚拟机>>选择稍后安装操作系统>>选择Linux //centos7>>设置名称…下一步完成
然后点击虚拟机设置(如下图二)使用iOS映像文件,找到并选择下载好的文件,确定,然后重启虚拟机,按照步骤安装即可,root用户密码自行设置,安装完成后如下图三,然后重启虚拟机即安装完成;
二:搭建前准备
因为我们是要搭建Hadoop集群,所以我们这里建三个机,由于这个版本的虚拟机没有克隆功能,所以如何进行虚拟机克隆呢?我查了一下啊,通过复制修改已经建好系统了的虚拟机的相应文件即可:具体这个网址:VMware Workstation player 克隆多个CentOS实践
如上图一,我已经建好了centos7 centos7-1 centos7-2三台机器;
1.查看IP,并固定IP(将IP修改为静态的)
通过ls命令可以查看/etc/sysconfig/network-scripts/ 目录
通过vi /etc/sysconfig/network-scripts/ ifcfg-ens33
修改网卡信息,如果没有学过Linux的可以先去看看常用用的Linux命令,要注意的是不同版本的Linux系统命令有小部分不同;
编辑完成后,保存,然后重启network(service network restart
)就行了,同理另外两台机器也是一样的,IPaddr自己设置;本人的三个虚拟机IP为:
192.168.184.184
192.168.184.185
192.168.184.186
2.配置java环境
2.1下载安装jdk
我们知道Hadoop是通过Java语言来编程的,所以要配置Java环境,学过java的应该知道,Java环境即jdk
安装jdk,这一步很重要,需要注意的是jdk版本问题,本人用的是jdk8,这里附上下载网址:
https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
下载完成后需要把安装包传到虚拟机客户端中即可,传输需要借助软件,可以用大家都知道的xftp工具
这里要注意的是端口问题,远程连接用的是22号端口,所以需要先把Linux系统的22号端口打开次啊可以连接上;打开方法:输入命令iptables -I INPUT -p tcp --dport 22 -j ACCEPT
,然后重启服务,service network restart
;如下图,我把它放在root文件下:
下载链接(因为是登录账号才能下载,此页面会过期)
https://download.oracle.com/otn/java/jdk/8u241-b07/1f5b5a70bf22433b84d0e960903adac8/jdk-8u241-linux-x64.tar.gz?AuthParam=1583407894_c6dd6332089b134a77afbc40df6f5413
也可通过命令直接向Linux系统下载jdk:
yum -y install wget
wget https://download.oracle.com/otn/java/jdk/8u241-b07/1f5b5a70bf22433b84d0e960903adac8/jdk-8u241-linux-x64.tar.gz?AuthParam=1583407894_c6dd6332089b134a77afbc40df6f5413
2.2解压jdk
传输到root目录下,解压jdk:tar -zvxf jdk-8u241-linux-x64.tar.gz
2.3配置jdk环境变量:
输入vi /etc/profile
(或vim /etc/profile
需要安装vim)添加配置如下(*记住一点 一定 要在文件最后添加!*我本人因为在其他地方添加了几次。。。一直不行。。。。入了几次坑)
按照上述步骤对每台机器进行配置!
3.配置ssh免密登录
because:在集群中,Hadoop控制脚本依赖SSH来执行针对整个集群的操作。例如,某个脚本能够终止并重启集群中的所有守护进程。所以,需要安装SSH,但是,SSH远程登陆的时候,需要密码验证,集群中数千台计算机,数千台计算机都需要手工输入密码,这是不太现实的,所以,就需要配置SSH无密码登录
3.1 检查是否安装了ssh:输入命令which ssh
简单直接,没有的话就安装yum install -y openssl openssh-server
3.2 在客户端节点创建密钥文件:输入 ls ~/.ssh,查看是否有密钥存在。没有,执行下面
创建密钥,输入以下指令: ssh-keygen -t rsa
,一直默认Enter下去;输入ls ~/.ssh
,查看是否多了两个文件(id_rsa.pub和id_rsa)。
依次在各个节点创建密钥文件
3.3 将客户端节点自己的公钥写入到自己的authorized_keys中,(这里要特别注意,最好先进入~/.ssh/ 进入的命令:cd ~/.ssh
)
cat ~/.ssh/id_rsa.pub >> authorized_keys
或者cp ~/.ssh/id_rsa.pub authorized_keys
然后通过vi ~/.ssh/authorized_keys
查看公钥是否写入到该文件
然后修改.ssh和authorized_keys的权限,输入如下命令
sudo chmod 644 ~/.ssh/authorized_keys
sudo chmod 700 ~/.ssh
然后重启ssh,centos7的重启命令是systemctl restart sshd
(查看sshd服务状态:systemctl status sshd.service
启动sshd服务:systemctl start sshd.service
重启 sshd 服务:systemctl restart sshd.service
设置服务开启自启:systemctl enable sshd.service)
注意:这里的authorized_keys文件一定要在/.ssh/下,不然就不行,注意注意注意!!!本人就是在这里入坑了,浪费了一下午时间…
3.4修改客户端节点的名称,并设置ip
这个步骤是为了方便输入和去分辨三台客户端;
hostnamectl set-hostname 【你取的名字】 这样会修改三种主机名
重启后你的hostname就变了
我这里是将一个改为wx1
另外两个为wx2和wx3
输入vim /etc/hosts
修改如下,这样在这三台主机间才能通过hostname来识别彼此 ,不需要输入长IP了
然后检验一下:ssh wx1
4.关闭防火墙
因为集群都是内网搭建的,对外还有一个服务器的,那个服务器有防火墙,由它来访问内网集群,如果内网内开启防火墙,内网集群通讯会出现很多问题。
关闭防火墙: systemctl stop firewalld.service
禁用防火墙;systemctl disable firewalld.service
查看防火墙状态:firewall-cmd --state
三、安装Hadoop
1.下载Hadoop包,
我这里用的是Hadoop2.9.2(第一次使用的2.10.0的,失败了几次,就换了)
下载地址:https://hadoop.apache.org/releases.html
2.解压Hadoop
2.1下载好了后,还是通过xftp传输到虚拟机,因为前面我的jdk也在root目录下,为了区分开,我把Hadoop放在home目录下,然后一样tar -zxvf hadoop-2.9.0.tar.gz
解压tar包
2.2配置Hadoop环境变量,跟前面jdk一样,我们输入vi /etc/profile
(或vim /etc/profile
)添加配置如下
然后输入source /etc/profile
运用,输入hadoop version
检验是否成功
3.配置Hadoop相关文件
这里需要配置七个文件:core-site.xml , hdfs-site.xml , mepred-site.xml, yarn-site.xml,hadoop.env.sh、yarn-env.sh,slaves需要注意的是,因为下面的内容是我的配置,我的虚拟机节点名称为wx1,这个需要修改一下;然后就是路径问题,由于解压或其他问题肯导致Hadoop文件夹名称改变,所以一定要注意路径问题;
1.core-site.xml:
vi /home/hadoop-2.9.2/etc/hadoop/core-site.xml
在<configuration> </configuration>
节点中增加如下内容:
<property>
<name>fs.default.name</name>
<value>hdfs://wx1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop-2.9.2/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
2.hdfs-site.xml
vi /home/hadoop-2.9.2/etc/hadoop/hdfs-site.xml
在<configuration> </configuration>
节点中增加如下内容:
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop-2.9.2/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop-2.9.2/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>wx1:50090</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
3.mapred-site.xml
vi /home/hadoop-2.9.2/etc/hadoop/mapred-site.xml
在<configuration> </configuration>
节点中增加如下内容:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>wx1:50030</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>wx1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>wx1:19888</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://wx1:9001</value>
</property>
4.yarn-site.xml
vi /home/hadoop-2.9.2/etc/hadoop/yarn-site.xml
在<configuration> </configuration>
节点中增加如下内容:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>wx1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>wx1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>wx1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>wx1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>wx1:8088</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>wx1</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
5.hadoop-env.sh和yarn-env.sh
配置/home/hadoop-2.9.2/etc/hadoop目录下hadoop-env.sh、yarn-env.sh的JAVA_HOME,jdk环境变量
vi /home/hadoop/hadoop-2.9.0/etc/hadoop/hadoop-env.sh
vi /home/hadoop/hadoop-2.9.0/etc/hadoop/yarn-env.sh
在文件中找到JAVA_HOME,取消JAVA_HOME的注释,设置为 export JAVA_HOME=/root/jdk1.8.0_241
8,slaves
配置/home/hadoop/hadoop-2.9.2/etc/hadoop目录下的slaves,删除默认的localhost,添加2个从节点:
前面提到的我的三个客户端节点名称为wx1,wx2,wx3。 wx1为主节点
vi /home/hadoop-2.9.2/etc/hadoop/slaves
wx2
wx3
4.复制Hadoop至从节点
将wx1服务器上配置好的Hadoop复制到各个节点对应位置上,通过scp传送:
scp -r /home/hadoop wx2:/home/
scp -r /home/hadoop wx3:/home/
因为Hadoop比较大,这里可能需要几分钟时间
5.启动Hadoop
在wx1主节点启动hadoop服务,各个从节点会自动启动,cd /home/hadoop-2.9.2
进入/homep/hadoop-2.9.0/目录,hadoop的启动和停止都在wx1上进行;
1.初始化,输入命令:hdfs namenode -format
2.启动命令:start-all.sh
启动顺序:NameNode,DateNode,SecondaryNameNode,JobTracker,TaskTracker
3.输入jps命令查看相关信息,master上截图如下:
4.slave节点上输入jps查看:
5.停止命令:stop-all.sh
关闭顺序性:JobTracker,TaskTracker,NameNode,DateNode,SecondaryNameNode
6.访问页面
访问Hadoop页面,注意这两个页面是在Hadoop启动状态下访问的,然后就是防火墙要关闭,前面步骤中提到过,输入http://192.168.184.184:50070,看到如下界面:
输入http://192.168.184.184:8088,看到如下界面:
到了这一步。如果以上页面都能实现以及jps查看的各个节点都存活,那么基本上完成了hadoop集群的搭建了!开心^ - ^
刚接触大数据的一名大学生;
如有不足之处,还望大佬指出;
如有不懂之处,欢迎评论询问;