Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上 。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。 通俗的理解就是我们计算的数据量超过了单机处理的能力,于是使用多台机器并行处理计算数据,但并行处理数据会存在各种问题,例如怎么给每个节点分派任务,怎么使各个节点算力达到均衡,在部分节点任务失败时如何恢复。这些便Hadoop帮我们解决的问题,简而言之,Hadoop是一个计算框架,并行处理计算模型。本文主要记录使用虚拟机搭建Hadoop集群过程。Hadoop有几种部署模式,分别是本地模式,伪分布式模式,完全分布式。其中本地模式和伪分布式模式都是在本地运行,其算力使用的是本机资源,并不是真正的并行计算,完全作体验之用,且过程也相对简单,不做介绍。本文记录的是完全分布式搭建过程。
1 . 准备工作
1.准备三台Centos虚拟机,信息如下
ip | OS | 说明 |
---|---|---|
192.168.31.135 | CentOS 7 | nameNode |
192.168.31.136 | CentOS 7 | dataNode |
192.168.31.137 | CentOS 7 | dataNode |
2 . JAVA,去Oracle下载,注意Hadoop所要求的JAVA版本(java环境配置可参考之前zookeper集群搭建博客,这里不赘述)
3 . Hadoop,一般YARN被集成在这里面
2 . 下载Hadoop
进入hadoop官网下载tar包,下载地址:Hadoop官网
如图,选择http下载
这里有很多hadoop的版本,选择一个下载即可。
选择tar.gz包下载
3 . 解压&环境变量配置
首先在主节点上创建比要的文件夹
1 | mkdir /user/hadoop |
将下载好的tar包上传到 /user/hadoop 目录,并执行解压命令
1 | [root@centos1 hadoop]# tar zxvf hadoop-2.8.4.tar.gz |
待解压完成后,执行下面命令配置环境变量
1 | [root@centos1 hadoop]# vi /etc/profile |
在底部加入以下配置
1 | hadoop |
保存后,执行以下命令使修改生效
1 | [root@centos1 hadoop]# source /etc/profile |
然后执行以下命令,如果出现如下提示则说明配置成功
1 | [root@centos1 ~]# hadoop -help |
4 . Hadoop配置
进入到hadoop安装目录
1 | [root@centos1 ~]# cd /user/hadoop/hadoop-2.8.4/etc/hadoop/ |
一 . hadoop-env.sh
使用vi编辑
1 | [root@centos1 hadoop]# vi hadoop-env.sh |
配置JAVA_HOME
1 | The only required environment variable is JAVA_HOME. All others are |
二 . yarn-env.sh
使用vi编辑
1 | [root@centos1 hadoop]# vi yarn-env.sh |
配置JAVA_HOME
1 | some Java parameters |
三 . slaves
使用vi编辑
1 | [root@centos1 hadoop]# vi slaves |
注释掉文件中原本的localhost,加入dataNode的节点配置。节点配置可以配置ip也可配置主机名。如果配置主机名,则需要在hosts文件中配置主机和ip的映射关系。这里我配置的是ip
1 | localhost |
四 . 配置文件介绍
在hadoop集群中,需要配置的文件主要包括四个,分别是core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml,这四个文件分别是对不同组件的配置参数,主要内容如下表所示:
文件名称 | 作用对象 | 配置说明 |
---|---|---|
core-site.xml | 集群全局参数 | 定义系统级别的参数 , 如HDFS URL的临时目录等 |
hdfs-site.xml | HDFS参数 | 定义nameNode存放位置、文件副本的个数、文件读取权限等 |
mapred-site.xml | Mapreduce参数 | reduce任务的默认个数、任务所能够使用内存的默认上下限等 |
yarn-site.xml | Yarn参数 | ResourceManager,NodeManager 通信端口,web监控端口等 |
下面详细介绍各个配置文件的配置。
五 . core-site.xml
配置信息如下,其中tmp目录已经在步骤(2)中创建好,如果没有请自行创建
1 | <configuration> |
属性解释
属性名 | 属性值 | 属性说明 |
---|---|---|
fs.defaultFS | hdfs://192.168.31.135:9000/ | 文件系统主机和端口,需配置nameNode的IP地址 |
io.file.buffer.size | 4096 | 流文件的缓冲区大小,不配置则为默认值4096 |
hadoop.tmp.dir | /user/hadoop/tmp | 临时文件夹,需提前创建好文件夹 |
六 . hdfs-site.xml
配置信息如下,其中tmp目录已经在步骤(2)中创建好,如果没有请自行创建
1 | <configuration> |
属性解释
属性名 | 属性值 | 属性说明 |
---|---|---|
yarn.resourcemanager.admin.address | 192.168.31.135:9001 | Hdfs对应的Http服务器地址和端口,需配置nameNode的IP地址 |
dfs.name.dir | /user/hadoop/dfs/name | nameNode数据在本地文件系统的位置 |
dfs.data.dir | /user/hadoop/dfs/data | dataNode 储数据块时存储在本地文件系统的位置 |
dfs.replication | 1 | 数据块副本数量,默认为3 |
dfs.permissions | false | 是否在HDFS中开启权限检查 |
七 . mapred-site.xml
配置信息如下,其中tmp目录已经在步骤(2)中创建好,如果没有请自行创建
1 | <configuration> |
属性解释
属性名 | 属性值 | 属性说明 |
---|---|---|
mapred.job.tracker | 192.168.31.135:49001 | 指定的是job.tracker的地址,没有设置这个参数的话,默认是local,即job会进行本地运行。 |
mapreduce.framework.name | yarn | 取值local,classic或yarn其中之一,如果不是yarn,则不会使用YARN集群来实现资源的分配 |
mapred.local.dir | /user/hadoop/var | mapred做本地计算所使用的文件夹,可以配置多块硬盘,逗号分隔 |
八 . yarn-site.xml
配置信息如下,其中tmp目录已经在步骤(2)中创建好,如果没有请自行创建
1 | <configuration> |
属性解释
属性名 | 属性值 | 属性说明 |
---|---|---|
yarn.resourcemanager.address | 192.168.31.135:8032 | ResourceManager 提供给客户端访问的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等 |
yarn.resourcemanager.scheduler.address | 192.168.31.135:8030 | ResourceManager提供给ApplicationMaster的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等 |
yarn.resourcemanager.resource-tracker.address | 192.168.31.135:8031 | ResourceManager 提供给NodeManager的地址。NodeManager通过该地址向RM汇报心跳,领取任务等 |
yarn.resourcemanager.admin.address | 192.168.31.135:8033 | ResourceManager 提供给管理员的访问地址。管理员通过该地址向RM发送管理命令等 |
yarn.resourcemanager.webapp.address | 192.168.31.135:8088 | ResourceManager对web 服务提供地址。用户可通过该地址在浏览器中查看集群各类信息 |
yarn.nodemanager.aux-services | mapreduce_shuffle | 通过此配置项,用户可以自定义一些服务,例如Map-Reduce的shuffle功能就是采用这种方式实现的,这样就可以在NodeManager上扩展自己的服务。 |
yarn.scheduler.maximum-allocation-mb | 2048 | 每个container向RM申请内存的最大值,单位MB。申请值大于此值,将最多得到此值内存。 |
yarn.nodemanager.resource.memory-mb | 2048 | NodeManager上可以用于container申请的物理内存大小,单位MB。 |
5 . 配置ssh免密登录
因为Hadoop需要通过SSH登录到各个节点进行操作,以免以后集群运算时,频繁提示输入密码。在三个节点上输入如下命令生成秘钥
1 | [root@centos1 ~]# ssh-keygen -t rsa |
然后一直按回车,直到生成完成。如下图
将两个从节点slave1与slave2上的id_rsa.pub用scp命令发送给master
1 | [root@centos2 ~]# scp ~/.ssh/id_rsa.pub root@192.168.31.135:~/.ssh/id_rsa.pub.slave1 |
在master上,将所有公钥加到用于认证的公钥文件authorized_keys中
1 | [root@centos1 ~]# cat ~/.ssh/id_rsa.pub* >> ~/.ssh/authorized_keys |
然后将公钥文件authorized_keys分发给每台slave
1 | [root@centos1 ~]# scp ~/.ssh/authorized_keys root@192.168.31.135:~/.ssh/ |
最后在每台主机上,用SSH命令,检验下是否能免密码登录
6 . 从节点配置
从节点配置文件跟主节点保持一致,不需要修改。在步骤(3)中配置了hadoop-env.sh ,yarn-env.sh ,slaves ,core-site.xml ,hdfs-site.xml ,mapred-site.xml ,yarn-site.xml 。把这些配置文件原封不动的复制到从节点的 /user/hadoop/hadoop-2.8.4/etc/hadoop/ 目录下即可
7 . 启动Hadoop
启动操作都在nameNode上完成,启动之前首先将nameNode格式化,执行下面的命令,格式化nameNode
1 | [root@centos1 hadoop]# cd hadoop-2.8.4/bin/ |
结果如下,则表示格式化成功
再进入sbin目录,启动Hadoop
1 | [root@centos1 sbin]# ./start-all.sh |
出现如下结果表示启动成功
1 | [root@centos1 ~]# cd /user/hadoop/hadoop-2.8.4/sbin/ |
也可通过 jps 命令查询状态 ,nameNode上结果
1 | [root@centos1 sbin]# jps |
dataNode上结果
1 | [root@centos2 ~]# jps |
本地打开 http://192.168.31.135:50070
本地打开 http://192.168.31.135:8088/cluster
至此,Hadoop集群搭建完毕,并且成功启动。
打赏一个呗