不积跬步,无以至千里;不积小流,无以成江海。

Dean's blog

  • Join Us on Facebook!
  • Follow Us on Twitter!
  • LinkedIn
  • Subcribe to Our RSS Feed

搭建 Hadoop 完全分布式环境

在上一篇安装 Hadoop 伪分布式环境中,详细记录了伪分布式的环境搭建过程。Hadoop完全分布式环境的搭建与伪分布式还是有比较大的区别,这里记录使用Cent OS 7 服务器进行搭建演练的过程。

内容准备

Cent OS 7 ISO:http://isoredirect.centos.org/centos/7/isos/x86_64/

Hadoop 3.1.2:https://hadoop.apache.org/releases.html

JDK 1.8:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

环境准备

1、机器准备

 hadoop01   192.168.2.201   Cent OS 7
hadoop02   192.168.2.202   Cent OS 7
hadoop03   192.168.2.203   Cent OS 7

 如何配置固定IP可以参照:CentOS 7配置固定IP

2、创建普通用户

并为普通用户添加sudolers权限
创建用户

useradd 用户名
passwd 用户名

分配权限:

vi /etc/sudoers
hadoop ALL=(ALL) ALL

3、设置主机名

hostnamectl set-hostname hadoop01(主机名)

使用 hostname 查看当前机器名

4、主机映射

修改hosts

vi /etc/hosts
192.168.2.201  hadoop01
192.168.2.202  hadoop02
192.168.2.203  hadoop03

发送到其它机器

sudo scp /etc/hosts hadoop03:/etc/

查看hosts

cat /etc/hosts

5、关闭防火墙和selinux

查看防火墙状态

firewall-cmd --state

停止防火墙

systemctl stop firewalld.service

禁止防火墙开机启动

systemctl disable firewalld.service 

关闭selinux

vi /etc/selinux/config

找到SELINUX并设置为disabled:

SELINUX=disabled

6、系统启动级
在Cent OS 7中不直接在/etc/inittab中配置,可以使用命令:
设置系统的启动级别:

systemctl set-default multi-user.target
输出:
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.

其中:
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5

查看当前的启动级别:

systemctl get-default

7、配置免密登录

先切换到普通用户
1)、生成密钥

ssh-keygen

2)、发送密钥
各个节点相互发送一遍

ssh-copy-id hadoop(主机名)

3)、登录验证
每个节点分别验证一次

ssh hadoop(主机名)

8、安装jdk
查找JDK

sudo rpm -qa|grep jdk
 java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64
java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64
java-1.7.0-openjdk-headless-1.7.0.191-2.6.15.5.el7.x86_64
copy-jdk-configs-3.3-10.el7_5.noarch
java-1.7.0-openjdk-1.7.0.191-2.6.15.5.el7.x86_64

卸载JDK

rpm -e java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64 --nodeps

依次卸载其它jdk包

配置环境变量

sudo vi /etc/profile
export JAVA_HOME=/home/hadoop/jdk1.8.0_241
export PATH=$JAVA_HOME/bin/:$PATH

配置生效

source /etc/profile

发送到其它电脑

scp -r jdk1.8.0_241 hadoop02:$PWD
scp -r jdk1.8.0_241 hadoop03:$PWD

注:$PWD是执行当前命令的目录

发送profile

sudo scp /etc/profile hadoop02:/etc/
sudo scp /etc/profile hadoop03:/etc/

刷新profle

source /etc/profile

9、时间同步

ntpdate ntp.aliyun.com

部署Hadoop

一定切换用户 普通用户,先在一个节点上完所有的配置,再发送到其它节点。
1、配置环境变量
sudo vi /etc/profile

export JAVA_HOME=/home/hadoop/jdk1.8.0_241
export HADOOP_HOME=/home/hadoop/hadoop-3.1.2
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin$HADOOP_HOME/sbin

source /etc/profile

2、修改配置文件

集群规划

机器 hdfs     yarn  
hadoop01 namenode datanode     nodemanager
hadoop02   datanode secondarynamenode   nodemanager
hadoop03   datanode   resourcemanager nodemanager


hadoop-env.sh

vi ~/hadoop-3.1.2/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/home/hadoop/jdk1.8.0_241

core-site.xml

vi ~/hadoop-3.1.2/etc/hadoop/core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
<description>dfsh主节点</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/data/hadoopdata/temp</value>
<description>hadoop运行过程中产生的临时文件保存目录</description>
</property>

hdfs-site.xml

vi ~/hadoop-3.1.2/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/data/hadoopdata/name</value>
<description>为了保证元数据的安全一般配置多个不同的目录</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/data/hadoopdata/data</value>
<description>datanode 的数据存储目录</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>HDFS 的数据块的副本存储个数</description>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>hadoop02:50090</value>
<description>secondarynamenode 运行节点的信息,和namenode不同节点</description>
</property>

yarn-site.xml

vi ~/hadoop-3.1.2/etc/hadoop/yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop03</value>
<description>resourcemanager运行节点</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>YARN 集群为 MapReduce 程序提供的 shuffle 服务</description>
</property>

mapred-site.xml

vi ~/hadoop-3.1.2/etc/hadoop/mapred-site.xml
<property>
<name>mapreduce.frameowrk.name</name>
<value>yarn</value>
<description>指定mapreduce程序跑在yarn上,yarn作为资源调度模型</description>
</property>

workers

Hadoop2.x版本对应的配置文件是slaves
配置的是从节点的信息

vi ~/hadoop-3.1.2/etc/hadoop/workers
hadoop01
hadoop02
hadoop03

3、远程发送
发送hadoop

scp -r /home/hadoop/hadoop-3.1.2 hadoop02:/home/hadoop/hadoop-3.1.2
scp -r /home/hadoop/hadoop-3.1.2 hadoop03:/home/hadoop/hadoop-3.1.2

发送profile

sudo scp /etc/profile hadoop02:/etc/
sudo scp /etc/profile hadoop03:/etc/

4、进行格式化
必须在namenode的节点上执行(hdfs的主节点)

hadoop namenode -format

5、启动
启动hdfs,在任意节点都可以

start-dfs.sh

启动yarn,在yarn的主节点执行

start-yarn.sh

6、验证
jps验证

jps验证的结果应该与集群规划中的一致。

网页验证

 hdfs http://hadoop01:9870
yarn http://hadoop03:8088

7、运行测试
7.1、准备测试文件
hello.txt

hello world hello
hello welcome world

7.2、上传到hdfs

hdfs dfs -put hello.txt /
hdfs dfs -ls /
Found 1 items
-rw-r--r-- 2 hadoop supergroup 38 2020-02-01 16:28 /hello.txt

7.3、运行wordcoun测试案例

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount /hello.txt /wc_out/

......等待执行完成......

查看执行结果

hadoop fs -text /wc_out/part*
 hello 3
welcome 1
world 2

至此Hadoop 完全分布式环境搭建完毕。

后记

启动hdfs时出现异常hadoop01: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
原因:当前机器未配置ssh免密登录到hadoop01,就算是本机也需要

启动yarn时出现异常java.lang.ClassNotFoundException: javax.activation.DataSource
原因:使用的JDK版本太高,建议使用jdk1.8的,jdk1.9或以上版本JDK会禁用访问许多javax. * API
参照链接:https://blog.csdn.net/chlatzed/article/details/78858100

不允许评论
粤ICP备17049187号-1