Hadoop集群环境搭建
1.Hadoop简介
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。
1.1 Hadoop意义
狭义上Hadoop指的是Apache的一款开源软件。用java语言实现开源软件框架,允许使用简单的编程模型跨计算机集群对大型数据集进行分布式处理。
Hadoop核心组件
Hadoop HDFS(分布式文件存储系统):解决海量数据存储
Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度
Hadoop MapReduce(分布式计算框架):解决海量数据计算
官网
广义上Hadoop指的是围绕Hadoop打造的大数据生态圈。
Google 三篇论文
《The Google file system》:谷歌分布式文件系统GFS
《MapReduce: Simplified Data Processing on Large Clusters》:谷歌分布式计算框架MapReduce
《Bigtable: A Distributed Storage System for Structured Data》:谷歌结构化数据存储系统
1.2 Hadoop主要版本
Hadoop 1.0
HDFS(分布式文件存储)
MapReduce(资源管理和分布式数据处理)
Hadoop 2.0
HDFS(分布式文件存储)
MapReduce(分布式数据处理)
YARN(集群资源管理、任务调度)
Hadoop 3.0
Hadoop 3.0架构组件和Hadoop 2.0类似,3.0着重于性能优化。
通用
精简内核、类路径隔离、shell脚本重构
Hadoop HDFS
EC纠删码、多NameNode支持
Hadoop MapReduce
任务本地化优化、内存参数自动推断
Hadoop YARN
Timeline Service V2、队列配置
2 Hadoop集群搭建
2.1 Hadoop集群
Hadoop集群包括两个集群:HDFS集群、YARN集群
两个集群逻辑上分离、通常物理上在一起
两个集群都是标准的主从架构集群
HDFS集群(分布式存储)
主角色:NameNode
从角色:DataNode
主角色辅助角色:SecondaryNameNode
YARN集群(资源管理、调度)
主角色:ResourceManager
从角色:NodeManager
Hadoop集群简介
2.2 Hadoop部署模式
Standalone mode(单机模式):1个机器运行1个java进程,所有角色在一个进程中运行,主要用于调试
Pseudo-Distributed mode(伪分布式):一个机器运行多个进程,每个角色一个进程,主要用于调试
Cluster mode(集群模式):集群模式主要用于生产环境部署。会使用N台主机组成一个Hadoop集群。这种部署模式下,主节点和从节点会分开部署在不同的机器上。
2.3 Hadoop集群搭建
1. 安装包源码下载
2. 集群角色划分
角色规划的准则
根据软件工作特性和服务器硬件资源情况合理分配
角色规划注意事项
资源上有抢夺冲突的,尽量不要部署在一起
工作上需要互相配合的。尽量部署在一起
服务器 | 运行角色 |
---|---|
master | namenode datanode resourcemanager nodemanager |
slave0 | secondarynamenode datanode nodemanager |
slave1 | datanode nodemanager |
3. 服务器基础环境准备
(1)修改host映射
(2)关闭防火墙
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld.service #禁止防火墙开启自启
(3)ssh免密登录
(4)JDK安装
4. 上传安装包、解压安装包
5. Hadoop安装包目录结构
目录 | 说明 |
---|---|
bin | Hadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop。 |
etc | Hadoop配置文件所在的目录 |
include | 对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序。 |
lib | 该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用。 |
libexec | 各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。 |
sbin | Hadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动/关闭脚本。 |
share | Hadoop各个模块编译后的jar包所在的目录,官方自带示例。 |
6. 编辑Hadoop配置文件
#进入hadoop/etc/hadoop/目录
(1)hadoop-env.sh
#配置JAVA_HOME
export JAVA_HOME=#JDK目录
#设置用户以执行对应角色shell命令
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
(2)core-site.xml
<!-- 默认文件系统的名称。通过URI中schema区分不同文件系统。-->
<!-- file:///本地文件系统 hdfs:// hadoop分布式文件系统 gfs://。-->
<!-- hdfs文件系统访问地址:http://nn_host:8020。-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<!-- hadoop本地数据存储目录 format时自动生成 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoop-3.1.4</value>
</property>
<!-- 在Web UI访问HDFS使用的用户名。-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
(3)hdfs-site.xml
<!-- 设定SNN运行主机和端口。-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>solve0:9868</value>
</property>
(4)mapred-site.xml
<!-- mr程序默认运行方式。yarn集群模式 local本地模式-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- MR App Master环境变量。-->
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<!-- MR MapTask环境变量。-->
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<!-- MR ReduceTask环境变量。-->
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
(5)yarn-site.xml
<!-- yarn集群主角色RM运行机器。-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MR程序。-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 每个容器请求的最小内存资源(以MB为单位)。-->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<!-- 每个容器请求的最大内存资源(以MB为单位)。-->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value><!-- 数值不宜过小,否则会报错-->
</property>
<!-- 容器虚拟内存与物理内存之间的比率。-->
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
</property>
(6)workers
7. 分发同步安装包
scp -r hadoop root@node2:#Hadoop安装位置
scp -r hadoop root@node3:#Hadoop安装位置
8. 配置Hadoop环境变量
配置Hadoop环境变量
vim /etc/profile
export HADOOP_HOME= #Hadoop文件位置
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
将修改后的环境变量同步其他机器
scp /etc/profile root@node2:/etc/
scp /etc/profile root@node3:/etc/
重新加载环境变量,验证是否生效(3台机器)
source /etc/profile
hadoop #验证环境变量是否生效
9. 初式化操作
首次启动HDFS时,必须对其进行格式化操作。
format本质上是初始化工作,进行HDFS清理和准备工作
hdfs namenode -format
3. Hadoop集群启停
3.1 手动进程启停
每台机器上每次手动启动关闭一个角色进程
HDFS集群
hdfs --daemon start namenode|datanode|secondarynamenode
hdfs --daemon stop namenode|datanode|secondarynamenode
YARN集群
yarn --daemon start resourcemanager|nodemanager
yarn --daemon stop resourcemanager|nodemanager
3.2 shell脚本启停
在master上,使用软件自带的shell脚本一键启动
前提:配置好机器之间的SSH免密登录和workers文件
HDFS集群
start-dfs.sh
stop-dfs.sh
YARN集群
start-yarn.sh
stop-yarn.sh
Hadoop集群
start-all.sh
stop-all.sh
3.3 查看结果
1. JPS
启动完毕之后可以使用jps命令查看进程是否启动成功
2. UI页面
Hadoop Web UI页面HDFS集群
地址:http://namenode_host:9870
Hadoop Web UI页面YARN集群
地址:http://resourcemanager_host:8088
4. Hadoop使用
4.1 shell命令操作
hadoop fs -mkdir
hadoop fs -put
hadoop fs -ls /
4.2 Web UI页面操作
4.3 MapReduce+YARN使用
执行Hadoop官方自带的MapReduce案例评估圆周率π的值
hadoop/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-3.1.4.jar pi 2 4
5 Hadoop HDFS基准测试
5.1 测试写入速度
hadoop-mapreduce-client-jobclient-3.1.4-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 10MB
说明:向HDFS文件系统中写入数据,10个文件,每个文件10MB,文件存放到/benchmarks/TestDFSIO中Throughput:吞吐量、Average IO rate:平均IO率、IO rate std deviation:IO率标准偏差
5.2 测试读取速度
hadoop-mapreduce-client-jobclient-3.1.4-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB
说明:在HDFS文件系统中读入10个文件,每个文件10MThroughput:吞吐量、Average IO rate:平均IO率、IO rate std deviation:IO率标准偏差
5.3清除测试数据
hadoop-mapreduce-client-jobclient-3.1.4-tests.jar TestDFSIO -clean
说明:测试期间,会在HDFS集群上创建 /benchmarks目录,测试完毕后,我们可以清理该目录。