大数据开发基础入门与项目实战Hadoop核心及生态圈技术栈之1.Hadoop简介及Apache Hadoop完全分布式集群搭建

Posted cutercorley

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据开发基础入门与项目实战Hadoop核心及生态圈技术栈之1.Hadoop简介及Apache Hadoop完全分布式集群搭建相关的知识,希望对你有一定的参考价值。

前言

本文主要介绍了Hadoop简介及Apache Hadoop完全分布式集群搭建,包括大数据简介、Hadoop简介、Hadoop的重要组成和Apache Hadoop 完全分布式集群搭建。

1.大数据简介

(1)知识体系

大数据技术解决的主要是海量数据的存储和计算

Hadoop的广义和狭义之分:

(1)狭义的Hadoop:

狭义的Hadoop指的是一个框架,Hadoop是由三部分组成:

  • HDFS

    分布式文件系统,用于存储。

  • MapReduce

    分布式离线计算框架,用于计算。

  • Yarn

    资源调度框架

(2)广义的Hadoop:

广义Hadoop不仅仅包含Hadoop框架,除了Hadoop框架之外还有一些辅助框架:

  • Flume

    日志数据采集。

  • Sqoop

    关系型数据库数据的采集。
    

  • Hive

    深度依赖Hadoop框架完成计算(SQL)。

  • Hbase

    大数据领域的数据库(mysql)。

  • Sqoop

    数据的导出。

广义Hadoop指的是一个生态圈。

核心知识体系如下:

  • 大数据简介(定义,特点,应用场景,发展趋势,职业发展路线)

  • Hadoop简介(历史,发展路线-版本变更,发行版(CDH))

  • Hadoop的重要组成(hdfs,mapreduce,yarn)

  • Apache Hadoop完全分布式集群搭建

  • HDFS分布式文件系统(架构,原理,常用api,元数据管理,权限,日志采集的综合案例)

  • MapReduce分布式计算框架 (原理,常用的编程规范等,大量案例练习-分区,排序-快排-归并排序,压缩,自定义组件,综合案例)

  • Yarn资源调度框架(架构,原理,三种资源调度策略)

  • Apche Hadoop核心源码剖析(nn,dn启动流程源码分析,nn高并发的支撑原理,hadoop3.0新特性)

  • 调优及二次开发示例(hdfs,mr,yarn调优,nn常见GC问题,完成二次开发编译源码)

(2)大数据定义及应用场景

大数据的定义:

大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

大数据的特点(5V):

  • 大量

    采集、存储和计算的数据量都非常大。

    随着科学技术的发展和互联网的普及,全球的数据量已经大到爆了,而传统的关系型数据库根本处理不了如此海量的数据。

  • 高速

    在大数据时代,数据的创建、存储、分析都要求被高速处理,比如电商网站的个性化推荐尽可能要求实时完成推荐,这也是大数据区别于传统数据挖掘的显著特征。

  • 多样

    数据形式和来源多样化,包括结构化、半结构化和非结构化数据,具体表现为网络日志、音频、视频、图片、地理位置信息等,多类型的数据对数据的处理能力提出了更高的要求。

  • 真实

    确保数据的真实性,才能保证数据分析的正确性。

  • 低价值

    数据价值密度相对较低,或者说是浪里淘沙却又弥足珍贵

    互联网发展催生了大量数据,信息海量,但价值密度较低,如何结合业务逻辑并通过强大的机器算法来挖掘数据价值,是大数据时代最需要解决的问题,也是一个有难度的课题。

