搭建环境准备

VMWARE WORKPRO 15 + CENTOS 7

  • 虚拟化软件可以选择VMWare的新版本或者VirturalBox,建议使用统一的软件;
  • Linux操作系统可以选择 CentOS 7 或更高版本,也可以选择 Ubuntu ,此次介绍在CentOS7上部署hadoop环境,建议统一;

问题:为什么要用虚拟化软件 ,要在 Linux 上搭建?

hadoop属于分布式技术 框架,需要搭设集群环境,由于物理机有限,通过虚拟化技术可以实现集群节点的创建;

hadoop应用的生产环境多使用Linux;

社区资源多,学习方便;

工具支持多,hadoop属于开源项目,与linux有共同点,有些开源工具方便使用;

配置的逻辑结构如下图:

hadoop 集群内存要求 hadoop集群硬件配置_hadoop

一、前期准备

账户的免密执行

  1. 编辑文件sudoer(复制黏贴可用vim的 yy + p), 如为·hadoop用户设置免密
sudo vim /etc/sudoers
 #-----sudoers
root   ALL(ALL)  ALL
hadoop ALL(ALL)  NOPASSWD:ALL
 #-----

主机名设置

(同集群设置hosts,这个可以在集群建立之后配置)

sudo vim /etc/hosts
  1. 编辑文件hosts ,将本机的ip地址(如192.168.x.x)和设置的机器名添加到文件末尾一行,配置集群映射
#-----hosts
 127.0.0.1    hadoop01
 192.168.x.x  hadoop01
 192.168.x.x  hadoop02
 ......
 #-----
  1. hostnamectl命令设置终端显示
hostnamectl --static set-hostname hadoop01  #设置终端显示

关闭SELINUX安全协议

sudo vim /etc/sysconfig/selinux
  • 编辑文件hosts ,将本机的ip地址(如192.168.x.x)和设置的机器名添加到文件末尾一行
#-----
 selinuxSELINUX = disabled
 #-----

关闭防火墙

# 关闭防火墙
systemctl stop firewalld
# 关闭防火墙开机启动
systemctl disable firewalld

为什么要关闭防护墙?学习阶段可以直接关闭,避免影响集群内节点之间的通信,加上该环境搭建在内网中,一般不会出现安全问题。

实际应用场景建议使用安全组策略,开放指定端口,配置方法

添加windows远程桌面插件(可选)

#.安装epel库
yum install epel-release
# 安装 
xrdp yum install xrdp -y
# 启动
xrdp systemctl start xrdp
# 设置为自启动
systemctl enable xrdp

二、基本环境配置

JRE环境

#查询已安装的jdk,若存在则准备卸载
rpm -qa |grep java
#卸载已安装的
jdkrpm -e --nodeps ****jdk****
# 建议使用完整的jdk,而不是 openjdk

# Hadoop为安装Hadoop的安装
cd /home/hadoop/software
# 解压jdk压缩包tar
tar -zvxf jdk-8u-121.tar.gz
# 配置 JDK 环境
sudo vim /etc/profile
#------
vi /etc/profile 
#在文件末尾将解压后的jdk目录设置成JAVA_HOME变量,并配置到PATH中export 
JAVA_HOME=/home/hadoop/software/jdk1.8.0_121export
PATH=$PATH:$JAVA_HOME/bin
#-----
# source profile使配置立即生效
source /etc/profile
# 测试 jdk 配置请看
whereis java

配置Hadoop环境

  1. 解压hadoop
# 解压hadoop压缩包
cd /home/hadoop/software tar -zvxf hadoop-2.7.7.tar.gz
# 配置环境变量
  1. 配置hadoop环境变量
vi /etc/profile

在文件末尾将解压后的hadoop目录设置成HADOOP_HOME变量,并配置到PATH中export

#------
HADOOP_HOME=/home/hadoop/software/hadoop.2.7.7export
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
#-----
  1. source profile使配置立即生效
source /etc/profile
  1. 配置hadoop内部的jdk环境变量
vi hadoop2.7.7/etc/hadoop/hadoop-env.sh
#------hadoop2.7.7/etc/hadoop/hadoop-env.sh 
#将jdk变量更换成本地的
# The java implementation to use.
export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/home/hadoop/software/jdk1.8.0_121
#-----
  1. 测试 jdk 配置请看
whereis hadoop
# 或者通过hadoop直接查看
hadoop

单机版hadoop环境已经部署完成,简单测试

  1. 创建两个测试目录 input ,用于存放hadoop处理数据源和结果
cd /home/hadoop/software
mkdir hadoop-study-space
cd hadoop-study-space
mkdir input  
cd ../
chmod -R 755 hadoop-study-space
  1. 将待处理数据拷贝到input目录下,如hadoop的xml包含dfs的内容
hadoop jar /home/hadoop/software/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar grep /home/hadoop/software/hadoop-study-space/input /home/hadoop/software/hadoop-study-space/output 'dfs[a-z.]+'

三、克隆虚拟机,搭建集群环境

