一、Hadoop介绍
Hadoop软件库是一个计算框架,可以使用简单的编程模型以集群的方式对大型数据集进行分布式处理。
1. Hadoop发展史及生态圈
- Hadoop起源于Apache Nutch项目,始于2002年,是Apache Lucene的子项目之一。
- 2006年2月,成为一套完整而独立的软件,并被命名为Hadoop。
- 2008年1月,Hadoop成为Apache顶级项目。
- 2009年7月,MapReduce和HDFS成为Hadoop的独立子项目。
- 2010年5月,Avro脱离Hadoop项目,成为Apache顶级项目。
- 2010年5月,HBase脱离Hadoop项目,成为Apache顶级项目。
- 2010年9月,Hive脱离Hadoop项目,成为Apache顶级项目。
- 2010年9月,Pig脱离Hadoop项目,成为Apache顶级项目。
- 2011年1月,Zookeeper脱离Hadoop项目,成为Apache顶级项目。
- 2011年12月,Hadoop 1.0.0版本发布。
- 2012年10月,Impala加入Hadoop生态圈。
- 2013年10月,Hadoop 2.0.0版本发布。
- 2014年2月,Spark成为Apache顶级项目。
- 2017年12月,Hadoop 3.0.0版本发布。
2. Hadoop核心功能及优势
- 分布式存储系统:HDFS
HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的简称,是Hadoop生态系统中的核心项目之一,也是分布式计算中数据存储管理的基础。
- 分布式计算框架:MR
MapReduce是一种计算模型,核心思想就是“分而治之”,可以用于TB级的大规模并行计算。Map阶段处理后形成键值对形式的中间结果;Reduce对中间结果相同的“键”对应的“值”进行处理,得到最终结果。
- 资源管理平台:YARN
YARN(Yet Another Resource Negotiator)是Hadoop的资源管理器,可以为上层应用提供统一的资源管理和调度,为集群的资源利用率、统一管理、数据共享等方面提供了便利。
- 高扩展
Hadoop是一个高度可扩展的存储平台,可以存储和分发超数百个并行操作的廉价的服务器集群。能够打破传统的关系数据库无法处理大量数据的限制,Hadoop能够提供TB级别数据的运算能力。
- 成本低
Hadoop可以将廉价的机器组成服务器集群来分发处理数据,成本较低,学习者及普通用户也能够很方便的在自己的PC上部署Hadoop环境。
- 高效率
Hadoop能够并发的处理数据任务,并且能够在不同的节点之间移动数据,可以保证各个节点的动态平衡。
- 容错性
Hadoop可以自动维护多份数据的副本,如果计算任务失败,Hadoop能够针对失败的节点重新处理。
3. 部署方式介绍
- 单机模式
单机模式是一个最简的安装模式,因为Hadoop本身是基于Java编写的,所以只要配置好Java的环境变量就可以运行了。在这种部署方式中我们不需要修改任何的配置文件,也不需要启动任何的服务,只需要解压缩、配置环境变量。
虽然配置很简单,但是能做的事情也是很少的。因为没有各种守护进程,所以分布式数据存储以及资源调度等等服务都是不能使用的,但是我们可以很方便的测试MapReduce程序。
- 伪分布模式
伪分布模式是学习阶段最常用的模式,可以将进程都运行在同一台机器上。在这种模式下,可以模拟全分布模式下的运行状态,基本上可以完成全分布模式下的所有操作,伪分布模式是全分布模式的一个特例。
- 全分布模式
在全分布模式下,会在配置文件中体现出主节点与分节点,可以指定哪些机器上运行哪些服务以达到的成本与效率的平衡。在企业中主要采用的都是全分布式模式,节点从数十个到上百个不等。在学习阶段,如果个人PC的性能足够强劲,也可以使用多台虚拟机代替。
二、Hadoop下载
作为一个软件的学习者和开发者,大家一定要培养自己:去官网、查资料的好习惯,摆脱各种一键安装、软件管家之类的东西,把一切掌控在自己手中,用严谨的态度来要求自己,加油!
1. 下载地址
在百度中搜索Hadoop,前两条就会显示我们需要的网站,目前Hadoop属于Apache基金会,所以我们打开网址时注意一下是apache.org
。
进入后来到Hadoop的官网,点击Download就可以打开下载界面:https://hadoop.apache.org/releases.html。
2. 版本选择
现在我们使用的是开源社区版,目前的主流版本为2.x.y和3.x.y。
在选择Hadoop的版本时,我们应该考虑到与其他生态圈软件的兼容问题。通常的组建方式有两种:
- 根据各组件的兼容性要求手动选择版本并搭建
- 使用CDH(Cloudera’s Distribution Including Apache Hadoop)自动选择版本并解决兼容问题
在学习阶段,由于进行的操作比较简单,不需要特别的在意版本的兼容问题,但是建议两种方式大家都能够去进行了解和实践。
3. 安装包下载
目前最新的2.x版本为2.10.1,Source为源码,Binary为我们所需要的软件包,点击对应版本的binary进入下载界面。
点击任意一个镜像地址开始下载,考虑到后续其他大数据组件的兼容性,推荐使用2.7.x
版本。
三、安装步骤
1. 前置环境
- 机器准备
由于是全分布式模式,一定会是由多台虚拟机或物理机组成的集群,本文将以三台机器为例。整体搭建步骤如下:
准备三台虚拟机 -> 完成系统安装和网络配置 -> 选择其中一台机器为主节点进行Hadoop核心配置 -> 将配置后的Hadoop软件分发到其他机器 -> 启动测试
- 系统安装
本文以在CentOS系统下部署Hadoop为例,对于CentOS的版本没有大的要求,在网卡配置时会稍有差别,对于系统安装有问题的小伙伴可以参考以下文章:
有些教程会推荐大家使用虚拟机克隆的方式快速获得多台已经安装配置好的Linux虚拟机,但是一方面这不会是企业中使用的方式,另外一方面同样需要处理好网卡、主机名等方面的冲突,所以还是推荐大家全新安装好三台机器,毕竟占用的空间都是一样的。
在安装时可以直接将主机名改为带有01、02、03编号的名称,便于记忆和区分,同时需要将网络设置为动态ip,以免自动分配的ip发生变化,如果在安装系统时没有完成这两个步骤也可以在安装完成后进行修改。
- 修改主机名
在CentOS 6中直接使用root用户修改 /etc/sysconfig/network 文件中的HOSTNAME属性(重启永久生效)。
在CentOS 7中直接使用root用户执行hostnamectl命令修改,重启后永久生效。
hostnamectl set-hostname NewHostName
- 配置静态IP
使用root用户修改当前启用的网卡配置文件,所在路径为 /etc/sysconfig/network-scripts ,CentOS 6系统默认为ifcfg-eth0,CentOS 7系统默认为ifcfg-ens33。配置文件中需要修改的内容基本相同:
# 原值为dhcp,修改为static BOOTPROTO=static # 添加IPADDR,对应的值要与原ip在同一网段 IPADDR=xxx.xxx.xxx.xxx # 添加NETMASK,指定子网掩码,默认为255.255.255.0 NETMASK=255.255.255.0 # 添加GATEWAY,要与虚拟机网卡的设置一致,默认仅主机模式为1,NAT模式为2 GATEWAY=xxx.xxx.xxx.1/2 # 如果需要连入外网,则可以添加DNS1和DNS2配置,通常会将DNS1指定为网关地址
配置完成后保存退出,使用service network restart命令重启网卡服务,并使用ifconfig命令查看配置是否正确。
- 配置hosts映射
由于是全分布式,为了方便各节点的交互,也为了尽量减少配置的修改,通常在配置文件中都会使用主机名,这就需要正确的建立主机名与ip的映射。我们目前已经有了三台配置好网络的机器(要保证在同一虚拟网络模式下,即:同为NAT、仅主机、桥接等,这样才能保证每台机器都处在同一个网段,能够正常通信)。现在我们有这样三台机器(Master为主节点):
主机名称 | ip地址 |
Master | 192.168.251.130 |
Slave01 | 192.168.251.131 |
Slave02 | 192.168.251.132 |
则需要使用root用户修改 /etc/hosts 文件,在结尾直接追加内容(每台机器):
192.168.251.130 Master 192.168.251.131 Slave01 192.168.251.132 Slave02
配置完成后可以使用ping命令一一测试,看看是够能够正确解析出ip地址,得到目标机器的回应(可以每台机器都测试一下:使用Ctrl + C结束)。
ping Master ping Slave01 ping Slave02
2. Hadoop安装
对于Hadoop软件,通常会新建一个单独的用户来管理,下面以普通用户hadoop为例来进行操作。
# 新建hadoop用户 useradd hadoop # 为hadoop用户设置密码 passwd hadoop # 切换至hadoop用户 su - hadoop
在配置Hadoop前,需要先配置好JDK,在安装先需要先卸载历史版本,详细的步骤可以参考我的另一篇文章:JDK的解压安装 - CentOS。
- 查询历史版本(如没有可跳过卸载步骤)
rpm -qa|grep java rpm -qa|grep jdk
- 卸载历史版本(使用root用户操作)
rpm -e --nodeps 软件包全称(从查询处获得)
以上步骤需要在每一台机器上完成,剩余步骤只需要在主节点上进行,最后进行分发
从此为分界,以下所有操作均使用hadoop用户来操作
- 解压缩JDK
将JDK的安装包使用hadoop用户上传至自己的家目录 /home/hadoop 下:
tar -zvxf jdk-8u251-linux-x64.tar.gz
- 配置JDK环境变量(在hadoop用户下)
vi /home/hadoop/.bash_profile # 在文件结尾添加以下内容 JAVA_HOME=/home/hadoop/jdk1.8.0_251 PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin export JAVA_HOME export PATH
- 刷新环境变量
source /home/hadoop/.bash_profile
- 使用命令测试
java -version
- 解压缩Hadoop
使用hadoop用户上传Hadoop软件包。
tar -zxvf hadoop-2.7.7.tar.gz
- 配置环境变量(在hadoop用户下)
vi /home/hadoop/.bash_profile # 在文件结尾添加以下内容 HADOOP_HOME=/home/hadoop/hadoop-2.7.7 PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_HOME export PATH
- 刷新环境变量
source /home/hadoop/.bash_profile
- 使用命令测试
hadoop version
3. Hadoop配置
如果以全分布模式运行Hadoop需要先进行相关配置,此步骤也是只需要在主节点上做一次即可。
- 配置文件所在路径
需要修改的配置文件所在路径在Hadoop的安装目录下的etc文件夹中。
- hadoop-env.sh
在Hadoop启动时会调用执行该文件,需要在其中设置JAVA_HOME,即依赖的Java环境安装位置(25行),确保export前没有井号。
export JAVA_HOME=/home/hadoop/jdk1.8.0_251
- core-site.xml
Hadoop的核心配置文件,全部配置项可参考官方文档:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/core-default.xml。
<configuration> <!-- Hadoop临时文件存放路径,默认在/tmp目录下 --> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoop-2.7.7/data</value> </property> <!-- NameNode结点的URI(包括协议、主机名称、端口号) --> <property> <name>fs.defaultFS</name> <value>hdfs://Master:9000</value> </property> <!-- 设置文件文件删除后,被完全清空的时间,默认为0,单位为分钟 --> <property> <name>fs.trash.interval</name> <value>60</value> </property> </configuration>
- hdfs-site.xml
HDFS核心配置文件,全部配置项可参考官方文档:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml。
<configuration> <!-- 块存储份数,默认为3 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 关闭权限校验,开发学习时可开启,默认为true --> <property> <name>dfs.permissions</name> <value>false</value> </property> <!-- namenode的http访问地址和端口 --> <property> <name>dfs.namenode.http-address</name> <value>Master:50070</value> </property> </configuration>
- mapred-site.xml(重命名mapred-site.xml.template)
Hadoop计算功能模块相关配置文件,全部配置项可参考官方文档:https://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml。
<configuration> <!-- 设置运行MapReduce任务方式为yarn,默认为local,可选项还有classic --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
- yarn-site.xml
Yarn资源调度相关配置文件,全部配置项可参考官方文档:https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-common/yarn-default.xml。
<configuration> <!-- resourcemanager的主机名 --> <property> <name>yarn.resourcemanager.hostname</name> <value>Master</value> </property> <!-- 暴露给客户端的主机名及端口号 --> <property> <name>yarn.resourcemanager.address</name> <value>Master:8032</value> </property> <!-- 分配给容器的物理内存量,单位是MB,设置为-1则自动分配,默认8192MB --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>1536</value> </property> <!-- NodeManager上运行的服务列表,可以配置成mapreduce_shuffle,多个服务使用逗号隔开 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
- slaves
从节点配置文件,这里填入另外两台机器的主机名。如果希望主节点本身也提供数据存储和计算服务,则可以将主节点主机名也填写上,如下:
Master Slave01 Slave02
4. SSH相关操作
至此,Hadoop的安装配置已经全部完成,接下来只要将JDK解压后的文件夹、Hadoop解压后的文件夹、环境变量配置文件同步到另外两台机器上就可以了,换句话说,三台机器的内容完全一样。
在CentOS系统中已经默认安装并启动了SSH服务,首先需要先配置免密码登录,这样可以使发送文件和Hadoop的使用更加方便。
- 生成密钥
# 整个过程一直回车即可 ssh-keygen -t rsa
- 配置免密码登录
# @前为用户名,@后为主机名,在主节点上执行以下命令 ssh-copy-id hadoop@Master ssh-copy-id hadoop@Slave01 ssh-copy-id hadoop@Slave02 # 输入一次hadoop用户的密码即可通过验证
配置完成后,可以从主节点免密码登录到自己以及两个从节点,如果希望三台机器之间都可以互相免密码登录,则可以在另外两台机器都执行一下上述命令。
- 使用远程登录命令验证
# 第一次登录可能会出现验证提示,输入yes后回车 ssh hadoop@Master # 登录成功后使用exit命令结束会话 exit ssh hadoop@slave01 exit ssh hadoop@slave02 exit
如果以上登录过程要求输入hadoop用户的密码,则证明配置成功,可以进行最后一步。
- 将文件分发至另外两个节点
在配置好免密码登录后,可以直接使用scp命令拷贝文件至其它机器,-r为递归操作,不需要输入密码。
# 拷贝JDK scp -r /home/hadoop/jdk1.8.0_251 hadoop@Slave01:/home/hadoop scp -r /home/hadoop/jdk1.8.0_251 hadoop@Slave02:/home/hadoop # 拷贝Hadoop scp -r /home/hadoop/hadoop-2.7.7 hadoop@Slave01:/home/hadoop scp -r /home/hadoop/hadoop-2.7.7 hadoop@Slave02:/home/hadoop # 拷贝环境变量配置文件,同名文件会自动覆盖 scp -r /home/hadoop/.bash_profile hadoop@Slave01:/home/hadoop scp -r /home/hadoop/.bash_profile hadoop@Slave02:/home/hadoop
5. 集群启动及确认
- 格式化namenode
第一次使用Hadoop时需要进行初始化,该操作只需要在主节点执行一次,完成后会根据core-site.xml中的配置,在对应的目录下自动创建相应的文件夹。
hdfs namenode -format
- 启动Hadoop进程
由于已经配置了环境变量,可以直接执行sbin目录下的脚本:start-all.sh,如果需要停止可以执行stop-all.sh。
start-all.sh
- jps命令验证
jps为安装JDK环境后的命令,可以查看到当前用户下的Java进程,如果无法使用需检查JDK的环境变量配置。
jps
如果在slaves文件中填写了主节点,则在主节点中应该出现5个进程(不包括jps本身),否则为3个:NameNode、SecondaryNameNode、ResourceManager。
从节点上会出现两个进程:DataNode、NodeManager,如果以上进程都成功启动,那么祝贺你,你的集群配置已经完成了。
四、视频直达
视频地址:https://www.bilibili.com/video/BV1NX4y1K7Zs,喜欢的小伙伴儿一定要三连加关注哦~
Hadoop全分布式部署 - CentOS
写在结尾:作者力求做到将每个知识点细化,并且对于有关联的知识点都会使用传送门挂载链接。文章采用:“文字 + 配图 + 视频”的方式来进行展现,均是挤时间所作,希望看到这里能留下评论点个赞,略表支持!