随着大数据的发展,大数据技术已经广泛应用在众多行业,比如仓储物流、电商零售、汽车、电信、生物医学、人工智能、智慧城市等等领域,包括在疫情防控战中,大数据技术也发挥了重要的作用:

  • 仓储物流

    大数据技术驱动了仓储物流领域的智能化发展,以苏宁为例,苏宁物流可在全国的各级仓库间实现智能分仓、就近备货和预测式调拨,实现“客户需要的商品就在离客户最近的配送中心”。

  • 电商零售

    - 零售业“啤酒+纸尿裤”案例

    - 个性推荐

    - “双11购物节”实时销售额大屏

  • 汽车

    利用了大数据和物联网技术的无人驾驶汽车,在不远的未来将走入我们的日常生活。

  • 电信

    移动联通根据用户年龄、职业、消费情况,分析统计哪种套餐适合哪类人群,对市场人群精准定制。

  • 生物医学

    大数据可以帮助我们实现流行病预测、智慧医疗、健康管理,同时还可以帮助我们解读DNA,了解更多的生命奥秘。比如影像大数据支撑下的早期肺癌支撑平台,基于大量病例数据样本,制定早期肺癌高危人群预警指标。

  • 人工智能

    人工智能的基础上就是大数据,在大量数据训练的基础上得到“经验”。

    典型的例子是AlphaGo战胜人类棋手,因为AlphaGo已经经过了大量的下棋训练,训练得到了“下棋经验”。

  • 智慧城市

    大数据有效支撑智慧城市发展,成为城市的”数据大脑“。比如,在智慧城市建设上,杭州始终走在全国前列。如覆盖面广的移动支付、新颖的在线医疗模式、创新的物流运输模式,都受到较大关注。

大数据的价值,远远不止于此,大数据对各行各业的渗透,大大推动了社会生产和生活,未来必将产生重大而深远的影响。

(3)大数据发展趋势及从业人员发展路线

大数据行业发展趋势的两个层面:

(1)国家政策层面

  1. 2015年党的十八届五中全会提出“实施国家大数据战略”,国务院印发《促进大数据发展行动纲要》,大数据技术和应用处于创新突破期,国内市场需求处于爆发期,我国大数据产业面临重要的发展机遇。

  2. 2017年十九大报告明确 “推动互联网、大数据、人工智能和实体经济深度融合”。

  3. 2020年全国政协十三届三次会议新闻发布会上,更进一步强调:大数据、人工智能、5G是引领未来发展的战略性技术。

显然,发展大数据是我国的战略性决策,前景自然不言而喻。

(2)高校教育和就业层面

  1. 2017年北京大学、中国人民大学、北京邮电大学等25所高校成功申请开设大数据课程

  2. 大数据属于高新技术,大牛少,升职竞争小

  3. 2020年5月6日,人力资源和社会保障部发布《新职业—大数据工程技术人员就业景气现状分析报告》,报告显示:预计2020年中国大数据行业人才需求规模将达210万,2025年前大数据人才需求仍将保持30%~40%的增速,需求总量在2000万人左右。

  4. 在北京大数据开发工程师的平均薪水已经超越 1.5w 直逼2w,而且目前还保持强劲的发展势头。

大数据职业发展路线:

目前大数据高、中、低三个档次的人才都很缺。 现在我们谈大数据,就像当年谈电商一样,未来前景已经很明确,接下来就是优胜劣汰,竞争上岗。不想当架构师的程序员不是好程序员!

大数据发展到现阶段,涉及大数据相关的职业岗位也越来越精细。从职业发展来看,由大数据开发、挖掘、算法、到架构。从级别来看,从工程师、高级工程师,再到架构师,甚至到科学家。而且,契合不同的行业领域,又有专属于这些行业的岗位衍生,如涉及金融领域的数据分析师等。

大数据的相关工作岗位有很多,有数据分析师、数据挖掘工程师、大数据开发工程师、大数据产品经理、可视化工程师、爬虫工程师、大数据运营经理、大数据架构师、数据科学家等
等。

从事大数据岗位包括:

  • ETL工程师—数据清洗

  • 数据仓库工程师—数据仓库搭建

  • 实时流处理工程师

  • 用户画像工程师

  • 数据挖掘

  • 算法工程师

  • 推荐系统工程

2.Hadoop简介

Hadoop 是一个适合大数据的分布式存储和计算平台
前面已经提到,狭义上说Hadoop就是一个框架平台,广义上讲Hadoop代表大数据的一个技术生态圈,包括很多其他软件框架,如下:

