一. Hadoop集群简介
HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上在一起。
HDFS集群负责海量数据的存储,集群中的角色主要有:
NameNode、DataNode、SecondaryNameNode
YARN集群负责海量数据运算时的资源调度,集群中的角色主要有:
ResourceManager、NodeManager
mapreduce 是一个分布式运算编程框架,是应用程序开发包,由用户按照编程规范进行程序开发,后打包运行在HDFS集群上,并且受到YARN集群的资源调度管理。
二 . 集群部署方式
Hadoop部署方式分三种:
独立模式(standalone mode)
独立模式又称为单机模式,仅1个机器运行1个java进程,主要用于调试。
伪分布式模式(Pseudo-Distributed mode)
伪分布模式也是在1个机器上运行HDFS的NameNode和DataNode、YARN的 ResourceManger和NodeManager,但分别启动单独的java进程,主要用于调试。
群集模式(Cluster mode)
集群模式主要用于生产环境部署。会使用N台主机组成一个Hadoop集群。这种部署模式下,主节点和从节点会分开部署在不同的机器上
三 . Hadoop集群安装
1. 集群规划
以三台主机为例,以下是集群规划:
修改各服务器的主机名(三台)
vim /etc/hostname
将主机名修改为自己规划的主机名:
- Host 映射(3台)
vim /etc/hosts
- 关闭防火墙
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld.service #禁止防火墙开启自启
- ssh 免密登陆
- 生成公钥和私钥
ssh-keygen -t rsa (直接Enter)
默认在 ~/.ssh目录生成两个文件:
id_rsa :私钥
id_rsa.pub :公钥
导入公钥到认证文件
导入本机cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
导入要免密码登录的服务器
scp ~/.ssh/id_rsa.pub xxx@host:/home/id_rsa.pub
将公钥导入到认证文件(这一步的操作在服务器上进行)
cat /home/id_rsa.pub >> ~/.ssh/authorized_keys
在服务器上更改权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
- 同步三台机器的时间
yum -y install ntpdate
ntpdate ntp4.aliyun.com
2. 解压Hadoop安装包
上传解压hadoop 3.1.4安装文件
解压
tar -xvzf hadoop-3.1.4.tar.gz -C ../server
# 在每个节点中创建用于存放数据的data目录
# NameNode数据
mkdir -p /export/server/hadoop-3.1.4/data/namenode
# DataNode数据
mkdir -p /export/server/hadoop-3.1.4/data/datanode
3 . 准备安装环境
上传解压hadoop 3.1.4安装文件
cd /export/software
rz
解压
tar -xvzf hadoop-3.1.4.tar.gz -C ../server
# 在每个节点中创建用于存放数据的data目录
# NameNode数据
mkdir -p /export/server/hadoop-3.1.4/data/namenode
# DataNode数据
mkdir -p /export/server/hadoop-3.1.4/data/datanode
4. 编辑配置文件
1. 配置NameNode(core-site.xml)
cd /export/server/hadoop-3.1.4/etc/hadoop
vim core-site.xml
--------------------------------
在第19行下添加以下内容:
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1.uuicom.cn:9820</value>
<description>配置NameNode的URL</description>
</property>
2. 配置HDFS路径(hdfs-site.xml)
vim hdfs-site.xml
--------------------------------
<property>
<name>dfs.namenode.name.dir</name>
<value>/export/server/hadoop-3.1.4/data/namenode</value>
<description>NameNode存储名称空间和事务日志的本地文件系统上的路径</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/export/server/hadoop-3.1.4/data/datanode</value>
<description>DataNode存储名称空间和事务日志的本地文件系统上的路径</description>
</property>
<property>
<name>dfs.hosts.exclude</name>
<value>/export/server/hadoop-3.1.4/etc/hadoop/excludes</value>
</property>
3. 配置YARN(yarn-site.xml)
vim yarn-site.xml
--------------------------------
在第18行下添加以下内容:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
<description>为每个容器请求分配的最小内存限制资源管理器(512M)</description>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
<description>为每个容器请求分配的最大内存限制资源管理器(4G)</description>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
<description>虚拟内存比例,默认为2.1,此处设置为4倍</description>
</property>
4. 配置MapReduce(mapred-site.xml)
vim mapred-site.xml
----------------------------------
在第20行下添加以下内容:
vim mapred-site.xml
----------------------------------
在第20行下添加以下内容:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>执行MapReduce的方式:yarn/local</description>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
5. workers文件
vim /export/server/hadoop-3.1.4/etc/hadoop/workers
----------------------------------
# 删除第一行localhost,然后添加以下三行
node1.uuicon.cn
node2.uuicon.cn
node3.uuicon.cn
6.修改hadoop.env环境变量
hadoop.env文件
vim /export/server/hadoop-3.1.4/etc/hadoop/hadoop-env.sh
修改第54行为:
export JAVA_HOME=/export/server/jdk1.8.0_241
7. 配置环境变量
vim /etc/profile
export HADOOP_HOME=/export/server/hadoop-3.1.4
export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:
source /etc/profile
8. 分发配置好的Hadoop安装文件和环境变量
cd /export/server/
scp -r hadoop-3.1.4 node2.itcast.cn:$PWD
scp -r hadoop-3.1.4 node3.itcast.cn:$PWD
scp /etc/profile node2.itcast.cn:/etc
scp /etc/profile node3.itcast.cn:/etc
在每个节点上执行
source /etc/profile
9. 格式化HDFS
首次启动HDFS时,必须对其进行格式化操作。本质上是一些清理和准备工作,因为此时的HDFS在物理上还是不存在的。
cd /export/server/hadoop-3.1.4
bin/hdfs namenode -format itcast-hadoop
10. 启动Hadoop集群
-- 4.1 启动NameNode节点
hdfs --daemon start namenode
-- 4.2 在所有节点上启动DataNode
hdfs --daemon start datanode
-- 4.3 启动Secondary NameNode
hdfs --daemon start secondarynamenode
- 4.3 选择node1.cn节点启动ResourceManager节点
yarn --daemon start resourcemanager
-- 4.4 在所有节点上启动NodeManager
yarn --daemon start nodemanager
注意:如果在启动之后,有些服务没有启动成功,则需要查看启动日志,Hadoop的启动日志在每台主机的/export/server/hadoop-x.x.x/logs/目录,需要根据哪台主机的哪个服务启动情况去对应的主机上查看相应的日志,以下是node1主机的日志目录
11. 关闭Hadoop集群
# 关闭HDFS 集群
# 5.1 关闭NameNode
hdfs --daemon stop namenode
# 5.2 每个节点关闭DataNode
hdfs --daemon stop datanode
# 关闭Secondary NameNode
hdfs --daemon stop secondarynamenode
# 关闭YARN 集群
5.3 每个节点关闭ResourceManager
yarn --daemon stop resourcemanager
# 5.4 每个节点关闭NodeManager
yarn --daemon stop nodemanager
12 一键脚本
HDFS集群一键脚本
cd /export/server/hadoop-3.1.4/sbin
编辑start-dfs.sh、stop-dfs.sh
在两个文件顶部添加以下内容:
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
YARN集群一键脚本
start-yarn.sh、stop-yarn.sh
在两个文件顶部添加以下内容:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
一键启动
-- 一键启动HDFS、YARN
start-dfs.sh
start-yarn.sh
# 或者 hadoop-3.1.4/sbin下
start_all.sh
一键关闭
stop-dfs.sh
stop-yarn.sh
# 或者 hadoop-3.1.4/sbin下
stop-all.sh
三 . Hadoop初体验
1. 使用HDFS
- 从Linux本地上传一个文本文件到hdfs的/目录下
#在/export/data/目录中创建a.txt文件,并写入数据
cd /export/data/
touch a.txt
echo "hello" > a.txt
#将a.txt上传到HDFS的根目录
hadoop fs -put a.txt /
通过页面查看
通过NameNode页面.进入HDFS:http://node1.itcast.cn:9870/2. 运行mapreduce程序
- 执行Hadoop官方自带的MapReduce案例
评估圆周率π值
cd ort/server/hadoop-3.1.4/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-example-3.1.4.jar pi 2 4
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。