复制虚拟机系统(虚拟机克隆或文件拷贝)

四、网络配置

设置静态ip地址等

(或者通过NAT-vm8的设置也可以)【可在集群搭建前配置】

# 先检查联网状态及ip地址以及第一个虚拟网卡的名称
ifconfig 
# 设置ens的网络参数配置脚本
cd /etc/sysconfig/network-scripts/
# 找到自己的的网卡设置 ifcfg-ens33(当前主机使用的网卡)
vim ifcfg-ens33
# 修改ip获取方式(dhcp --> static) 
# onboot 改为自启动 yes
vi  /etc/sysconfig/network-scripts/ifcfg-ens33

设置ip地址

#-----/etc/sysconfig/network-scripts/ifcfg-ens33 文件
BOOTPROTO=static # 使用静态IP地址,默认为dhcp 
IPADDR=192.168.38.130 # 设置的静态IP地址
NETMASK=255.255.255.0 # 子网掩码 
GATEWAY=192.168.38.1 # 网关地址 
DNS1=8.8.8.8 
#-----

为什么要配置静态地址?

目前虚拟机网卡IP地址为自动获取模式DHCP。也就是说虚拟机每次开机IP地址都不是确定的。这对于集群来说是不可接受的,因为集群节点(master、slave)之间通讯是靠IP地址找到对方的,如果IP地址不固定会造成集群间无法访问也就是集群无法工作。

设置本机名称

(其他虚拟机同下,host-ip地址的映射已在前面配置)

  1. 修改配置文件
cd /etc/sysconfig/
#若无network,则创建
vim network
#---network
NETWORKING=yes
HOSTNAME=hadoop001
#---
  1. 通过控制行直接修改
hostnamectl hostnamectl set-hostname hadoop001

为什么要配置HOSTS?

Hadoop多节点分布式集群中还有两个从节点DATANODE,而它默认是通过主机名去找到对应节点的;
Hosts文件存储网络中各节点的信息负责计算机名与IP的映射,通过配置hosts文件可以完成节点访问。

ssh远程设置免密切换

此处只展示单向,每台机器都按此流程配置【这部分建议在克隆后单独配置】

# 在源主机A中执行指令,生成ssh秘钥
 ssh-keygen
# 默认生成在当前用户主目录下 .ssh ,目录名为 .ssh ,id_rsa 和 id_rsa.pub

# 将ssh的公钥传递到要免密切换的机器中
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@hadoop02
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@hadoop03
# ssh 命令测试
ssh hadoop02
ssh hadoop03

备注: .ssh目录的权限必须是700, .ssh/authorized_keys文件权限必须是600 (默认权限)

为什么要设置ssh远程设置免密切换?

在Hadoop启动以后,namenode是通过SSH(Secure Shell)来启动和停止各个节点上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无密码公钥认证的方式。
这里其实需要了解hadoop namenode 的工作原理;

五、hadoop 配置集群配置

位置 hadoop-2.7.7/etc/hadoop

hadoop-2.7.7/etc/hadoop 里面存放了hadoop框架的配置脚本文件

cd /home/hadoop/software/hadoop-2.7.7/etc/hadoop

配置说明

这里准备设置3台机器来搭建hadoop(可以按需求配置时相应做调整)

  1. 其中一个nodenode
  2. 两个datanode,次secondarynamenode 不单独设置服务器(此处使用的是2.x版本,建议与namenode 分开),可以放到namenode下也可以放到datanode

运行环境配置 hadoop-env.sh

#hadoop-env.sh 环境变量,设置jdk路径、调整运行内存等参数
JAVA_HOME=/home/hadoop/software/jdk1.8.0_121

集群参数配置 core-site.xml

No.

参数名

默认值

参数解释

1

fs.defaultFS

file:///

文件系统主机和端口

2

io.file.buffer.size

4096

流文件的缓冲区大小

3

hadoop.tmp.dir

/tmp/hadoop-${user.name }

临时文件夹

说明:在配置文件中的节点里加入以下属性(下同)

  1. HDFS URI 、Hadoop的临时目录等
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://hadoop01:9000</value>		
	<description>hdfs的主节点</description>
</property>
<property>                
	<name>hadoop.tmp.dir</name>               
	<value>/home/hadoop/hadoopdata</value>		
	<description>存放临时文件的目录</description>
</property>

HDFS参数配置 hdfs-site.xml

节点和数据节点的存放位置、文件副本的个数、http访问地址

No

.参数名

默认值

参数解释

1

dfs.namenode.secondary.http-address

0.0.0.0:50090

定义HDFS对应的HTTP服务器地址和端口

2

dfs.namenode.name,dir

file://${hadoop.tmp.dir}/dfs/name

定义DFS的名称节点在本地文件系统的位置

3

hadoop.tmp.dir

file://${hadoop.tmp.dir}/dfs/data

定义DFS数据节点存储数据块时存储在本地文件系统的位置

4

dfs.replication

3

缺省的块复制数量

5

dfs.webhdfs.enabled

