1、环境准备
首先准备了三台虚拟机(为了避免环境的干扰,都是新建的虚拟机),分别分配了2G内存、40G硬盘、2核CPU,然后安装了CentOS-7-x86_64-Minimal-1810操作系统,并配置了静态IP地址。
集群规划:
搭建的是NameNode与ResourceManager单节点架构。节点具体分别如下:
服务器名称 | IP地址 | NameNode | SecondaryNameNode | dataNode | ResourceManager | NodeManager |
---|---|---|---|---|---|---|
node01 | 192.168.1.8 | 是 | 是 | 是 | 是 | 是 |
node02 | 192.168.1.9 | 否 | 否 | 是 | 否 | 是 |
node03 | 192.168.1.10 | 否 | 否 | 是 | 否 | 是 |
文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据
secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据
数据计算核心模块:
ResourceManager:接收用户的计算请求任务,并负责集群的资源分配
NodeManager:负责执行主节点APPmaster分配的任务
2、环境配置
1、设置主机名称
在三台服务器上分别执行如下指令即可。
#在192.168.1.8机器上执行
[root@localhost ~]# hostnamectl set-hostname node01
#在192.168.1.9机器上执行
[root@localhost ~]# hostnamectl set-hostname node02
#在192.168.1.10机器上执行
[root@localhost ~]# hostnamectl set-hostname node03
2、关闭防火墙
为了避免因为端口问题造成的干扰,在测试阶段,把防火墙暂时停掉。注意:在生产环境一般不建议停掉防火墙,尤其是可以连接互联网的服务。
[root@localhost ~]# systemctl stop firewalld.service #关闭防火墙
[root@localhost ~]# systemctl disable firewalld.service #禁止开机启动
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# firewall-cmd --state #查看防火墙状态
not running
3、关闭selinux
进入到/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled。
vim /etc/selinux/config
4、设置免密登录
-
首先在node01服务器上通过使用 ssh-keygen 命令来生成秘钥,命令如下:
ssh-keygen -t rsa
通过上面命令,在.ssh/目录下会生产如下文件:
- id_rsa: 生成的私钥文件
- id_rsa.pub: 生成的公钥文件
下面两个文件需要执行 ssh-copy-id 命令后产生。
- authorized_keys: 存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥。
- known_hosts: 已知的主机公钥清单
- 通过 ssh-copy-id 命令设置免密钥登录
其中,192.168.1.8、192.168.1.9、192.168.1.10表示需要设置免密登录的服务器地址。ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.8 ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.9 ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.10
3、安装JDK
有资料显示(未验证),在hadoop-2.7.5版本,不支持jdk1.8,所以这里安装了jdk1.7。同时需要保证当前系统没有安装过其他jdk,包括自带的openjdk。实际测试:hadoop-2.7.5版本可以使用jdk1.8。并且建议按照jdk1.8,后续使用Hive3.1.2的时候,出现了jdk版本低的问题。
1、解压jdk,并把解压文件复制到/export/servers/目录中,命令如下:
tar -zxvf jdk-7u75-linux-x64.tar.gz -C ../servers/
2、配置环境变量,命令如下:
vim /etc/profile
配置如下内容:
export JAVA_HOME=/export/servers/jdk1.7.0_75
export PATH=:$JAVA_HOME/bin:$PATH
执行下面命令,让环境变量生效:
source/etc/profile
3、验证jdk安装是否成功,如下所示:
4、安装hadoop
1、解压hadoop,并把解压文件复制到/export/servers/目录中,命令如下:
tar -zxvf hadoop-2.7.5.tar.gz -C ../servers/
2、配置环境变量,命令如下:
vim /etc/profile
配置如下内容:
export HADOOP_HOME=/export/servers/hadoop-2.7.5
export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
执行下面命令,让环境变量生效:
source/etc/profile
3、修改hadoop的配置文件
需要修改以下配置文件,如图所示:
首先,修改core-site.xml文件,在<configuration>元素中添加相应的配置文件,如下所示:
<configuration>
<!-- 指定集群的文件系统类型:分布式文件系统 -->
<property>
<name>fs.default.name</name>
<!--因为前面已经配置了服务器名称映射IP,所以这里可以使用服务器名称进行配置-->
<value>hdfs://node01:8020</value>
</property>
<!-- 指定临时文件存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/servers/hadoop-2.7.5/hadoopDatas/tempDatas</value>
</property>
<!-- 缓冲区大小,实际工作中根据服务器性能动态调整 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!-- 开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 -->
<property>
<name>fs.trash.interval</name>
<value>10080</value>
</property>
</configuration>
其次,修改hdfs-site.xml文件,在<configuration>元素中添加相应的配置文件,如下所示:
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node01:50090</value>
</property>
<!-- 指定namenode的访问地址和端口 -->
<property>
<name>dfs.namenode.http-address</name>
<value>node01:50070</value>
</property>
<!-- 指定namenode元数据的存放位置 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///export/servers/hadoop-2.7.5/hadoopDatas/namenodeDatas,file:///export/servers/hadoop-2.7.5/hadoopDatas/namenodeDatas2</value>
</property>
<!-- 定义dataNode数据存储的节点位置,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///export/servers/hadoop-2.7.5/hadoopDatas/datanodeDatas,file:///export/servers/hadoop-2.7.5/hadoopDatas/datanodeDatas2</value>
</property>
<!-- 指定namenode日志文件的存放目录 -->
<property>
<name>dfs.namenode.edits.dir</name>
<value>file:///export/servers/hadoop-2.7.5/hadoopDatas/nn/edits</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///export/servers/hadoop-2.7.5/hadoopDatas/snn/name</value>
</property>
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file:///export/servers/hadoop-2.7.5/hadoopDatas/dfs/snn/edits</value>
</property>
<!-- 文件切片的副本个数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 设置HDFS的文件权限-->
<property>
<name>dfs.permissions</name>
<value>true</value>
</property>
<!-- 设置一个文件切片的大小:128M-->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
</configuration>
然后,修改yarn-site.xml文件,在<configuration>元素中添加相应的配置文件,如下所示:
<configuration>
<!-- 配置yarn主节点的位置 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 开启日志聚合功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置聚合日志在hdfs上的保存时间 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!-- 设置yarn集群的内存分配方案 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>20480</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
</configuration>
然后,修改mapred-site.xml文件,在<configuration>元素中添加相应的配置文件,如下所示:
<configuration>
<!-- 开启MapReduce小任务模式 -->
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
<!-- 设置历史任务的主机和端口 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>node01:10020</value>
</property>
<!-- 设置网页访问历史任务的主机和端口 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node01:19888</value>
</property>
</configuration>
然后,修改hadoop-env.sh、mapred-env.sh文件,如果前面已经在环境变量中配置了JAVA_HOME,这两个文件中的默认配置${JAVA_HOME}一般都会生效的,如果前面没有配置JAVA_HOME环境变量,这里可以直接配置JAVA_HOME,如下所示:
注:可以选择默认,不添加如下配置,在后续学习Hive中,因为jdk版本问题,浪费了较多时间。
export JAVA_HOME=/export/servers/jdk1.7.0_75
最后,修改集群配置文件slaves,添加如下信息:
4、创建hadoop需要的文件目录,命令如下:
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/tempDatas
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/namenodeDatas
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/namenodeDatas2
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/datanodeDatas
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/datanodeDatas2
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/nn/edits
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/snn/name
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/dfs/snn/edits
5、分发jdk、hadoop到node02、node03
到这里位置,hadoop的配置文件也完成了配置。这时候,关于jdk、hadoop的安装配置,同时需要在node02、node03上也重新来一遍,为了简化过程,下面通过scp命令把安装文件分发到node02、node03 。
在node02、node03上安装JDK
首先进入jdk、hadoop的安装目录,如下所示:
然后分发jdk,分别到node02、node03,命令如下:
scp -r jdk1.7.0_75 node02:$PWD
scp -r jdk1.7.0_75 node03:$PWD
最后,配置环境变量,并验证jdk是否安装成功(参考前面配置,这里不再重复)。
在node02、node03上安装Hadoop
分发Hadoop,分别到node02、node03,命令如下:
scp -r hadoop-2.7.5 node02:$PWD
scp -r hadoop-2.7.5 node03:$PWD
然后,配置环境变量(参考前面配置,这里不再重复)。
6、启动集群
启动 Hadoop 集群时,需要启动 HDFS 和 YARN 两个模块。当第一次启动 HDFS 时,必须对其进行格式化操作。本质上是一些清理和准备工作,因为此时的 HDFS 在物理上还是不存在的。
首先,进行格式化(首次需要执行),命令如下:
cd /export/servers/hadoop-2.7.5/ #首先进入hadoop根目录
bin/hdfs namenode -format #执行格式化命令
然后,启动hdfs集群,命令如下:
sbin/start-dfs.sh
再启动yarn集群,命令如下:
sbin/start-yarn.sh
最后,启动historyserver,查看历史完成的任务,命令如下:
sbin/mr-jobhistory-daemon.sh start historyserver
7、查看可视化界面,验证启动是否成功
1、首先访问:http://192.168.1.8:50070/explorer.html#/,用来查看hdfs,如下所示:
2、然后访问:http://192.168.1.8:8088/cluster,查看yarn集群,如下所示:
3、最后访问:http://192.168.1.8:19888/jobhistory,查看历史完成的任务,如下所示: