CentOS7 Hadoop3.X完全分布式环境搭建

环境:windows10、centos7.9、hadoop3.x、jdk1.8-8u162

hadoop各版本

jdk各版本

特此说明:Hadoop版本最好不要选hadoop3.1.0,因为官网显示此hadoop版本对于各个版本Hbase都不能完全兼容,java版本建议为1.8。

1. 环境需求及安装

准备3台虚拟机,并配置静态ip、关闭防火墙、更改主机名、进行主机名映射、进行jdk安装和配置环境变量、配置ssh无密登录。

这里先建立一台虚拟机进行上述软件安装和环境配置,之后克隆剩下两台虚拟机,剩下两台虚拟机只需要更改ip地址、Mac地址、主机名即可。
集群规划如下:

IP地址 主机名 集群身份
192.168.138.100 hadoop00 主节点
192.168.138.101 hadoop01 从节点
192.168.138.102 hadoop02 从节点

1.1 静态ip配置

确保网络模式为NAT模式。

进入网卡配置文件并修改相应选项:

命令:vim /etc/sysconfig/network-scripts/ifcfg-ens33

CentOS7 Hadoop3.X完全分布式环境搭建_第1张图片

注:IPADDR为静态ip地址(自定义)、HWADDR为Mac地址(根据虚拟机进行配置)

若是克隆虚拟机只需要更改Mac地址和ip地址即可,Mac地址需要在开启虚拟机界面的网络适配器的高级选项里重新生成。

重启网络后生效:

systemctl restart network

建议将NetworkManager服务关闭

systemctl stop NetworkManagerservice NetWorkManager stop

注:NetWorkManager和network服务都是管理网络配置,Centos7之前只有network服务,Centos8只有NetWorkManager服务,所以Centos7是用于过渡更改网络管理配置的版本,但是NetworkManager服务在Centos7版本的兼容性不好,二者可能会起冲突导致网络服务不可用,所以这里选择将NetworkManager服务关闭。

1.2 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

# 查看防火墙的状态
systemctl status firewalld

在关闭防火墙后也可以将selinux关闭,这里linux系统的一个安全机制,可能会影响后虚拟机之间的通信,进入其配置文件将SELINUX设置为disabled

vim /etc/selinux/config

…………
SELINUX=disabled

1.3 更改主机名并配置映射

更改主机名:

vim /etc/hostname

主机名称自定义,这里选择hadoop100作为主机名,并打算将剩下的两台虚拟机主机名配置为hadoop101、hadoop102,ip地址配置为192.168.138.101、192.168.138.102

配置主机映射:

vim /etc/hosts

CentOS7 Hadoop3.X完全分布式环境搭建_第2张图片

注:ip地址和主机名的位置不要弄错,即“ip地址 主机名”格式。

重启后生效。

验证:ping hadoop100不丢包即配置成功。

后续剩余两台配置成功后也可以ping hadoop101/hadoop102

注:后续配置剩余虚拟机时也要进行三台主机和ip地址的映射

1.4 jdk安装和环境配置

1)若虚拟机自带jdk需要将其卸载

rpm -qa | grep jdk	# 如果有,将其卸载
rpm -e xxxxxxx --nodeps	# 将查询到的jdk强制卸载

注:一般情况下最小化安装没有内置jdk。

2)利用xtfp或xshell将软件包上传到 /root/software 文件夹下。

在这里插入图片描述

注:software是笔者自己创建的。

xhell上传方法为:将文件拉到会话窗口或使用命令rz,然后选择要上传的文件。

3)将jdk解压到/usr/local/文件夹下

tar -zxvf jdk-8u162-linux-x64.tar.gz -C /usr/local/

并将解压后的文件夹改名为jdk

mv /usr/local/jdk1.8.0_162 /usr/local/jdk

4)配置jdk环境变量

vim /etc/profile

…………
# jdk环境变量配置
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

使更改立即生效

source /etc/profile

5)验证

java -version

出现对应jdk版本提示即配置成功。

6)添加软连接

ln -s /usr/local/jdk/bin/java /bin/java

因为卸载了centos7自带的java,为防止hadoop识别不到java路径,故添加软连接到/bin/java

注:/bin :存放普通用户可执行的指令,即使在单用户模式下也能够执行处理

1.5 配置ssh无密登录

1)使用rsa加密技术,生成公匙和私匙

cd ~

ssh-keygen -t rsa

2)进入~/.ssh目录下,使用ssh-copy-id命令

cd ~/.ssh

ssh-copy-id root@hadoop100

3)进行验证

ssh hadoop100

注:后续克隆剩余两台虚拟机之后,完成主机名的更改等基本配置之后,三台虚拟机可以互登ssh

若是三台机器提前安装好的情况下就需要同步公匙文件。

同步公匙文件

1)用ssh-key-gen在本机主机上创建公匙和密匙

ssh-keygen -t rsa

2)把公匙复制到本机上

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

3)把公匙复制到远程主机上

ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoop101

ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoop102

4)直接登录远程主机

ssh hadoop101

如若无错,可直接登录,无需密码。

注:若想要每台虚拟机都能无密登录另外两个,需要在每台虚拟机上同步公匙文件,即上述操作需要重复三次。

此时,可以将此机器克隆出另外两台,并更改ip地址、Mac地址、主机名,以便后续操作。

1.6 时间同步

选择集群中的一台机器作为时间服务器,这里选择hadoop100

1)安装ntp并开启服务

yum install -y ntp		# 安装ntp
systemctl start ntpd	# 开启服务
chkconfig ntpd on		# 设置开机自启动

2)配置相应的文件

vim /etc/ntp.conf

# 以下是文件内容
…………
 # Hosts on local network are less restricted.
 # restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
 # 添加集群中的网络段位
 restrict 192.168.138.100 mask 255.255.255.0 nomodify notrap	# ip地址为hadoop100的静态ip
 …………
 # Use public servers from the pool.ntp.org project.
 # Please consider joining the pool (http://www.pool.ntp.org/join.html).
 # server 0.centos.pool.ntp.org iburst 	#注释掉
 # server 1.centos.pool.ntp.org iburst  #注释掉
 # server 2.centos.pool.ntp.org iburst  #注释掉
 # server 3.centos.pool.ntp.org iburst  #注释掉
 server 127.127.1.0			# -master作为服务器

4)其它的机器也需要安装ntp

安装ntp执行下面的命令使用root定义定时器,以同步hadoop100机器的时间

/usr/sbin/ntpdate -u hadoop100

同步后可以使用date命令查看时间。

2. Hadoop的配置文件

Hadoop的安装目录:/usr/local/hadoop
配置环境变量:vim /etc/profile

export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

下面需要通过配置若干配置文件,来实现Hadoop集群的配置信息,需要配置的文件有:

hadoop-env.sh 
yarn-env.sh 
core-site.xml 
hdfs-site.xml 
mapred-site.xml 
yarn-site.xml

集群规划

Node Applications
hadoop100 NameNode 、DataNode、ResourceManager、NodeManager
hadoop101 SecondaryNameNode、DataNode、NodeManager
hadoop102 DataNode、NodeManager

2.1 core-site.xml

注:修改配置文件时需要注意将主机名和一些文件路径修改成自己配置的名称和路径。

首先进入到hadoop目录下:cd $HADOOP_HOME/etc/hadoop

<configuration>
 
 
 <property>
  <name>fs.defaultFSname>
  <value>hdfs://hadoop100:9000value>
 property>
 
 
 <property>
  <name>hadoop.tmp.dirname>
  <value>/usr/local/hadoop/tmpvalue>
 property>
configuration>

2.2 hdfs-site.xml

<configuration>

    <property>
        <name>dfs.namenode.name.dirname>
        <value>file://${hadoop.tmp.dir}/dfs/namevalue>
    property>

    <property>
        <name>dfs.datanode.datadirname>
        <value>file://${hadoop.tmp.dir}/dfs/datavalue>
    property>

    <property>
        <name>dfs.replicationname>
        <value>3value>
    property>

    <property>
        <name>dfs.blocksizename>
        <value>134217728value>
    property>

    <property>
        <name>dfs.namenode.secondary.http-addressname>
        <value>hadoop101:9868value>
    property>

    <property>
        <name>dfs.namenode.http-addressname>
        <value>hadoop100:9870value>
    property>
configuration>

2.3 mapred-site.xml

<configuration>

<property>
	<name>mapreduce.framework.namename>
	<value>yarnvalue>
property>

<property>
	<name>mapreduce.jobhistory.addressname>
    <value>hadoop100:10020value>property>
 
<property>
	<name>mapreduce.jobhistory.webapp.addressname>
    <value>hadoop100:19888value>
property>
<property>
    <name>mapreduce.application.classpathname>       		                    <value>/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/*:/usr/local/hadoop/share/hadoop/common/*:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/*:/usr/local/hadoop/share/hadoop/hdfs/*:/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/share/hadoop/yarn:/usr/local/hadoop/share/hadoop/yarn/lib/*:/usr/local/hadoop/share/hadoop/yarn/*value>
property>
configuration>

注:最后一项中的classpath的配置,中的值需要写自己虚拟机的路径。

在终端使用命令hadoop classpath获取。

2.4 yarn-site.xml

<configuration>
	
	<property>
		<name>yarn.nodemanager.aux-servicesname>
        <value>mapreduce_shufflevalue>
	property>
	
	<property>
		<name>yarn.resourcemanager.hostnamename>
		<value>hadoop100value>
	property>
	
	
	<property>
		<name>yarn.nodemanager.aux-services.mapreduce_shuffle.classname>					<value>org.apache.hadoop.mapred.ShuffleHandlervalue>
    property>
	
    <property>
		<name>yarn.resourcemanager.addressname>
		<value>hadoop100:8032value>
	property>
	
    <property>
		<name>yarn.resourcemanager.scheduler.addressname>
        <value>hadoop100:8030value>
	property>
	
	<property>
		<name>yarn.resourcemanager.resource-tracker.addressname>
        <value>hadoop100:8031value>
    property>
			
    <property>
        <name>yarn.resourcemanager.admin.addressname>
        <value>hadoop100:8033value>
    property>
	
    <property>
        <name>yarn.resourcemanager.webapp.addressname>
        <value>hadoop100:8088value>
    property>
    <property>

    <name>yarn.resourcemanager.webapp.address.rm1name>
    <value>hadoop101:8088value>
property>
<property>

    <name>yarn.resourcemanager.webapp.address.rm2name>
    <value>hadoop102:8088value>
property>
<property>
    <name>yarn.application.classpathname>      <value>/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/*:/usr/local/hadoop/share/hadoop/common/*:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/*:/usr/local/hadoop/share/hadoop/hdfs/*:/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/share/hadoop/yarn:/usr/local/hadoop/share/hadoop/yarn/lib/*:/usr/local/hadoop/share/hadoop/yarn/*value>
property>
configuration>

注:classpath的值与mapred-site.xml中的相同。

2.5 hadoop-env.sh

vim hadoop-env.sh

…………
# The java implenentation to use.
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
…………

2.6 yarn-env.sh

vim yarn-env.sh

…………
# some Java parameters
export JAVA_HOME=/usr/local/jdk
if ["$JAVA_HOME" != ""]; then
	# echo "run java in #JAVA_HOME"
	JAVA_HOME=$JAVA_HOME
fi
…………

2.7 workers

此文件用于指定datanode守护进程所在的机器节点主机名

vim workers

hadoop100
hadoop101
hadoop102

2.8 /etc/profile

若想要在root用户启动hadoop集群需要在/etc/profile上添加如下代码:

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

2.9 分发到另外两台节点

也可以直接克隆主节点虚拟机,更改主机名、IP地址和MAC地址即可。

1)同步Hadoop到另外两台节点

cd /usr/local	#在hadoop100中进行同步操作
scp -r hadoop hadoop101:/usr/local/
scp -r hadoop hadoop102:/usr/lcoal/

2)同步profile到另外两台节点

scp /etc/profile hadoop101:/etc/
scp /etc/profile hadoop102:/etc/

注:在另外两台节点上不要忘记执行source /etc/profile命令使文件立即生效。

2.10 格式化hdfs并启动hadoop

格式化hdfs:hdfs namenode -format hadoop namenode -format

启动hadoop:start-all.sh

在主节点(hadoop100)使用命令jps显示以下进程:

4304 NameNode
4481 DataNode
5556 Jps
5206 NodeManager
4879 ResourceManager

在从节点1(hadoop101)使用jps显示以下进程:

2866 NodeManager
2579 DataNode
2683 SecondaryNameNode
3020 Jps

在从节点2(hadoop102)使用jps显示以下进程:

2369 DataNode
2729 Jps
2574 NodeManager

修改hdfs文件夹的权限:hadoop fs -chmod -R 777 /

注:这样做是防止后续运行mapreduce程序时无权限创建文件夹。

3. 运行hadoop自带的mapreduce程序

3.1 上传文件到hdfs

hadoop fs -put input.txt /wc/

CentOS7 Hadoop3.X完全分布式环境搭建_第3张图片

在这里插入图片描述

3.2 进入指定目录

cd /usr/local/hadoop/share/hadoop/mapreduce

可以看到下面的内容:

CentOS7 Hadoop3.X完全分布式环境搭建_第4张图片

3.3 运行wordcount

hadoop jar hadoop-mapreduce-examples-3.1.0.jar wordcount /wc /outputwc

CentOS7 Hadoop3.X完全分布式环境搭建_第5张图片

3.4 查看运行结果

CentOS7 Hadoop3.X完全分布式环境搭建_第6张图片

至此,Hadoop完全分布式环境配置完成。

你可能感兴趣的:(Hadoop,分布式,hadoop,大数据,mapreduce)