true

是否通过http协议读取hdfs文件,如果选是,则集群安全性较差

<property>   
	<name>dfs.namenode.name.dir</name>   
	<value>/home/hadoop/hadoopdata/name</value>  
	<description>namenode的目录</description>
</property>
<property>   
	<name>dfs.datanode.data.dir</name>   
	<value>/home/hadoop/hadoopdata/data</value>   
	<description>datanode的数据存储目录</description>
</property>
<property>   
	<name>dfs.replication</name>   
	<value>2</value>
</property>
<property>   
	<name>dfs.secondary.http.address</name>   
	<value>hadoop02:50090</value>   
	<description>secondarynamenode的运行节点,和namenode不同节点</description>
</property>

注意:以下配置文件默认采用hosts主机名来定位主机(即步骤1-②),要设置ip地址的需要对配置文件进行修改
默认是通过host映射hdfs-site.xml

<property>       
	<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
	<value>false</value>
</property>

MapReduce参数配置

MapReduce参数配置 mapred-site.xml reduce任务个数、内存等

No.

参数名

默认值

参数解释

1

mapreduce.framework.name

local

取值local、classic或yarn其中之一,如果不是yarn,则不会使用yarn集群来实现资源的分配

2

mapreduce.jobhistory.address

0.0.0.0:10020

定义历史服务器的地址和端口,通过历史服务器查看已经运行完的Mapreduce作业记录

3

mapreduce.jobhistory.webapp.address

0.0.0.0:19888

定义历史服务器web应用访问的地址和端口

备注,默认解压后只有mapre-site.xml.template,可以将mapre-site.xml.template重命名为mapre-site.xml
目前2.x采用yarn接管,这个配置文件是 JOB调度的。

<property>    
	<name>mapreduce.framework.name</name>    
	<value>yarn</value>   
	<description>指定MapReduce跑在yarn上</description>
</property>

Yarn参数配置

Yarn参数配置 yarn-site.xml 集群资源管理系统参数 配置Yarn的ResourceManager ,nodeManager的通信端口,web监控端口

No.

参数名

默认值

参数解释

0

yarn.resourcemanager.hostname

设置主机节点(这里默认是hosts主机名)

1

yarn.resourcemanager.address

0.0.0.0:8032

ResourceManager(以下简称RM) 提供客户端访问的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等

2

yarn.resourcemanager.scheduler.address

0.0.0.0:8030

RM提供给ApplicationMaster的访问地址。ApplicationMaster同通过该地址向RM申请资源、释放资源等

3

yarn,resoucemanager.resource.resource-tracker.address

0.0.0.0:8031

RM提供NodeManager的地址。NodeManager通过该地址向RM汇报心跳,领取任务等

4

yarn.resourcemanager.admin.address

0.0.0.0:8033

RM提供管理员的访问地址。管理员通过该地址向RM发送管理命令等

5

yarn.resourcemanager.webapp.address

0.0.0.0:8088

RM对web服务提供地址。用户可通过该地址在浏览器中查看集群各类信息6yarn.nodemanager.aux-servicesmapreduce_shuffle通过该配置项,用户可以自定义一些服务,例如Map-Reduce的shuffle功能就是采用这种方式实现的,这样就可以在NodeManager上扩展自己的服务

<property>    
	<name>yarn.resourcemanager.hostname</name>   
	<value>hadoop03</value>
	<description>YARN集群的主节点</description>
</property>
<property>    
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
	<description>YARN集群为MapReduce程序提供shuffle服务</description>
</property>

slaves配置

master和slave的定义:
  一般在集群中你唯一地选择一台机器作为 NameNode ,一台机器作为 ResourceManager,这是master (主)。那么 ,集群中剩下的机器作为DataNode 和 NodeManager。这些是slaves (从)。
  在你的 hadoop目录/etc/hadoop/slaves 文件上列出全部slave的hostnamels或IP地址,一个一行。

# slaves
hadoop01
hadoop02
hadoop03

集群测试(带先后顺序的)

  1. 网络测试
  2. ssh 切换测试
  3. 启动hadoop

六、Hadoop启动

格式化节点并启动

1)确定主节点namenode,进行格式化,如果多次格式化,在最近格式化之前需要删除之前的data文件夹和logs文件夹

hadoop namenode  -format # 如果多次格式化,需要删除之前的data文件夹和logs文件夹

hadoop 集群内存要求 hadoop集群硬件配置_xml_02


2)先启动

start-hdfs.sh # hdfs启动

3)再启动

start-yarn.sh #yarn启动

web浏览器检查启动节点

备注:如果外部局域网不能访问,检查是否时防火墙未关闭,或者未设置对应端口安全组,我这里192.168.16.3对应的时hadoop01,我这里192.168.16.5对应的时hadoop03

hdfs hadoop01:50070

hadoop 集群内存要求 hadoop集群硬件配置_hadoop 集群内存要求_03

yarn hadoop03:8088

hadoop 集群内存要求 hadoop集群硬件配置_linux_04