Hadoop生态圈技术栈
Hadoop(HDFS + MapReduce + Yarn)
Hive 数据仓库工具
HBase 海量列式非关系型数据库
Flume 数据采集工具
Sqoop ETL工具
Kafka 高吞吐消息中间件
……

Hadoop 的发展历程如下:

Nutch —> Google论文(GFS、MapReduce)
—> Hadoop产生
—> 成为Apache顶级项目
—> Cloudera公司成立(Hadoop快速发展)

(1)Hadoop最早起源于Nutch,创始人是Doug Cutting

Nutch 是一个开源 Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。

(2)2003年、2004年谷歌发表的两篇论文为该问题提供了可行的解决方案:

GFS,可用于处理海量网页的存储;

MapReduce,可用于处理海量网页的索引计算问题。

其中,Google的三篇论文(三驾马车)分别是:

  • GFS:Google的分布式文件系统(Google File System)

  • MapReduce:Google的分布式计算框架

  • BigTable:大型分布式数据库

发展演变关系:

  • GFS —> HDFS

  • oogle MapReduce —> Hadoop MapReduce

  • BigTable —> HBase

随后,Google公布了部分GFS和MapReduce思想的细节,Doug Cutting等人用2年的业余时间实现了DFS和MapReduce机制,使Nutch性能飙升。

(3)2005年,Hadoop 作为Lucene的子项目Nutch的一部分引入Apache。

(4)2006年,Hadoop从Nutch剥离出来独立。

(5)2008年,Hadoop成为Apache的顶级项目。

Hadoop名字来源于Hadoop之父Doug Cutting儿子的毛绒玩具象:

Hadoop的特点如下:

Hadoop的发行版本指不同的分支:

目前Hadoop发行版非常多,有Cloudera发行版(CDH)、Hortonworks发行版、华为发行版、Intel发行版等,所有这些发行版均是基于Apache Hadoop衍生出来的,之所以有这么多的版本,是由Apache Hadoop的开源协议决定的(任何人可以对其进行修改,并作为开源或商业产品发布/销售)。

企业中主要用到的三个版本分别是:Apache Hadoop版本(最原始的,所有发行版均基于这个版本进行改进)、Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称“CDH”)、Hortonworks版本(Hortonworks Data Platform,简称“HDP”)。

分别如下:

  • Apache Hadoop

    原始版本,学习环境使用。
    官网地址:http://hadoop.apache.org/

    优点:拥有全世界的开源贡献,代码更新版本比较快,学习非常方便;

    缺点:版本的升级,版本的维护,以及版本之间的兼容性
    

    Apache所有软件的下载地址(包括各种历史版本):

    http://archive.apache.org/dist/

  • 软件收费版本ClouderaManager

    CDH版本,生产环境使用。

    官网地址:https://www.cloudera.com/

    Cloudera主要是美国一家大数据公司,在Apache开源Hadoop的版本上,通过自己公司内部的各种补丁,实现版本之间的稳定运行,大数据生态圈的各个版本的软件都提供了对应的版本,解决了版本的升级困难,版本兼容性等各种问题,生产环境强烈推荐使用。

  • 免费开源版本HortonWorks

    HDP版本,生产环境使用。

    官网地址:https://hortonworks.com/

    hortonworks主要是雅虎主导Hadoop开发的副总裁,带领二十几个核心成员成立Hortonworks,核心产品软件HDP(ambari),HDF免费开源,并且提供一整套的web管理界面,供我们可以通过web界面管理我们的集群状态。

    web管理界面软件HDF网址:http://ambari.apache.org/

    因为HortonWorks已经被Cloudera收购,所以HDP的使用也可能会逐渐减少,商用以CDH为主。

目前使用Apache Hadoop,其版本更迭如下:

  1. 0.x 系列版本:Hadoop当中最早的一个开源版本,在此基础上演变而来的1.x以及2.x的版本;

  2. 1.x 版本系列:Hadoop版本当中的第二代开源版本,主要修复0.x版本的一些bug等;

  3. 2.x 版本系列:架构产生重大变化,引入了yarn平台等许多新特性;

  4. 3.x 版本系列:EC技术、Yarn的时间轴服务等新特性。

