本地Hadoop集群搭建
yuanged 人气:0
# 什么是Hadoop?
Hadoop是一个开源的Apache项目,通常用来进行大数据处理。
Hadoop集群的架构:
master节点维护分布式文件系统的所有信息,并负责调度资源分配,在Hadoop集群中`node-master`就是master的角色,其包括两个服务:
* NameNode: 负责管理分布式文件系统,维护了数据块在集群中的存储信息;
* ResourceManager: 管理YARN任务,同时负责在worker节点的调度和执行。
worker节点负责存放数据,并提供执行任务的能力。在worker节点上包含两个进程:
* DataNode: 管理在该节点上存放的物理数据,称为`NameNode`;
* NodeManager: 管理在该节点上运行的任务。
# 机器设置
以下配置都是针对Ubuntu系统的。我准备了3台机器:
* node-master: 192.168.0.113
* node1: 192.168.0.114
* node2: 192.168.0.115
## 用户hadoop创建
1. 创建用户`hadoop`,并设置密码:
```bash
sudo adduser hadoop
```
2. 把`hadoop`用户添加到`sudo`用户组获取管理员权限:
```bash
sudo adduser hadoop sudo
```
## 安装JDK
我安装的是JDK8,安装方式略。
## host文件配置
为了节点之间可以方便的通过名字来通信,我们在hosts文件中加入如下内容:
```
192.168.0.113 node-master
192.168.0.114 node1
192.168.0.115 node2
192.168.0.116 node3
```
## 配置ssh免密登录
配置了ssh证书后,master阶段通过ssh免密登录其他节点。
1. 使用`hadoop`用户登录到mastr机器,并创建SSH证书:
```
ssh-keygen -b 4096 -C 'hadoop-yarn'
```
2. 查看生成的公钥,并复制下公钥的内容:
```
cat /home/hadoop/.ssh/id_rsa.pub
```
3. 在每个机器的`/home/hadoop/.ssh`文件夹下创建名为`master.pub`的文件,并将上面复制的公钥信息粘贴到里面;
4. 将证书信息拷贝到已授权秘钥文件中:
```
cat ~/.ssh/master.pub >> ~/.ssh/authorized_keys
```
# Hadoop安装
登录到`node-master`,下载hadoop,并解压:
```
http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz
tar -xzf hadoop-3.1.3.tar.gz
ln -s hadoop-3.1.3 hadoop
```
## 环境变量设置
1. 添加Hadoop可执行目录到PATH。修改`/home/hadoop/.profile`,添加如下内容:
```
PATH=/home/hadoop/hadoop/bin:/home/hadoop/hadoop/sbin:$PATH
```
2. 添加hadoop到shell的PATH路径。修改`.bashrc`,添加下面的内容:
```
export HADOOP_HOME=/home/hadoop/hadoop
export PATH=${PATH}:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
```
## MASTER节点设置
### 设置JAVA_HOME
这里我安装的是ORACLE版本的JDK,目录`/usr/local/jdk`,修改`~/hadoop/etc/hadoop-env.sh`,设置JAVA_HOME:
```
export JAVA_HOME=/usr/local/jdk
```
### 设置NameNode的位置
修改`~/hadoop/etc/hadoop/core-site.xml`文件,设置NameNode的路径为node-master的9000端口:
```xml
```
### 设置HDFS路径
修改`hdfs-site.xml`,内容如下:
```xml
```
最后一个属性`dfs.replication`表示该集群上的数据被冗余多少倍。注意replication的值不要超过worker节点的实际数量。
### 设置YARN作为任务调度器
修改`mapred-site.xml`,设置YARN作为默认的MapReduce操作的框架:
```xml
```
### 配置YARN
修改`yarn-site.xml`。`yarn.resourcemanager.hostname`的值设置为node-master的ip地址:
```xml
```
## 设置Worker
创建一个名为`workers`的启动脚本,用来启动需要的进程。修改`~/hadoop/etc/hadoop/workers`,把所有的worker节点都加进去。
### 修改内存分配
默认的内存分配对于内存小于8GB的机器并不合适,所有对低内存的机器需要做一些特殊配置。
一个YARN任务的执行会用用到两种类型的资源:
* 应用MASTER(AM)负责监控应用并协调集群中的exector;
* AM创建的Executor才会真正的执行任务。对MapReduce任务,exectors上会并行的执行map或者reduce的操作。
两者都是运行在worker节点上。每个worker节点运行一个NodeManager的进程,该进程负责在该节点上创建容器。整个集群被ResourceManager管理,ResourceManger在所有的worker节点上根据容量需求以及当前的负载,进行容器的分配与创建。
为了集群能够正常工作,下面4个配置必须合理的配置:
1. 单个节点上YARN容器最多可以分配多少内存。这个配置的值需要比其他的都大,否则容器分配会被拒,application会失败。但是,这个值不应该是该节点的实际内存大小。该配置是`yarn.nodemanager.resource.memory-mb`,配置在`yarn-site.xml`中;
2. 每个容器可以分配的最大最小内存。如果一个容器申请的内存超过设置的最大值,否则分配会失败,并会被分配成最小内存的整数倍。配置`yarn.scheduler.maximum-allocation-mb`和`yarn.scheduler.minimum-allocation-mb`,都在`yarn-site.xml`文件中配置;
3. ApplicationMaster分配的内存大小。`yarn.app.mapreduce.am.resource.mb`,配置在`mapred-site.xml`中;
4. 每个map或者reduce操作可以分配的内存大小。这个值需要小于最大内存大小。`mapreduce.map.memory.mb`和`mapreduce.reduce.memory.mb`,都配置在`mapred-site.xml`。
以上四个类型的配置之间的关系如下图:
![image](https://www.linode.comhttps://img.qb5200.com/download-x/docshttps://img.qb5200.com/download-x/databases/hadoop/how-to-install-and-set-up-hadoop-cluster/hadoop-2-memory-allocation-new.png)
以2G内存的节点为例,可行的配置如下:
属性 | 值
---|---
yarn.nodemanager.resource.memory-mb | 1536
yarn.scheduler.maximum-allocation-mb | 1536
yarn.scheduler.minimum-allocation-mb | 128
yarn.app.mapreduce.am.resource.mb | 512
mapreduce.map.memory.mb | 256
mapreduce.reduce.memory.mb | 256
1. 修改`home/hadoop/hadoop/etc/hadoop/yarn-site.xml`,添加如下配置:
```xml
```
最后一个配置禁用虚拟内存检查。
2. 修改`/home/hadoop/hadoop/etc/hadoop/mapred-site.xml`, 添加如下内容:
```xml
```
### 格式化HDFS
和正常的单机文件系统一样,HDFS在使用之前也需要格式化。在node-master上,运行如下命令:
```bash
hdfs namenode -format
```
到这里,hadoop的安装完成了,可以运行了。
# 运行和监控
接下来看下如何在NameNode和DataNodes上启动HDFS,以及如何进行监控。
## HDFS的启停
1. 在node-master上运行下面的命令启动HDFS:
```bash
start-dfs.sh
```
这个命令会在node-master上启动`NameNode`和`SecondaryNameNode`进程,同时在数据节点上创建`DataNode`进程。数据节点根据`workers`文件中的配置。
2. 检查node-master和其他节点上的进程情况,可以通过`jps`命令来查看。在node-master上运行jps,可以看到NameNode和SecondaryNameNode,在worker节点上运行jps课题看到DataNode进程。
3. 在node-master上通过下面的命令开停止hdfs:
```
stop-dfs.sh
```
## 监控HDFS集群
1. 通过`hdfs dfsadmin`命令可以获得一些有用的信息:
2. 另外HDFS提供了一个Web UI来查看hdfs集群的状态,访问地址: http://node-master-IP:9870
# 参考资料
* [How to Install and Set Up a 3-Node Hadoop Cluster
](https://www.linode.comhttps://img.qb5200.com/download-x/docshttps://img.qb5200.com/download-x/databases/hadoop/how-to-install-and-set-up-hadoop-cluster/#run-and-monitor-hdfs)
加载全部内容