在上一篇安装 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