3.Hadoop的重要组成

狭义的Hadoop由四部分组成:

  • HDFS(分布式文件系统)

  • MapReduce(分布式计算框架)

  • Yarn(资源协调框架)

  • Common模块

(1)HDFS(Hadoop Distribute File System )——高可靠、高吞吐量的分布式文件系统

HDFS的思想是分而治之,主要功能如下:

  • 数据切割

    将海量数据进行拆分,以保证可以在单台机器上进行保存。

    例如100T数据拆分为10G一个数据块由一个电脑节点存储这个数据块。

  • 制作副本

    由于电脑可能出现宕机的情况,所以需要制作副本,让另外的电脑也保存相同的数据。

  • 分散储存

    将数据切割后,分散存储在不同的机器上,同时在另外的机器上有相同数据的副本。

图示如下:

HDFS属于Master/Slave(主从架构):

  • NameNode(nn)

    属于Master节点,主要负责管理和维护元数据:

    存储文件的元数据,元数据记录了文件名、文件目录结构、文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode节点信息等。
    

  • SecondaryNameNode(2nn)

    辅助NameNode管理和维护元数据,用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据快照。

  • DataNode(dn)

    属于Slave节点,负责存储文件数据块:

    在本地文件系统存储文件块数据,以及块数据的校验
    

其中,NN、2NN、DN既是角色名称、进程名称,也代指电脑节点名称。

HDFS存入过程:

对于大数据进行拆分(切割)得到数据块,可能得到多个数据块,由多个DataNode进行存储。

HDFS获取文件过程:

向NameNode请求获取到之前存入文件的块以及块所在的DataNode的信息,分别下载并最终合并,就得到之前的文件。

(2)Hadoop MapReduce——一个分布式的离线并行计算框架

MapReduce的思想也是分而治之,主要功能如下:

  • 拆解任务

    将数据进行切分,得到切片。

  • 分散处理

  • 汇整结果

图示如下:

M a p R e d u c e 计 算 = M a p 阶 段 + R e d u c e 阶 段 MapReduce计算 = Map阶段 + Reduce阶段 MapReduce=Map+Reduce

  • Map阶段就是“分”的阶段

    将数据切分到多个节点后,多个节点并行处理 输入数据,即每个节点负责一份数据的计算,并得到部分结果。

  • Reduce阶段就是“合”的阶段

    对Map阶段的输出结果进行汇总,得到全局的结果。

(3)Hadoop Yarn——作业调度与集群资源管理的框架

Yarn负责集群中计算资源的分配和作业任务的调度:

Yarn架构也是主从架构主要角色如下:

  • ResourceManager(rm)

    是Master,处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度。

  • NodeManager(nm)

    是Slave,单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令。

  • ApplicationMaster(am)

    是计算任务专员,数据切分、为应用程序(任务)申请资源,并分配给内部任务、任务监控与容错。

  • Container

    对任务运行环境的抽象,一个Container负责一个Task,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息,可以理解为虚拟资源集合或小型计算机。

(4)Hadoop Common——支持其他模块的工具模块

包括以下几部分:

  • Configuration

    公共的配置,包括集群节点、节点资源、IP、主机名、参数等配置项

  • RPC

    远程过程调用,是分布式框架中多个节点之间进行网络通讯的首选方式,高效、稳定、安全,Hadoop中实现了Hadoop RPC框架。

  • 序列化机制

  • 日志操作

4.Apache Hadoop 完全分布式集群搭建

(1)虚拟机环境准备

Hadoop框架是采用Java语言编写的,所以需要Java环境(JVM)才能运行,即虚拟机中必须安装JDK,同时必须使用JDK8版本,而不能使用更高的版本,因为在编写Hadoop时使用的就不是JDK8以上的版本。

之前在虚拟机上安装的就是jdk-8u231-linux-x64。

Hadoop搭建的方式包括3种:

  • 单机模式

    单节点、不是集群,生产不会使用这种模式。

  • 单机伪分布式模式

    单节点、多线程模拟集群的效果,因为发挥的也只是一台电脑的性能,因此生产中不会使用。

  • 完全分布式模式

    多台节点,真正的分布式Hadoop集群的搭建,生产环境建议使用这种方式。

