Day02 :Hadoop 2.x框架核心:集群环境搭建、HDFS文件系统和MapReduce计算框架

    技术2022-07-10  133

    一、课程内容提纲 今天内容主要了解Hadoop 2.x框架核心:集群环境搭建、HDFS文件系统和MapReduce计算框架。

    1、了解Hadoop 2.x框架发展史 2、Hadoop 2.x框架核心模块 3、构建分布式Hadoop 2.x集群构建 4、测试搭建环境 5、HDFS分布式文件系统基本知识 6、MapReduce计算框架计算模型思想

    二、分布式与集群概念 大数据技术框架,基本上框架定义与概念,发现一个词: 分布式的、集群的 ,首先看看到底什么是分布式,什么是集群,有什么区别呢??

    1、概念一:分布式(Distributed) 多台机器组成(多个服务器组建) 分布式:一个业务分拆多个子业务,部署在不同的服务器上

    分布式表示每台服务器部署服务是不一样的,提供不同的服务功能,缓解以前集中式部署单机压力。

    2、概念二:集群(Cluster) 多台机器组成(多个服务器组建) 集群:同一个业务,部署在多个服务器上集群表示的是多台机器完成相同任务的事情,比如网站访问。

    集群表示的是多台机器完成相同任务的事情,比如网站访问。

    三、Hadoop 大数据框架 大数据基础框架就是Hadoop框架,然而都知道从Google 论文发展而来。

    1、Google 三大论文 三篇论文,构建大数据框架基础:

    论文一: GFS(Google FileSystem) 2003年Google发布分布式文件系统论文,使用C++语言编写框架 | Doug Cutting NFS(Nutch FileSystem) | 发布开源 HDFS

    论文二: MapReduce 2004年Google发布MapReduce并行计算框架,使用C++语言编写框架 | Doug Cutting MapReduce

    论文三: BigTable(大表) 2005年Google发布BigTable分布式数据库 - Chubby | HBase - 涵盖Zookeeper

    为什么Google需要这个三个框架呢?主要功能做什么的呢?为什么论文发布以后,编写框架呢???

    由于Doug Cutting开发Nutch搜索引擎框架,面临海量数据存储和分析,Google发布论文以后,可以实现完成需求,使用Java语言实现三篇论文。

    Hadoop框架一开始属于Nutch中一部分,其中HDFS称为NFS,MapReduce还是称为 MapReduce。

    2008年1月,HADOOP成为Apache顶级项目(同年,cloudera公司成立),迎来了它的快速发展期。

    2、Hadoop 发行版本 随着Hadoop框架出现,成为Apache顶级项目,有很多商业公司将其进行商业化,对其进行封装企业化操作,讲解开源处理,但是提供服务时是收费,至此有三家比较出名公司。

    1、免费开源版【Apache】 拥有全世界的开源贡献者,代码更新迭代版本比较快版本的升级,版本的维护,版本的兼容性,版本的补丁都可能考虑不太周到,学习可以用,实际生产工作环境尽量不要使用 下载地址: http://archive.apache.org/dist/ 2、免费开源版【Cloudera】 cloudera主要是美国一家大数据公司在apache开源hadoop的版本上,通过自己公司内部的各种补丁,实现版本之间的稳定运行,大数据生态圈的各个版本的软件都提供了对应的版本,解决了版本的升级困难,版本兼容性等各种问题,生产环境强烈推荐使用 下载地址: http://archive.cloudera.com/cdh5/cdh/5/ 3、免费开源【HortonWorks】 雅虎主导Hadoop开发的副总裁,带领二十几个核心成员成立Hortonworks,核心产品软件HDP(ambari),HDF免费开源,并且提供一整套的web管理界面,供我们可以通过web界面管理我们的集群状态,web管理界面软件HDF网址(http://ambari.apache.org/) 下载地址: https://hortonworks.com/

    在实际项目中使用最多的就是CDH版本HADOOP,其次就是HDP版本HADOOP,Apache原生态开源版本几乎没有人使用,如果企业使用的话, 只能说明他们很Low,很不Professional。

    3、HDFS 分布式文件系统 HDFS文件系统属于分布式架构,分为主节点Master和从节点Slaves。

    1、主机点Master:NameNode 管理文件系统元数据(命名空间),比如文件名称,划分block,block存储位置等等 管理者 2、从节点Slaves:DataNodes 真正存储数据地方 小兵,干活的

    HDFS文件系统存储数据如下图所示:

    在实际项目中,安装部署HDFS文件系统时,NameNode和DataNode放在不同机器上运行。 4、MapReduce 并行计算框架 核心点: 分而治之 ,两个步骤:分Map、合Reduce。

    1、Map Task Map Task任务处理数据,处理的数据仅仅是一部分,数据量比较小 2、Reduce Task 将Map Task任务处理结果进行合并操作

    上图中所有的MapTask任务(只要机器的资源充分情况下)可以同时并行运行,计算处理数据。

    Hadoop框架诞生的时候,就是针对海量数据存储和分析: 1)、海量数据存储:HDFS,将数据划分为block,存储不同机器上 2)、海量数据分析:MapReduce,将数据划分很多部分,每个部分数据使用MapTask计算 分析,最终ReduceTask合并结果。

    5、YARN 分布式集群资源调度系统 到Hadoop 2.x发布时,出现集群资源调度系统:YARN,管理集群资源,分配资源运行应用程序的。

    分布式架构,分为主节点Master和从节点Slaves: 1、主机点Master:ResourceManager 管理整个集群资源,资源包含:内存Memory、CPU Core核数 分配资源给运行应用 2、从节点Slaves:NodeManagers 管理每个节点(机器)资源,资源包含:内存Memory、CPU Core核数 按照主节点ResourceManager指示,运行应用中Task任务。

    所以说YARN框架管理整个集群资源,可以提供不同应用运行,YARN都会分配资源,比如说 运行MR应用、Spark应用和Flink应用。

    接下来,YARN框架如下运行提交应用程序的呢??? 以运行MapReduce程序为例讲解,画图演示

    其中注意两点: 1)、每个应用都有一个管理者:AppMaster 2)、无论是AppMaster还是Task都是运行在NodeManager中容器Contanier中,封装资源

    四、搭建Hadoop 2.x 分布式集群

    前面已经说明Hadoop 2.x框架包含三个模块:HDFS、YARN、MapReduce。

    搭建分布式集群,具体步骤如下所示: 1、规划集群机器 2、集群基础环境准备 3、搭建Hadoop 2.x集群

    1)、HDFS 集群 2)、YARN 集群 3)、配置MR运行模式 针对分布式集群安装部署来说,每台服务器安装软件版本和目录必须要一致,不能不同。

    1、规划集群机器 使用三台虚拟机搭建集群,主机名称:node01、node02和node03

    主机名称/组件node01node02node03HDFS 集群NameNodeDataNodeDataNodeDataNodeYARN 集群ResourceManagerNodeManagerNodeManagerNodeManagerMapReduceMRJobHistoryServer

    将MapReduce应用程序运行到YARN集群上,当运行完成以后,需要监控应用运行状态,如果运行失败,需要查看失败原因(查看日志信息),所以需要启动MapReduce 历史服务器,专门用于查看运行完成应用。

    2、集群基础环境准备

    当规划海集群机器及服务安装位置以后,需要对集群环境进行初始化准备。

    1、配置主机名称、IP地址及映射 已经完成(提供虚拟机) hostname ifconfig /etc/hosts 2、配置主机SSH无密钥登录 已经完成(提供虚拟机) ssh node01 ssh node02 ssh node03 3、关闭防火墙及禁用SELINUX 已经完成(提供虚拟机) service iptables status more /etc/sysconfig/selinux 4、安装JDK,此处使用JDK8 hadoop 框架使用Java编写的,运行服务都是JVM进程,所以需要按照JDK。

    1.修改/etc/sysconfig/network,追加: echo "NETWORKING_IPV6=no" >>/etc/sysconfig/network 2.修改/etc/hosts,把ipv6的那句本地主机名解析的也注释掉: #::1 localhost localhost6 localhost6.localdomain6 3./etc/modprobe.d/dist.conf结尾添加: echo "alias net-pf-10 off" >>/etc/modprobe.d/dist.conf echo "alias ipv6 off" >>/etc/modprobe.d/dist.conf 4、重启系统 reboot 5、查看网卡 ip a

    在实际项目中,将系统IPv6给以禁用。

    在CentOS 6.x上安装JDK 1.8,具体操作步骤命令如下:

    1)、查看是否已经安装JDK,如果安装就卸载 CentOS 6.x默认安装OpenJDK,所以需要卸载 rpm -qa|grep java ================================ node01 上操作 ================================ 2)、上传jdk软件至/export/softwares目录 使用rz上传 3)、赋予执行权限 chmod u+x jdk-8u144-linux-x64.tar.gz 4)、解压至/export/servers目录 tar -zxf jdk-8u144-linux-x64.tar.gz -C /export/servers/ 5)、创建软连接(Window快捷方式) cd /export/servers/jdk1.8.0_144/ ln -s jdk1.8.0_144 jdk 6)、配置环境变量 vim /etc/profile 添加内容: # JAVA HOME export JAVA_HOME=/export/servers/jdk export PATH=:$PATH:$JAVA_HOME/bin 使其生效: source /etc/profile 7)、验证 java -version java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode) 8)、分发JDK安装包至node02和node03 scp -r jdk1.8.0_144 root@node02:/export/servers/ scp -r jdk1.8.0_144 root@node03:/export/servers/ ln -s /export/servers /jdk1.8.0_144 /export/servers/jdk 配置环境变量,类似node01

    为什么创建软连接呢???

    创建软连接好处在于后期方便升级软件的版本,最大好处,希望记住。

    3、搭建Hadoop 2.x集群

    参考教案即可。 教案:

    编辑配置文件时,使用远程编辑工具:Notepad++,具体操作如下: 创建连接,添加相关连接信息,如下图所示:

    回顾总结配置哪些文件,通过思维导图展示:

    为什么说【slaves】配置文件指定DataNode和NodeManager运行的机器呢??

    分析问题: 一台机器核心资源就是:内存Memory、CPU Core核数及硬盘Disk,恰好DataNode存储数据需要Disk,NodeManager运行任务需要Memory和CPU Core核数,所以一台机器既可以是DataNode节点,又可以是NodeManager节点,充分利用资源进行存储和计算数据。

    4、启动集群服务 先启动HDFS文件系统服务、再启动YARN服务,最后启动MRJobHistoryServer服务。 4.1、启动HDFS服务

    第一步、由于第一次启动HDFS服务,所以需要对文件系统进行初始化(格式化操作) 在node01上,NameNode安装在此台机器 hdfsnamenode -format 当没有出现任何错误,说明初始化OK,否则查看异常信息,进行解决 第二步、启动NameNode服务 在node01上启动 hadoop-daemon.sh start namenode

    第三步、启动DataNodes服务 在node01上启动 hadoop-daemons.sh start datanode

    第四步、WEB UI访问 NameNode提供WEB UI界面,用于访问HDFs文件系统 http://node01:50070

    4.2、启动YARN服务 启动YARN服务与启动HDFs服务类似,只不过不需要格式任何东西。

    第一步、启动ResourceManager服务 在node01上启动,RM服务在node01上 yarn-daemon.sh start resourcemanager

    第二步、启动NodeManagers服务 在node01上启动

    第三步、WEB UI访问 RM提供WEB UI界面,端口为8088 http://node01:8088

    4.3、启动历史服务器 启动MapReduce 历史服务器,主要用于监控运行完成MapReduce程序,命令如下:

    mr-jobhistory-daemon.sh start historyserver

    提供WEB UI界面,端口号19888 地址为:http://node01:19888

    5、测试验证集群

    HDFS文件系统提供命令方式操作文件系统,命令基本上类似Linux系统命令,比如 创建目录:mkdir 读取文件:cat 删除文件:rm

    首先测试HDFS文件系统,创建目录,上传数据集(滴滴出行订单数据):

    # 创建目录 hdfs dfs -mkdir -p /datas # 上传文件:将数据放到HDFS文件系统上 hdfs dfs -put /export/data/dwv_order_make_haikou_2.txt /datas/

    运行官方字段MapReduce程序:计算圆周率PI,运行到YARN集群上 yarn jar xx.jar 提交应用至集群 jar包位置:$HADOOP_HOME/share/hadoop/mapreduce /hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar

    使用方式如下:

    yarn jar /export/servers/hadoop/share/hadoop/mapreduce/hadoop-mapreduce- examples-2.6.0-cdh5.14.0.jar An example program must be given as the first argument. Valid program names are: aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files. aggregatewordhist: An Aggregate based map/reduce program that computes the histogram of the words in the input files. bbp: A map/reduce program that uses Bailey-Borwein-Plouffe to compute exact digits of Pi. dbcount: An example job that count the pageview counts from a database. distbbp: A map/reduce program that uses a BBP-type formula to compute exact bits of Pi. grep: A map/reduce program that counts the matches of a regex in the input. join: A job that effects a join over sorted, equally partitioned datasets multifilewc: A job that counts words from several files. pentomino: A map/reduce tile laying program to find solutions to pentomino problems. pi: A map/reduce program that estimates Pi using a quasi-Monte Carlo method. randomtextwriter: A map/reduce program that writes 10GB of random textual data per node. randomwriter: A map/reduce program that writes 10GB of random data per node. secondarysort: An example defining a secondary sort to the reduce. sort: A map/reduce program that sorts the data written by the random writer. sudoku: A sudoku solver. teragen: Generate data for the terasort terasort: Run the terasort teravalidate: Checking results of terasort wordcount: A map/reduce program that counts the words in the input files. wordmean: A map/reduce program that counts the average length of the words in the input files. wordmedian: A map/reduce program that counts the median length of the words in the input files. wordstandarddeviation: A map/reduce program that counts the standard deviation of the length of the words in the input files.

    运行PI圆周率,指定参数【pi】

    yarn jar /export/servers/hadoop/share/hadoop/mapreduce/hadoop-mapreduce- examples-2.6.0-cdh5.14.0.jar pi Usage: org.apache.hadoop.examples.QuasiMonteCarlo <nMaps> <nSamples> Generic options supported are -conf <configuration file> specify an application configuration file -D <property=value> use value for given property -fs <local|namenode:port> specify a namenode -jt <local|resourcemanager:port> specify a ResourceManager -files <comma separated list of files> specify comma separated files to be copied to the map reduce cluster -libjars <comma separated list of jars> specify comma separated jar files to include in the classpath. -archives <comma separated list of archives> specify comma separated archives to be unarchived on the compute machines. The general command line syntax is bin/hadoop command [genericOptions] [commandOptions]

    上述提示表示,需要指定参数值:

    yarn jar /export/servers/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar pi 2 100000

    发现当给定pi圆周率后续参数值越大,计算圆周率Pi准确,使用蒙特卡罗估算方式计算圆周率。

    注意针对当前hadoop 2.6版本来说,有一个异常,属于警告,实际运行时出现可以不管。

    五、企业Hadoop 2.x集群高可用 由于HDFS和YARN分布式主从架构,当Client客户端请求服务时,首先找的时主节点(NameNode、ResourceManager),如果主节点挂掉,无法对外提供服务。

    1)、HDFS分布式文件系统来说 用户读写HDFS上数据,找的时NameNode(告知Client文件在哪里),如果NameNode机器宕机,不能继续读写数据,停止服务。 2)、YARN分布式集群资源管理系统来说 用户提交应用给ResourceManager,由RM生成应用管理者和分配资源,如果RM机器宕机,无法继续接受提交应用,计算数据。

    方案:可以启动两个主机点,一个是Active(活动,对外提供服务),一个是Standby(时刻备份)。

    第一、HDFS高可用 NameNode(Active)、NameNode(Standby),借助于ZK Cluster集群实现自动故障转移

    2、YARN高可用 与HDFS高可用类似,两个RM,一个是Active,一个Standby,使用ZK集群进行自动故障转移

    在实际项目中,无论是测试环境、还是生产环境,HDFS和YARN都应该配置高可用,尤其是HDFS集群。

    注:此文章参考陈凯老师讲解

    Processed: 0.009, SQL: 9