这是一篇虚拟机上Linux环境下hadoop集群搭建的文章。
本文的思路是:在虚拟机上安装并部署Apache Hadoop 3.1.3版本,介绍它的集群架构组成、各模块协同工作原理、技术细节。
通过安装Hadoop集群,可以让你对它有更好的理解,这对于学习hadoop来说是很好的帮助。
电脑配置----------Windows 10家庭版,8GB运行内存
(最近学习分布式架构和微服务架构,搭了好多台虚拟机后,明显感觉配置跟不上了,趁着双11,赶紧又下单了一条8GB的内存,回来后就是16GB运行内存了,感觉爽歪歪............)
Linux虚拟机------镜像为 CentOS-7-x86_64-DVD-1810.iso
jdk版本--------jdk-8u74-linux-x64
hadoop版本-------hadoop-3.1.3
(hadoop 官网下载地址:Apache Download Mirrors)
linux远程连接工具--------Xshell-6+FTP(注意:这两个版本需要对应,否则可能会无法使用)
因为之前没上传百度网盘,所以上面环境的软件下载地址就不放了。如果有需要,可以留言。
在你电脑上装好虚拟机搭建环境,然后装好linux系统,在linux上装好JDK,并且配置好环境,之前我已经写过了,附上原文链接(安装教程:【亲测可用】Linux环境下搭建JDK环境),上传jdk(linux版本)安装包,还有hadoop安装包,这里就需要用到linux远程工具Xshell和ftp,所以你得先把工具提前安装好。
(可以分别装三台,也可以装一台,然后克隆两台)
不过克隆的话,需要修改IP地址和主机名,个人推荐先搭好一台的所有环境,然后克隆两台出来,比较省事。
zookeeper1 | zookeeper2 | zookeeper3 |
---|---|---|
NameNode | ResourceManage | |
DataNode | DataNode | DataNode |
NodeManager | NodeManager | NodeManager |
HistoryServer | SecondaryNameNode |
(默认已经搭建好jdk,并且已经上传,并解压hadoop安装包,我的hadoop解压包放在了 /usr/local/ 下)
磨叽了这么多,终于开始配置环境了
(1)配置 hadoop-env.sh、mapred-env.sh、yarn-env.sh文件中的JDK路径:
首先,进入到配置文件目录下
(建议把 hadoop解压到 /usr/local/ 文件夹下面,便于参考我的操作,一般企业中,约定 /usr/local/ 目录下就是放安装的软件的)
cd /usr/local/hadoop/etc/hadoop (修改的几乎所有hadoop配置文件都在这个目录)
然后分别进入hadoop-env.sh、mapred-env.sh、yarn-env.sh三个文件,进行编辑
vi hadoop-env.sh
vi mapred-env.sh
vi yarn-env.sh
进入一个文件内,就将下面这句jdk配置路径放入,保存,关闭
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_74 (这是我的jdk bin目录之前的路径,具体你的还需要看你jdk安装在了哪里)
(2)配置core-site.xml
(配置之前,你先要去 这儿 /usr/local/hadoop/ 创建data文件夹,然后在data文件夹下创建tmp文件夹。
具体可以直接在 FTP上操作(这个比较简单一点,和Windows环境下一模一一样),当然也可以拿命令行来操作)
vi core-site.xml (打开后,编辑文件,将下面的内容放入,下同)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://zookeeper1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/data/tmp</value>
</property>
</configuration>
注意:如果你的主机名不是 zookeeper1 ,上面的配置文件,你要改成你的主机名(下同)
fs.defaultFS为NameNode的地址。
hadoop.tmp.dir为hadoop临时目录的地址,默认情况下,NameNode和DataNode的数据文件都会存在这个目录下的对应子目录下。应该保证此目录是存在的,如果不存在,先创建。
(3)配置hdfs-site.xml
vi hdfs-site.xml (打开后,编辑文件,将下面的内容放入)
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>zookeeper3:50090</value>
</property>
</configuration>
dfs.namenode.secondary.http-address是指定secondaryNameNode的http访问地址和端口号,因为在规划中,我们将zookeeper3规划为SecondaryNameNode服务器。
所以这里设置为:zookeeper3:50090
(4) 配置workers
vi workers
zookeeper1
zookeeper2
zookeeper3
workers文件是指定HDFS上有哪些DataNode节点。
(5) 配置yarn-site.xml
vi yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>zookeeper2</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
</configuration>
根据规划yarn.resourcemanager.hostname这个指定resourcemanager服务器指向zookeeper2。
yarn.log-aggregation-enable是配置是否启用日志聚集功能。
yarn.log-aggregation.retain-seconds是配置聚集的日志在HDFS上最多保存多长时间。
(6)配置mapred-site.xml
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>zookeeper1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>zookeeper1:19888</value>
</property>
</configuration>
mapreduce.framework.name设置mapreduce任务运行在yarn上。
mapreduce.jobhistory.address是设置mapreduce的历史服务器安装在zookeeper1机器上。
mapreduce.jobhistory.webapp.address是设置历史服务器的web页面地址和端口号。
(7)配置Hadoop在linux系统中的环境变量(和jdk一样的道理)
cd /etc
vi profile
添加下面的内容
export HADOOP_HOME=/usr/local/hadoop (这儿也需要看你hadoop的安装路径)
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
(把搭建好的这台虚拟机在克隆2台出来,集群至少需要3台,而且集群的数量一般都奇数,是因为内部的选举机制)
克隆之后就是修改克隆好的两台虚拟机的主机名和ip了
修改主机名:
vi /etc/sysconfig/network
将 HOSTNAME= **** 改为 HOSTNAME=zookeeper1(这里你可以改为你想要的主机名)
下文我的主机名分别为 zookeeper1、zookeeper2、zookeeper3(因为之前我已经搭建过zookeepr集群环境,所以主机名就懒的改了)
修改ip地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static (这儿改为static,也就是静态ip,负责重启虚拟机ip地址可能就会变)
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=9624e7ae-2a9d-4ba5-a20a-902971af602a
DEVICE=ens33
ONBOOT=yes (这儿改为 yes)
IPADDR=192.168.25.132 (这儿改为你自己的ip地址)
NETMASK=255.255.255.0
GATEWAY=192.168.25.1
DNS1=119.29.29.29
vi /etc/hosts
文件内,添加如下内容(具体还要看你的三台虚拟机的主机名和ip地址对应分别为,下面的只是我自己的)
192.168.25.132 zookeeper1
192.168.25.131 zookeeper2
192.168.25.128 zookeeper3
Hadoop集群中的各个机器间会相互地通过SSH访问,每次访问都输入密码是不现实的,所以要配置各个机器间的
SSH是无密码登录的。
1、 在zookeeper1上生成公钥
ssh-keygen -t rsa
一路回车,都设置为默认值,然后再当前用户的Home目录下的.ssh目录中会生成公钥文件(id_rsa.pub)和私钥文件(id_rsa)。
2、 分发公钥(分别输入,分发到三台)
ssh-copy-id zookeeper1
ssh-copy-id zookeeper2
ssh-copy-id zookeeper3
3、 分别设置zookeeper2、zookeeper3到其他机器的无密钥登录
同样的在zookeeper2、zookeeper3上生成公钥和私钥后,将公钥分发到三台机器上。
到这儿,三台虚拟机的hadoop环境已经搭建好了,集群也已经创建好了
三台主机都 进入到 /usr/local/hadoop 目录下
在zookeeper1主机中分别输入
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode
在zookeeper2主机中输入
sbin/hadoop-daemon.sh start datanode
在zookeeper3主机中输入
sbin/hadoop-daemon.sh start datanode
sbin/hadoop-daemon.sh start secondarynamenode
在zookeeper2中分别输入
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
在zookeeper1中输入
sbin/yarn-daemon.sh start nodemanager
在zookeeper3中输入
bin/yarn-daemon.sh start nodemanager
sbin/yarn-daemon.sh start secondarynamenode
输入 jps
看看是否和2.服务器功能规划对应的服务一样
查看HDFS Web页面
查看YARN Web 页面
至此,hadoop集群搭建完毕!!!
当然,以上只是我自己的搭建过程,相信会有很多人在搭建过程中遇到各种各样的问题,欢迎大家留言