完全分布式集群需要多台电脑,目前可以使用VMWare软件虚拟三台Linux节点,同时建议系统选择CentOS 7,之前已经准备好了,同时已经完成静态IP配置、关闭防火墙、修改主机名、配置免密登录和集群时间同步等操作。

之前已经在虚拟机中安装好了JDK和Tomcat,并且是将它们安装在/opt/software目录下的,将Hadoop安装到相同的目录。

在安装之前需要下载Hadoop的安装包,可以到https://hadoop.apache.org/releases.html下载最新版,也可以在https://archive.apache.org/dist/hadoop/common/中选择合适的版本进行下载,这里选择2.9.2版本。

可以先点击https://archive.apache.org/dist/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz下载到本地,再使用工具上传到虚拟机的/opt/software目录下,也可以直接在虚拟机的/opt/software目录下执行wget https://archive.apache.org/dist/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz进行下载,可以根据需要选择。

在使用时,可以参考Hadoop官方文档https://hadoop.apache.org/docs/r2.9.2/

(2)环境变量配置

现在进行集群规划,对3台虚拟机的角色分布如下:

框架node01node02node03
HDFSNameNode、DataNodeDataNodeSecondaryNameNode、DataNode
YarnNodeManagerNodeManagerNodeManager、ResourceManager

以node01为NameNode,所以也只需要在这一台机器下载安装Hadoop。

现在在node01上安装Hadoop:

(1)解压文件

进入software目录cd /opt/software,解压之前上传的Hadoop安装包tar -xzvf hadoop-2.9.2.tar.gz,再将安装包移动到package目录mv hadoop-2.9.2.tar.gz ../packages/,查看software目录:

[root@node01 software]$ ll -ht
总用量 0
drwxr-xr-x. 3 root root     69 820 14:22 tomcat
drwxr-xr-x. 3 root root     26 820 14:09 java
drwxr-xr-x  9  501 dialout 149 1113 2018 hadoop-2.9.2

hadoop-2.9.2就是安装的目录。

(2)配置环境变量

编辑profile文件vim /etc/profile,添加Hadoop到环境变量,在末尾添加如下内容即可:

# HADOOP_HOME
export HADOOP_HOME=/opt/software/hadoop-2.9.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

其中,安装路径/opt/software/hadoop-2.9.2可以根据自己的需要进行修改;

保存退出后,再执行source /etc/profile使环境变量生效。

可以使用hadoop version命令验证Hadoop是否安装成功,如输出类似如下,则说明安装成功:

[root@node01 software]$ hadoop version
Hadoop 2.9.2
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 826afbeae31ca687bc2f8471dc841b66ed2c6704
Compiled by ajisaka on 2018-11-13T12:42Z
Compiled with protoc 2.5.0
From source with checksum 3a9939967262218aa556c684d107985
This command was run using /opt/software/hadoop-2.9.2/share/hadoop/common/hadoop-common-2.9.2.jar

在安装成功之后,可以查看Hadoop的安装目录,如下:

[root@node01 software]$ cd hadoop-2.9.2/
[root@node01 hadoop-2.9.2]$ ll -ht
总用量 128K
drwxr-xr-x 2 501 dialout  106 1113 2018 include
drwxr-xr-x 2 501 dialout  194 1113 2018 bin
drwxr-xr-x 2 501 dialout  239 1113 2018 libexec
drwxr-xr-x 3 501 dialout 4.0K 1113 2018 sbin
drwxr-xr-x 3 501 dialout   20 1113 2018 etc
drwxr-xr-x 3 501 dialout   20 1113 2018 lib
-rw-r--r-- 1 501 dialout 104K 1113 2018 LICENSE.txt
-rw-r--r-- 1 501 dialout  16K 1113 2018 NOTICE.txt
-rw-r--r-- 1 501 dialout 1.4K 1113 2018 README.txt
drwxr-xr-x 4 501 dialout   31 1113 2018 share

