Hadoop单节点安装步骤详解,有哪些关键点需要注意?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3493个文字,预计阅读时间需要14分钟。
Hadoop简介:Hadoop是Apache基金会下的一个开源软件框架,用Java语言实现,用于大规模数据集的存储和计算。它是一个开发及运行处理大规模数据集的软件平台,允许使用简单的编程模型在大量计算机集群上分布式处理大数据。
1 Hadoop介绍Hadoop是Apache旗下的一个用java语言实现开源软件框架,是一个开发和运行处理大规模数据的软件平台。允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理。狭义上说,Hadoop指Apache这款开源框架,它的核心组件有:
HDFS(分布式文件系统):解决海量数据存储.
YARN(作业调度和集群资源管理的框架):解决资源任务调度。
MAPREDUCE(分布式运算编程框架):解决海量数据计算。
广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈(一图看懂大数据生态圈)
2 Hadoop特性优点
扩容能力(Scalable):Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集群可用方便的扩展到数以千计的节点中。
成本低(Economical):Hadoop通过普通廉价的机器组成服务器集群来分发以及处理数据,以至于成本很低。
高效率(Efficient):通过并发数据,Hadoop可以在节点之间动态并行的移动数据,使得速度非常快。
可靠性(Rellable):能自动维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。所以Hadoop的按位存储和处理数据的能力值得人们信赖。
3Hadoop历史版本与架构1.x版本系列:Hadoop版本当中的第二代开源版本,主要修复0.x版本的一些bug等,该版本已被淘汰
2.x版本系列:架构产生重大变化,引入了yarn平台等许多新特性,是现在使用的主流版本。
3.x版本系列:对HDFS、MapReduce、YARN都有较大升级,还新增了Ozone key-value存储。
架构:Hadoop在1.X版本的时候只有HDFS和MapReduce。在Hadoop2.X开始,中间加入了Yarn调度层做资源调度工作。如下图:一图读懂Hadoop架构。
4Hadoop 3.x的版本架构和模型介绍由于Hadoop 2.0是基于JDK 1.7开发的,而JDK 1.7在2015年4月已停止更新,这直接迫使Hadoop社区基于JDK 1.8重新发布一个新的Hadoop版本,即Hadoop 3.0。Hadoop 3.0中引入了一些重要的功能和优化,包括HDFS 可擦除编码、多Namenode支持、MR Native Task优化、YARN基于cgroup的内存和磁盘IO隔离、YARN container resizing等。
Apache Hadoop 项目组最新消息,Hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+磁盘,共同处理数据。改变最大的是hdfs,hdfs 通过最近block块计算,根据最近计算原则,本地block块,加入到内存,先计算,通过IO,共享内存计算区域,最后快速形成计算结果。
4.1Hadoop 3.0新特性
Hadoop 3.0在功能和性能方面,对Hadoop内核进行了多项重大改进。
(1)通用性:
① 精简Hadoop内核,包括剔除过期的API和实现,将默认组件实现替换成最高效的实现。
② Classpath isolation:以防止不同版本jar包冲突。
③ Shell脚本重构: Hadoop 3.0对Hadoop的管理脚本进行了重构,修复了大量bug,增加了新特性。
(2)HDFS
Hadoop3.x中Hdfs在可靠性和支持能力上作出很大改观:
① HDFS支持数据的擦除编码,这使得HDFS在不降低可靠性的前提下,节省一半存储空间。
② 多NameNode支持,即支持一个集群中,一个active、多个standby namenode部署方式。注:多ResourceManager特性在Hadoop 2.0中已经支持。
(3)HDFS纠删码
在Hadoop3.X中,HDFS实现了Erasure Coding这个新功能。Erasure coding纠删码技术简称EC,是一种数据保护技术.最早用于通信行业中数据传输中的数据恢复,是一种编码容错技术。通过在原始数据中加入新的校验数据,使得各个部分的数据产生关联性。在一定范围的数据出错情况下,通过纠删码技术都可以进行恢复。Hadoop-3.0之前,HDFS存储方式为每一份数据存储3份,这也使得存储利用率仅为1/3,Hadoop-3.0引入纠删码技术(EC技术),实现1份数据+0.5份冗余校验数据存储方式。与副本相比纠删码是一种更节省空间的数据持久化存储方法。标准编码(比如Reed-Solomon(10,4))会有1.4 倍的空间开销;而HDFS副本则会有3倍的空间开销。
(4)支持多个NameNodes
最初的HDFS NameNode high-availability实现仅仅提供了一个active NameNode和一个Standby NameNode;并且通过将编辑日志复制到三个JournalNodes上,这种架构能够容忍系统中的任何一个节点的失败。 然而,一些部署需要更高的容错度。我们可以通过这个新特性来实现,其允许用户运行多个Standby NameNode。比如通过配置三个NameNode和五个JournalNodes,这个系统可以容忍2个节点的故障,而不是仅仅一个节点。
(5) MapReduce
Hadoop3.X中的MapReduce较之前的版本作出以下更改:
① Tasknative优化:为MapReduce增加了C/C++的map output collector实现(包括Spill,Sort和IFile等),通过作业级别参数调整就可切换到该实现上。对于shuffle密集型应用,其性能可提高约30%。
② MapReduce内存参数自动推断。在Hadoop 2.0中,为MapReduce作业设置内存参数非常繁琐,一旦设置不合理,则会使得内存资源浪费严重,在Hadoop3.0中避免了这种情况。
Hadoop3.x中的MapReduce添加了Map输出collector的本地实现,对于shuffle密集型的作业来说,这将会有30%以上的性能提升。
(6)YARN 资源类型
YARN 资源模型(YARN resource model)已被推广为支持用户自定义的可数资源类型(support user-defined countable resource types),不仅仅支持 CPU 和内存。比如集群管理员可以定义诸如 GPUs、软件许可证(software licenses)或本地附加存储器(locally-attached storage)之类的资源。YARN 任务可以根据这些资源的可用性进行调度。
(7)其他
在Hadoop3.x之前,多个Hadoop服务的默认端口都属于Linux的临时端口范围(32768-61000)。这就意味着用户的服务在启动的时候可能因为和其他应用程序产生端口冲突而无法启动。现在这些可能会产生冲突的端口已经不再属于临时端口的范围,这些端口的改变会影响NameNode, Secondary NameNode, DataNode以及KMS。与此同时,官方文档也进行了相应的改变,具体可以参见 HDFS-9427以及HADOOP-12811。
- Namenode ports: 50470 --> 9871, 50070--> 9870, 8020 --> 9820
- Secondary NN ports: 50091 --> 9869,50090 --> 9868
- Datanode ports: 50020 --> 9867, 50010--> 9866, 50475 --> 9865, 50075 --> 9864
- Kms server ports: 16000 --> 9600 (原先的16000与HMaster端口冲突)
Hadoop集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起。
HDFS集群负责海量数据的存储,集群中的角色主要有:
- NameNode、DataNode、SecondaryNameNode
YARN集群负责海量数据运算时的资源调度,集群中的角色主要有:
- ResourceManager、NodeManager
mapreduce是一个分布式运算编程框架。是应用程序开发包,由用户按照编程规范进行程序开发,后打包运行在HDFS集群上,并且受到YARN集群的资源调度管理。
(2)集群部署方式
- standalone mode(独立模式):独立模式又称为单机模式,仅1个机器运行1个java进程,主要用于调试。
-
Pseudo-Distributed mode(伪分布式模式):伪分布模式也是在1个机器上运行HDFS的NameNode和DataNode、YARN的 ResourceManger和NodeManager,但分别启动单独的java进程,主要用于调试。
-
Cluster mode(群集模式):集群模式主要用于生产环境部署。会使用N台主机组成一个Hadoop集群。这种部署模式下,主节点和从节点会分开部署在不同的机器上。
(3) Hadoop集群架构模型
- 第一种:NameNode与ResourceManager单节点架构模型
文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据。
secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理。
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据。
数据计算核心模块:
ResourceManager:接收用户的计算请求任务,并负责集群的资源分配。
NodeManager:负责执行主节点APPmaster分配的任务。
- 第二种:NameNode高可用与ResourceManager单节点架构模型
文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据,其中NameNode可以有两个,形成高可用状态。
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据。
JournalNode:文件系统元数据信息管理。
数据计算核心模块:
ResourceManager:接收用户的计算请求任务,并负责集群的资源分配,以及计算任务的划分。
NodeManager:负责执行主节点ResourceManager分配的任务。
- 第三种:NameNode单节点与ResourceManager高可用架构模型
文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据。
secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理。
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据。
数据计算核心模块:
ResourceManager:接收用户的计算请求任务,并负责集群的资源分配,以及计算任务的划分,通过zookeeper实现ResourceManager的高可用。
NodeManager:负责执行主节点ResourceManager分配的任务。
-
第四种:NameNode与ResourceManager高可用架构模型
搭建过程查看另外一篇文章( HDFS High Availability(HA)高可用配置 )
文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据,一般都是使用两个,实现HA高可用
JournalNode:元数据信息管理进程,一般都是奇数个
DataNode:从节点,用于数据的存储
数据计算核心模块:
ResourceManager:Yarn平台的主节点,主要用于接收各种任务,通过两个,构建成高可用
NodeManager:Yarn平台的从节点,主要用于处理ResourceManager分配的任务
以上就是Hadoop的详细介绍,接下来就让我们实战吧,我们准备三台虚拟机。
准备工作:实现虚拟机之间的SSH免密登录(参考文章)
在三台主机上分别创建目录:
mkdir -p /export/server/
mkdir -p /export/data/
mkdir -p /export/software/
(6)NameNode与ResourceManager单节点架集群规划与搭建
(1)解压Hadoop安装包
自行复制链接下载:archive.apache.org/dist/hadoop/core/hadoop-3.1.4/hadoop-3.1.4.tar.gz
上传下载的Hadoop3.1.4包到 /export/software/ 目录下。上传方式多种,这里就不做展示,然后解压。解压命令:
cd /opt/export/software
tar -zxvf hadoop-3.1.4-bin-snappy-CentOS7.tar.gz -C /export/server/
在Hadoop3.1.4文件中创建用于存放数据的data目录:
mkdir -p /export/server/hadoop-3.1.4/data
(2)编辑配置文件
- 配置NameNode(core-site.xml)
hadoop的核心配置文件,有默认的配置项core-default.xml。在该文件中的<configuration>标签中添加配置。
core-default.xml与core-site.xml的功能是一样的,如果在core-site.xml里没有配置的属性,则会自动会获取core-default.xml里的相同属性的值。
cd /export/server/hadoop-3.1.4/etc/hadoop
vim core-site.xml
#-------------------------------------------------------------
#在第19行<configuration></configuration>之间添加配置,以下内容:
<!-- 默认文件系统的名称。通过URI中schema区分不同文件系统。-->
<!-- file:///本地文件系统 hdfs:// hadoop分布式文件系统 gfs://。-->
<!-- hdfs文件系统访问地址:nn_host:8020。-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<!-- hadoop本地数据存储目录 format时自动生成 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/server/hadoop-3.1.4/data</value>
</property>
<!-- 在Web UI访问HDFS使用的用户名。-->
<property>
<name>hadoop.node1:9870
YARN: node1:8088
8Hadoop初体验(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:node1:9870/
查看文件是否创建成功.
(2)运行mapreduce程序
在Hadoop安装包的share/hadoop/mapreduce下有官方自带的mapreduce程序。我们可以使用如下的命令进行运行测试。(示例程序jar:hadoop-mapreduce-examples-3.1.4.jar计算圆周率)
关于圆周率的估算,感兴趣的可以查询资料蒙特卡洛方法来计算Pi值,计算命令中2表示计算的线程数,1000表示投点数,该值越大,则计算的pi值越准确。
yarn jar /export/server/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar pi 2 1000
(3) 测试写入速度
#1.启动YARN集群
start-yarn.sh
#2.启动写入基准测试
hadoop jar /export/server/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.4-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 10MB
我们可以看到Hadoop启动了一个MapReduce作业来运行benchmark测试。等待约2-5分钟,MapReduce程序运行成功后,就可以查看测试结果了。
测试hdfs的读取文件性能,在HDFS文件系统中读入10个文件,每个文件10M
#测试读取
hadoop jar /export/server/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.4-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB
测试期间,会在HDFS集群上创建/benchmarks目录,测试完毕后,我们可以清理该目录。
#清理测试数据
hdfs dfs -ls -R /benchmarks
hadoop jar /export/server/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.4-tests.jar TestDFSIO -clean
至此,整篇的Hadoop介绍以及单节点部署介绍完毕,后期会写Hive,敬请期待吧,欢迎留言探讨。
本文共计3493个文字,预计阅读时间需要14分钟。
Hadoop简介:Hadoop是Apache基金会下的一个开源软件框架,用Java语言实现,用于大规模数据集的存储和计算。它是一个开发及运行处理大规模数据集的软件平台,允许使用简单的编程模型在大量计算机集群上分布式处理大数据。
1 Hadoop介绍Hadoop是Apache旗下的一个用java语言实现开源软件框架,是一个开发和运行处理大规模数据的软件平台。允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理。狭义上说,Hadoop指Apache这款开源框架,它的核心组件有:
HDFS(分布式文件系统):解决海量数据存储.
YARN(作业调度和集群资源管理的框架):解决资源任务调度。
MAPREDUCE(分布式运算编程框架):解决海量数据计算。
广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈(一图看懂大数据生态圈)
2 Hadoop特性优点
扩容能力(Scalable):Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集群可用方便的扩展到数以千计的节点中。
成本低(Economical):Hadoop通过普通廉价的机器组成服务器集群来分发以及处理数据,以至于成本很低。
高效率(Efficient):通过并发数据,Hadoop可以在节点之间动态并行的移动数据,使得速度非常快。
可靠性(Rellable):能自动维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。所以Hadoop的按位存储和处理数据的能力值得人们信赖。
3Hadoop历史版本与架构1.x版本系列:Hadoop版本当中的第二代开源版本,主要修复0.x版本的一些bug等,该版本已被淘汰
2.x版本系列:架构产生重大变化,引入了yarn平台等许多新特性,是现在使用的主流版本。
3.x版本系列:对HDFS、MapReduce、YARN都有较大升级,还新增了Ozone key-value存储。
架构:Hadoop在1.X版本的时候只有HDFS和MapReduce。在Hadoop2.X开始,中间加入了Yarn调度层做资源调度工作。如下图:一图读懂Hadoop架构。
4Hadoop 3.x的版本架构和模型介绍由于Hadoop 2.0是基于JDK 1.7开发的,而JDK 1.7在2015年4月已停止更新,这直接迫使Hadoop社区基于JDK 1.8重新发布一个新的Hadoop版本,即Hadoop 3.0。Hadoop 3.0中引入了一些重要的功能和优化,包括HDFS 可擦除编码、多Namenode支持、MR Native Task优化、YARN基于cgroup的内存和磁盘IO隔离、YARN container resizing等。
Apache Hadoop 项目组最新消息,Hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+磁盘,共同处理数据。改变最大的是hdfs,hdfs 通过最近block块计算,根据最近计算原则,本地block块,加入到内存,先计算,通过IO,共享内存计算区域,最后快速形成计算结果。
4.1Hadoop 3.0新特性
Hadoop 3.0在功能和性能方面,对Hadoop内核进行了多项重大改进。
(1)通用性:
① 精简Hadoop内核,包括剔除过期的API和实现,将默认组件实现替换成最高效的实现。
② Classpath isolation:以防止不同版本jar包冲突。
③ Shell脚本重构: Hadoop 3.0对Hadoop的管理脚本进行了重构,修复了大量bug,增加了新特性。
(2)HDFS
Hadoop3.x中Hdfs在可靠性和支持能力上作出很大改观:
① HDFS支持数据的擦除编码,这使得HDFS在不降低可靠性的前提下,节省一半存储空间。
② 多NameNode支持,即支持一个集群中,一个active、多个standby namenode部署方式。注:多ResourceManager特性在Hadoop 2.0中已经支持。
(3)HDFS纠删码
在Hadoop3.X中,HDFS实现了Erasure Coding这个新功能。Erasure coding纠删码技术简称EC,是一种数据保护技术.最早用于通信行业中数据传输中的数据恢复,是一种编码容错技术。通过在原始数据中加入新的校验数据,使得各个部分的数据产生关联性。在一定范围的数据出错情况下,通过纠删码技术都可以进行恢复。Hadoop-3.0之前,HDFS存储方式为每一份数据存储3份,这也使得存储利用率仅为1/3,Hadoop-3.0引入纠删码技术(EC技术),实现1份数据+0.5份冗余校验数据存储方式。与副本相比纠删码是一种更节省空间的数据持久化存储方法。标准编码(比如Reed-Solomon(10,4))会有1.4 倍的空间开销;而HDFS副本则会有3倍的空间开销。
(4)支持多个NameNodes
最初的HDFS NameNode high-availability实现仅仅提供了一个active NameNode和一个Standby NameNode;并且通过将编辑日志复制到三个JournalNodes上,这种架构能够容忍系统中的任何一个节点的失败。 然而,一些部署需要更高的容错度。我们可以通过这个新特性来实现,其允许用户运行多个Standby NameNode。比如通过配置三个NameNode和五个JournalNodes,这个系统可以容忍2个节点的故障,而不是仅仅一个节点。
(5) MapReduce
Hadoop3.X中的MapReduce较之前的版本作出以下更改:
① Tasknative优化:为MapReduce增加了C/C++的map output collector实现(包括Spill,Sort和IFile等),通过作业级别参数调整就可切换到该实现上。对于shuffle密集型应用,其性能可提高约30%。
② MapReduce内存参数自动推断。在Hadoop 2.0中,为MapReduce作业设置内存参数非常繁琐,一旦设置不合理,则会使得内存资源浪费严重,在Hadoop3.0中避免了这种情况。
Hadoop3.x中的MapReduce添加了Map输出collector的本地实现,对于shuffle密集型的作业来说,这将会有30%以上的性能提升。
(6)YARN 资源类型
YARN 资源模型(YARN resource model)已被推广为支持用户自定义的可数资源类型(support user-defined countable resource types),不仅仅支持 CPU 和内存。比如集群管理员可以定义诸如 GPUs、软件许可证(software licenses)或本地附加存储器(locally-attached storage)之类的资源。YARN 任务可以根据这些资源的可用性进行调度。
(7)其他
在Hadoop3.x之前,多个Hadoop服务的默认端口都属于Linux的临时端口范围(32768-61000)。这就意味着用户的服务在启动的时候可能因为和其他应用程序产生端口冲突而无法启动。现在这些可能会产生冲突的端口已经不再属于临时端口的范围,这些端口的改变会影响NameNode, Secondary NameNode, DataNode以及KMS。与此同时,官方文档也进行了相应的改变,具体可以参见 HDFS-9427以及HADOOP-12811。
- Namenode ports: 50470 --> 9871, 50070--> 9870, 8020 --> 9820
- Secondary NN ports: 50091 --> 9869,50090 --> 9868
- Datanode ports: 50020 --> 9867, 50010--> 9866, 50475 --> 9865, 50075 --> 9864
- Kms server ports: 16000 --> 9600 (原先的16000与HMaster端口冲突)
Hadoop集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起。
HDFS集群负责海量数据的存储,集群中的角色主要有:
- NameNode、DataNode、SecondaryNameNode
YARN集群负责海量数据运算时的资源调度,集群中的角色主要有:
- ResourceManager、NodeManager
mapreduce是一个分布式运算编程框架。是应用程序开发包,由用户按照编程规范进行程序开发,后打包运行在HDFS集群上,并且受到YARN集群的资源调度管理。
(2)集群部署方式
- standalone mode(独立模式):独立模式又称为单机模式,仅1个机器运行1个java进程,主要用于调试。
-
Pseudo-Distributed mode(伪分布式模式):伪分布模式也是在1个机器上运行HDFS的NameNode和DataNode、YARN的 ResourceManger和NodeManager,但分别启动单独的java进程,主要用于调试。
-
Cluster mode(群集模式):集群模式主要用于生产环境部署。会使用N台主机组成一个Hadoop集群。这种部署模式下,主节点和从节点会分开部署在不同的机器上。
(3) Hadoop集群架构模型
- 第一种:NameNode与ResourceManager单节点架构模型
文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据。
secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理。
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据。
数据计算核心模块:
ResourceManager:接收用户的计算请求任务,并负责集群的资源分配。
NodeManager:负责执行主节点APPmaster分配的任务。
- 第二种:NameNode高可用与ResourceManager单节点架构模型
文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据,其中NameNode可以有两个,形成高可用状态。
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据。
JournalNode:文件系统元数据信息管理。
数据计算核心模块:
ResourceManager:接收用户的计算请求任务,并负责集群的资源分配,以及计算任务的划分。
NodeManager:负责执行主节点ResourceManager分配的任务。
- 第三种:NameNode单节点与ResourceManager高可用架构模型
文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据。
secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理。
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据。
数据计算核心模块:
ResourceManager:接收用户的计算请求任务,并负责集群的资源分配,以及计算任务的划分,通过zookeeper实现ResourceManager的高可用。
NodeManager:负责执行主节点ResourceManager分配的任务。
-
第四种:NameNode与ResourceManager高可用架构模型
搭建过程查看另外一篇文章( HDFS High Availability(HA)高可用配置 )
文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据,一般都是使用两个,实现HA高可用
JournalNode:元数据信息管理进程,一般都是奇数个
DataNode:从节点,用于数据的存储
数据计算核心模块:
ResourceManager:Yarn平台的主节点,主要用于接收各种任务,通过两个,构建成高可用
NodeManager:Yarn平台的从节点,主要用于处理ResourceManager分配的任务
以上就是Hadoop的详细介绍,接下来就让我们实战吧,我们准备三台虚拟机。
准备工作:实现虚拟机之间的SSH免密登录(参考文章)
在三台主机上分别创建目录:
mkdir -p /export/server/
mkdir -p /export/data/
mkdir -p /export/software/
(6)NameNode与ResourceManager单节点架集群规划与搭建
(1)解压Hadoop安装包
自行复制链接下载:archive.apache.org/dist/hadoop/core/hadoop-3.1.4/hadoop-3.1.4.tar.gz
上传下载的Hadoop3.1.4包到 /export/software/ 目录下。上传方式多种,这里就不做展示,然后解压。解压命令:
cd /opt/export/software
tar -zxvf hadoop-3.1.4-bin-snappy-CentOS7.tar.gz -C /export/server/
在Hadoop3.1.4文件中创建用于存放数据的data目录:
mkdir -p /export/server/hadoop-3.1.4/data
(2)编辑配置文件
- 配置NameNode(core-site.xml)
hadoop的核心配置文件,有默认的配置项core-default.xml。在该文件中的<configuration>标签中添加配置。
core-default.xml与core-site.xml的功能是一样的,如果在core-site.xml里没有配置的属性,则会自动会获取core-default.xml里的相同属性的值。
cd /export/server/hadoop-3.1.4/etc/hadoop
vim core-site.xml
#-------------------------------------------------------------
#在第19行<configuration></configuration>之间添加配置,以下内容:
<!-- 默认文件系统的名称。通过URI中schema区分不同文件系统。-->
<!-- file:///本地文件系统 hdfs:// hadoop分布式文件系统 gfs://。-->
<!-- hdfs文件系统访问地址:nn_host:8020。-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<!-- hadoop本地数据存储目录 format时自动生成 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/server/hadoop-3.1.4/data</value>
</property>
<!-- 在Web UI访问HDFS使用的用户名。-->
<property>
<name>hadoop.node1:9870
YARN: node1:8088
8Hadoop初体验(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:node1:9870/
查看文件是否创建成功.
(2)运行mapreduce程序
在Hadoop安装包的share/hadoop/mapreduce下有官方自带的mapreduce程序。我们可以使用如下的命令进行运行测试。(示例程序jar:hadoop-mapreduce-examples-3.1.4.jar计算圆周率)
关于圆周率的估算,感兴趣的可以查询资料蒙特卡洛方法来计算Pi值,计算命令中2表示计算的线程数,1000表示投点数,该值越大,则计算的pi值越准确。
yarn jar /export/server/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar pi 2 1000
(3) 测试写入速度
#1.启动YARN集群
start-yarn.sh
#2.启动写入基准测试
hadoop jar /export/server/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.4-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 10MB
我们可以看到Hadoop启动了一个MapReduce作业来运行benchmark测试。等待约2-5分钟,MapReduce程序运行成功后,就可以查看测试结果了。
测试hdfs的读取文件性能,在HDFS文件系统中读入10个文件,每个文件10M
#测试读取
hadoop jar /export/server/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.4-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB
测试期间,会在HDFS集群上创建/benchmarks目录,测试完毕后,我们可以清理该目录。
#清理测试数据
hdfs dfs -ls -R /benchmarks
hadoop jar /export/server/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.4-tests.jar TestDFSIO -clean
至此,整篇的Hadoop介绍以及单节点部署介绍完毕,后期会写Hive,敬请期待吧,欢迎留言探讨。