可以看到,此时各个目录的属主和属组是501和dialout,而之后都是使用root用户来进行Hadoop集群的相关操作,同时需要分发到其他节点,为了保证属主和属组都正常、避免出现信息混乱,因此这里需要修改Hadoop安装目录所属用户和用户组,执行命令chown -R root:root /opt/software/hadoop-2.9.2/,执行后再查看,如下:

[root@node01 hadoop-2.9.2]$ ll .. -ht
总用量 0
drwxr-xr-x. 3 root root  69 820 14:22 tomcat
drwxr-xr-x. 3 root root  26 820 14:09 java
drwxr-xr-x  9 root root 149 1113 2018 hadoop-2.9.2
[root@node01 hadoop-2.9.2]$ ll -ht
总用量 128K
drwxr-xr-x 2 root root  106 1113 2018 include
drwxr-xr-x 2 root root  194 1113 2018 bin
drwxr-xr-x 2 root root  239 1113 2018 libexec
drwxr-xr-x 3 root root 4.0K 1113 2018 sbin
drwxr-xr-x 3 root root   20 1113 2018 etc
drwxr-xr-x 3 root root   20 1113 2018 lib
-rw-r--r-- 1 root root 104K 1113 2018 LICENSE.txt
-rw-r--r-- 1 root root  16K 1113 2018 NOTICE.txt
-rw-r--r-- 1 root root 1.4K 1113 2018 README.txt
drwxr-xr-x 4 root root   31 1113 2018 share

可以看到,此时Hadoop安装目录的各个子目录的属主和数组已经修改。

安装目录中各个部分的含义如下:

  • bin目录

    对Hadoop进行操作的相关命令,如hadoop、hdfs等,如下:

./bin/
├── container-executor
├── hadoop
├── hadoop.cmd
├── hdfs
├── hdfs.cmd
├── mapred
├── mapred.cmd
├── rcc
├── test-container-executor
├── yarn
└── yarn.cmd

    其中,以.cmd结尾的是在Windows上使用的,其他是在Linux上使用的,包含了hadoop、hdfs和yarn,因为之前将该目录配置到了环境变量,所以可以执行hadoop version命令。

  • etc目录

    Hadoop的配置文件目录,如hdfs-site.xml、core-site.xml等。

  • lib目录

    Hadoop本地库(解压缩的依赖)。

  • libexec目录

    针对本地操作系统的依赖库。

  • include目录

    包含了jar包。

  • sbin目录

    存放的是Hadoop集群启动和停止的相关脚本、命令,如下:

./sbin/
├── distribute-exclude.sh
├── FederationStateStore
│   ├── MySQL
│   │   ├── dropDatabase.sql
│   │   ├── dropStoreProcedures.sql
│   │   ├── dropTables.sql
│   │   ├── dropUser.sql
│   │   ├── FederationStateStoreDatabase.sql
│   │   ├── FederationStateStoreStoredProcs.sql
│   │   ├── FederationStateStoreTables.sql
│   │   └── FederationStateStoreUser.sql
│   └── SQLServer
│       ├── FederationStateStoreStoreProcs.sql
│       └── FederationStateStoreTables.sql
├── hadoop-daemon.sh
├── hadoop-daemons.sh
├── hdfs-config.cmd
├── hdfs-config.sh
├── httpfs.sh
├── kms.sh
├── mr-jobhistory-daemon.sh
├── refresh-namenodes.sh
├── slaves.sh
├── start-all.cmd
├── start-all.sh
├── start-balancer.sh
├── start-dfs.cmd
├── start-dfs.sh
├── start-secure-dns.sh
├── start-yarn.cmd
├── start-yarn.sh
├── stop-all.cmd
├── stop-all.sh
├── stop-balancer.sh
├── stop-dfs.cmd
├── stop-dfs.sh
├── stop-secure-dns.sh
├── stop-yarn.cmd
├── stop-yarn.sh
├── yarn-daemon.sh
└── yarn-daemons.sh

    包含了sh和cmd文件。

  • share目录

    Hadoop的一些依赖jar、公开文档和官方案例等。

(3)集群规划实施

这里选择先在node01节点把所有配置项配置完成后,再将配置分发给其他节点,来保证所有结点的配置是统一的。

Hadoop集群配置包括三部分:

  • HDFS集群配置

  • MapReduce集群配置

  • Yarn集群配置

先在node01节点进行HDFS集群配置,步骤如下:

(1)将JDK路径明确配置给HDFS——修改hadoop-env.sh

在Hadoop安装目录进入Hadoop配置文件目录cd etc/hadoop/,可以看到配置文件:

.
├── capacity-scheduler.xml
├── configuration.xsl
├── container-executor.cfg
├── core-site.xml
├── hadoop-env.cmd
├── hadoop-env.sh
├── hadoop-metrics2.properties
├── hadoop-metrics.properties
├── hadoop-policy.xml
├── hdfs-site.xml
├── httpfs-env.sh
├── httpfs-log4j.properties
├── httpfs-signature.secret
├── httpfs-site.xml
├── kms-acls.xml
├── kms-env.sh
├── kms-log4j.properties
├── kms-site.xml
├── log4j.properties
├── mapred-env.cmd
├── mapred-env.sh
├── mapred-queues.xml.template
├── mapred-site.xml.template
├── slaves
├── ssl-client.xml.example
├── ssl-server.xml.example
├── yarn-env.cmd
├── yarn-env.sh
└── yarn-site.xml


修改hadoop-env.shvim hadoop-env.sh指定JDK安装路径,如下:

# The java implementation to use.
# export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/opt/software/java/jdk1.8.0_231

其中,JDK安装路径可以通过echo $JAVA_HOME命令获取;

保存退出。

(2)指定NameNode节点以及数据存储目录——修改core-site.xml

修改core-site.xmlvim core-site.xml,如下:

<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://node01:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/software/hadoop-2.9.2/data/tmp</value>
</property>
</configuration>

其中,配置项需要放到core-site.xml文件中的configuration标签中,配置才会生效;

Hadoop对于XML配置文件都有默认配置,配置项的含义可以从文档https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-common/core-default.xml中进行查询:例如fs.defaultFS配置项是配置文件系统的名称,配置值是一个 URI,用于确定文件系统的主机、端口等;hadoop.tmp.dir配置项是其他临时目录的基础。

保存后退出。

(3)指定SecondaryNameNode节点——修改hdfs-site.xml

编辑hdfs-site.xmlvim hdfs-site.xml,如下:

<configuration>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node03:50090</value>
</property>
<!--副本数量 -->
<property>
        <name>dfs.replication</name>
        <value>3</value>
</property>
</configuration>

其中,指定了副本数量后,每个数据块有3个副本;

也可以在https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml中查看默认配置;

保存后退出。

(4)指定DataNode从节点——修改etc/hadoop/slaves文件,每个节点配置信息占一行)

编辑slavesvim slaves,如下:

node01
node02
node03

需要确保本文件中每一行结尾不允许有空格、只有节点主机名,同时文件中不允许有空行,否则读取配置时无法识别。

再进行MapReduce集群配置:

(1)将JDK路径明确配置给MapReduce——修改mapred-env.sh

编辑mapred-env.shvim mapred-env.sh如下:

# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/opt/software/java/jdk1.8.0_231

保存退出。

(2)指定MapReduce计算框架运行Yarn资源调度框架——修改mapred-site.xml

修改mapred-site.xml配置文件名cp mapred-site.xml.template mapred-site.xml,再编辑mapred-site.xmlvim mapred-site.xml,如下:

<configuration>
<!-- 指定MR运行在Yarn上 -->
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
</configuration>

mapred-site.xml默认配置可参考https://hadoop.apache.org/docs/r2.9.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

保存退出。

最后进行Yarn集群配置:

(1)将JDK路径明确配置给Yarn——修改yarn-env.sh

修改yarn-env.shvim yarn-env.sh,如下:

# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/opt/software/java/jdk1.8.0_231

保存退出。

(2)指定ResourceManager老大节点所在计算机节点——修改yarn-site.xml

编辑yarn-site.xmlvim yarn-site.xml,如下:

<configuration>

<!-- Site specific YARN configuration properties -->
<!-- 指定YARN的ResourceManager的地址 -->
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node03</value>
</property>
<!-- Reducer获取数据的方式 -->
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
</configuration>

其中,默认配置可查看https://hadoop.apache.org/docs/r2.9.2/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

保存退出。

(3)指定NodeManager节点——通过slaves文件内容确定

一个DataNode就对应一个NodeManager,所以前面已经配置过slaves文件,所以这里可以省略。

(4)编写集群分发脚本

现在需要进行集群分发,即将Hadoop安装目录(包括已经配置好的配置文件)可以使用scp,这里选择使用rsync。

rsync远程同步工具主要用于备份和镜像,具有速度快、避免复制相同内容和支持符号链接的优点。

rsync和scp区别如下:

用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新

scp是把所有文件都复制过去,所以效率较低。

(1)3台虚拟机安装

# 命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
rsync  -rvl   $pdir/$fname     $user@$host:$pdir/$fname

其中,各选项含义如下:

选项功能
-r递归
-v显示复制过程
-l拷贝符号连接

先使用rsync实现拷贝目录:

(1)3台虚拟机安装rsync

在连接工具中同时连接3台虚拟机,再选择发送到全部会话 执行yum install -y rsync,即可一次性在3台虚拟机安装rsync。

(2)测试rsync,把node01节点的/opt/packages目录同步到node02节点的root用户下的/opt/目录下

# 虚拟机node01执行rsync命令
[root@node01 ~]$ rsync -ivl /opt/packages/ root@node02:/opt/packages
skipping directory .

sent 16 bytes  received 12 bytes  18.67 bytes/sec
total size is 0  speedup is 0.00
[root@node01 ~]$ rsync -rvl /opt/packages/ root@node02:/opt/packages
sending incremental file list
created directory /opt/packages
./
apache-tomcat-7.0.57.tar.gz
hadoop-2.9.2.tar.gz
jdk-8u231-linux-x64.tar.gz

sent 569,638,685 bytes  received 112 bytes  30,791,286.32 bytes/sec
total size is 569,499,359  speedup is 1.00
# 虚拟机node02查看
[root@node02 opt]$ ls /opt/
packages  software
[root@node02 opt]$ ll /opt/packages/
总用量 556156
-rw-r--r-- 1 root root   8900571 825 10:28 apache-tomcat-7.0.57.tar.gz
-rw-r--r-- 1 root root 366447449 825 10:28 hadoop-2.9.2.tar.gz
-rwxr-xr-x 1 root root 194151339 825 10:28 jdk-8u231-linux-x64.tar.gz


可以看到,已经将packages目录及其内部的文件拷贝到node02节点。

节点比较少的时候,直接执行命令进行拷贝是可以的,但是如果节点很多,一一执行命令效率就很低了,此时就可以编写集群分发脚本来实现循环复制文件到集群所有节点的相同目录下。

期望的目标是直接执行脚本 要同步的文件名称命令就能实现高效分发,同时将脚本放在/usr/local/bin目录下,方便root用户在系统任何地方直接执行。

node01节点脚本实现的步骤如下:

(1)切换目录并编辑文件

切换到/usr/local/bin目录cd /usr/local/bin/,编辑脚本文件vim rsync-script,如下:

#!/bin/bash

# 1.获取传入脚本的参数,包括参数个数和参数值
paramnum=$#

if ((paramnum==以上是关于大数据开发基础入门与项目实战Hadoop核心及生态圈技术栈之1.Hadoop简介及Apache Hadoop完全分布式集群搭建的主要内容,如果未能解决你的问题,请参考以下文章

大数据零基础学习hadoop入门教程

Hadoop基础与电商行为日志分析 新手入门大数据

Hadoop基础与电商行为日志分析 新手入门大数据

Hive 常用函数入门

以道教育大数据课程都讲啥

Hive 常用函数入门Apache Hadoop概述