本文重点
了解Hadoop发展历史、生态圈 掌握Hadoop集群架构、角色 掌握Hadoop集群分布式安装部署 掌握Job HistoryServer功能 理解HDFS垃圾桶机制
内容大纲
#Apache Hadoop入门 介绍概念 狭义上hadoop指什么 指软件 广义上hadoop指什么 指生态圈 hadoop起源 hadoop特性优点 #Apache Hadoop搭建 hadoop集群:主从架构 分为两个集群,两个集群物理上在一起,逻辑上分离 hdfs集群 yarn集群 集群角色 集群规划 集群配置 format初始化 启停脚本 webUI页面 hadoop初体验 现象与疑惑 后续学习方向 #Apache hadoop辅助功能 jobhistory服务 查看历史执行记录 文件系统垃圾桶机制 回收站
一、Apache Hadoop入门
1.1、Hadoop介绍
- 狭义上:hadoop指的是Apache一款java开源软件,是一个大数据分析处理平台。
Hadoop HDFS:分布式文件系统。 解决了海量数据存储问题。
Hadoop Distributed File System (HDFS™)
Hadoop MapReduce:分布式计算框架。解决海量数据计算问题。
parallel processing of large data sets.
Hadoop YARN:集群资源管理和任务调度。
A framework for job scheduling and cluster resource management. #资源指的是和程序运行相关的硬件资源 cpu ram内存 #任务调度 集群资源繁忙的时候 如何分配资源给各个程序 调度 调度的关键是策略:先来后到 权重
1.2、Hadoop起源发展
- Hadoop之父–Doug Cutting
- 起源项目Apache Nutch。 致力于构建一个全网搜索引擎。
1、爬取互联网网页 --->存储在哪里? 海量数据存储问题 2、基于网页创建倒排索引。--->如何计算? 海量数据计算问题
Google也在做搜索,也遇到这些问题,内部解决了。
- google不想开源软件,但是又憋的难受,怕被人不知道,写论文发表。
- 前后写了3篇论文(谷歌是使用c实现的)。
谷歌分布式文件系统(GFS)------>HDFS 谷歌版MapReduce 系统------>Hadoop MapReduce bigtable---->HBase
基于论文的影响 Nutch团队实现了相应的java版本开源组件。
Nutch团队把HDFS和MapReduce抽取独立成为单独软件在2008年贡献给了Apache。开源。
Doug Cutting 看到他儿子在牙牙学语时,抱着黄色小象,亲昵的叫hadoop,他灵光一闪,就把这技术命名为 Hadoop,而且还用了黄色小象作为标示 Logo。
1.3、Hadoop特性优点
- 分布式、扩容能力
不再注重单机能力 看中的是集群的整体能力。 动态扩容、缩容。
成本低
在集群下 单机成本很低 可以是普通服务器组成集群 意味着大数据处理不一定需要超级计算机。
- 高效率 并发能力
- 可靠性
- 通用性
#技术是相同的 业务不相同的 #hadoop精准区分技术和业务。 做什么?(what need to do)---->业务问题(20%) 怎么做?(how to do)----->技术问题(80%) Hadoop把技术实现了 用户负责业务问题。
二、Apache Hadoop集群搭建
2.1、发行版本
- 官方社区版本Apache基金会官方
- 版本新 功能最全的
- 不稳定 兼容性需要测试 bug多
商业版本 商业公司在官方版本之上进行商业化发行。著名:Cloudera、hotonWorks、MapR
- 稳的一批 兼容性极好 技术支持 本地化支持 一键在线安装
- 版本不一定是最新的 辅助工具软件需要收费
Cloudera发行的hadoop生态圈软件叫做CDH版本。 Cloudera’s Distribution Including Apache Hadoop。 https://www.cloudera.com/products/open-source/apache-hadoop/key-cdh-components.html Hortonworks Data Platform (HDP)
Hadoop本身版本变化
- hadoop 1.x
只有hdfs mapreduce. 架构过于垃圾 性能不高 当下企业中没人使用了。
hadoop 2.x
hdfs MapReduce yarn.
hadoop 3.x
架构和2一样 性能做了优化
2.2、Hadoop集群
- 通常是有hdfs集群和yarn集群组成。两个集群都是标准的主从架构集群。
- 两个集群逻辑上分离 物理上在一起。
- HDFS集群:解决了海量数据存储 分布式存储系统
- 主角色:namenode(NN)
- 从角色:datanode(DN)
- 主角色辅助角色"秘书角色":secondarynamenode (SNN)
- YARN集群:集群资源管理 任务调度
- 主角色:resourcemanager(RM)
- 从角色:nodemanager(NM)
2.3、Hadoop部署模式、集群规划
单机模式 Standalone
一台机器,所有的角色在一个java进程中运行。 适合体验。
伪分布式
一台机器 每个角色单独的java进程。 适合测试
分布式 cluster
多台机器 每个角色运行在不同的机器上 生产测试都可以
高可用(持续可用)集群 HA
在分布式的模式下 给主角色设置备份角色 实现了容错的功能 解决了单点故障 保证集群持续可用性。
Hadoop集群的规划
- 根据软件和硬件的特性 合理的安排各个角色在不同的机器上。
- 有冲突的尽量不部署在一起
- 有工作依赖尽量部署在一起
- nodemanager 和datanode是基友
node1: namenode datanode | resourcemanager nodemanger node2: datanode secondarynamenode| nodemanger node3: datanode | nodemanger
Q:如果后续需要扩容hadoop集群,应该增加哪些角色呢?
node4: datanode nodemanger node5: datanode nodemanger node6: datanode nodemanger .....
2.4、Hadoop源码编译
https://archive.apache.org/dist/
Apache软件基金会的所有软件所有版本的下载地址.
- 源码下载地址
https://archive.apache.org/dist/hadoop/common/ hadoop-3.3.0-src.tar.gz source 源码包 hadoop-3.3.0.tar.gz 官方编译后安装包
源码下载地址
https://archive.apache.org/dist/hadoop/common/ hadoop-3.3.0-src.tar.gz source 源码包 hadoop-3.3.0.tar.gz 官方编译后安装包
对应java语言开发的项目软件来说,所谓的编译是什么?
xxx.java(源码)---->xxx.class(字节码)---->jar包
正常来说,官方网站提供了安装包,可以直接使用,为什么要自己编译呢?
- 修改源码之后需要重新编译。
- 官方提供的最大化编译 满足在各个平台运行,但是不一定彻底兼容本地环境。
- 某些软件,官方只提供源码。
native library 本地库。 官方编译好的 adoop的安装包没有提供带 C程序访问的接口。主要是本地压缩支持、IO支持。
怎么编译?
在源码的根目录下有编译相关的文件BUILDING.txt 指导如何编译。 使用maven进行编译 联网jar.
三、Hadoop具体安装部署
详细安装步骤在这: hadoop编译安装和文件配置
3.1、服务器基础环境准备
ip、主机名 hosts映射 别忘了windows也配置 防火墙关闭 时间同步 免密登录 node1---->node1 node2 node3 JDK安装
3.2、安装包目录结构
#上传安装包到/export/server 解压 bin #hadoop核心脚本 最基础最底层脚本 etc #配置目录 include lib libexec LICENSE.txt NOTICE.txt README.txt sbin #服务启动 关闭 维护相关的脚本 share #官方自带实例 hadoop相关依赖jar
3.3、配置文件的修改
- 第一类 1个 hadoop-env.sh
- 第二类 4个core|hdfs|mapred|yarn-site.xml
- site表示的是用户定义的配置,会覆盖default中的默认配置。
- core-site.xml 核心模块配置
- hdfs-site.xml hdfs文件系统模块配置
- mapred-site.xml MapReduce模块配置
- yarn-site.xml yarn模块配置
- 第三类 1个 workers
3.4、scp安装包到其他机器
3.5、Hadoop环境变量配置
3.6、hadoop namenode format
- format准确来说翻译成为初始化比较好。对namenode工作目录、初始文件进行生成。
- 通常在namenode所在的机器执行 执行一次。首次启动之前
#在node1 部署namenode的这台机器上执行 hadoop namenode -format #执行成功 日志会有如下显示 2023-01-31 14:09:22,869 INFO common.Storage: Storage directory /export/data/hadoop-3.3.0/dfs/name has been successfully formatted. [root@node1 ~]# cd /export/data/hadoop-3.3.0/dfs/name/current [root@node1 current]# ll total 16 -rw-r--r-- 1 root root 399 Jan 31 14:09 fsimage_0000000000000000000 -rw-r--r-- 1 root root 62 Jan 31 14:09 fsimage_0000000000000000000.md5 -rw-r--r-- 1 root root 2 Jan 31 14:09 seen_txid -rw-r--r-- 1 root root 218 Jan 31 14:09 VERSION
Q:如果不小心初始化了多次?
- 现象:主从之间互相不识别。
- 解决
#企业真实环境中 枪毙 #学习环境 删除每台机器上hadoop.tmp.dir配置指定的文件夹/export/data/hadoop-3.3.0。 重新format。
四、Hadoop集群启动
4.1、单节点单进程逐个手动启动
- HDFS集群
#hadoop2.x版本命令 hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode #hadoop3.x版本命令 hdfs --daemon start|stop namenode|datanode|secondarynamenode
YARN集群
#hadoop2.x版本命令 yarn-daemon.sh start|stop resourcemanager|nodemanager #hadoop3.x版本命令 yarn --daemon start|stop resourcemanager|nodemanager
- 优点:精准的控制每个角色每个进程的启停。避免了群起群停(时间成本)。
4.2、脚本一键启动
- 前提:配置好免密登录。ssh
ssh-copy-id node1.itcast.cn ssh-copy-id node2.itcast.cn ssh-copy-id node3.itcast.cn
HDFS集群
start-dfs.sh stop-dfs.sh
YARN集群
start-yarn.sh stop-yarn.sh
更直接的
start-all.sh stop-all.sh [root@node1 ~]# start-all.sh This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
4.3、集群进程确认和错误排查
- 确认是否成功
[root@node1 ~]# jps 8000 DataNode 8371 NodeManager 8692 Jps 8264 ResourceManager 7865 NameNode
如果进程不在 看启动运行日志!!!!!!
#默认情况下 日志目录 cd /export/server/hadoop-3.3.0/logs/ #注意找到对应进程名字 以log结尾的文件
五、Hadoop初体验
- Hadoop Web UI页面
- HDFS集群 http://node1:9870
- YARN集群 http://node2:8088
5.1、初体验之HDFS
本质就是存储文件的 和标准文件系统一样吗?
- 也是有目录树结构,也是从根目录开始的。
- 文件是文件、文件夹是文件夹(对于zk来说)
- 和linux很相似
- 上传小文件好慢。为什么慢?和分布式有没有关系?
5.2、体验之MapReduce+yarn
- MapReduce是分布式程序 yarn是资源管理 给程序提供运算资源。 Connecting to ResourceManager
[root@node1 mapreduce]# pwd /export/server/hadoop-3.3.0/share/hadoop/mapreduce hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 2
- MR程序运行首先连接YRAN ResourceManager,连接它干什么的?要资源。
- MR程序好像是两个阶段 ,先Map 再Reduce。
- 数据量这么小的情况下,为什么MR这么慢? MR适合处理大数据场景还是小数据场景?
六、Hadoop辅助功能
6.1、MapReduce jobhistory服务
- 背景
默认情况下,yarn上关于MapReduce程序执行历史信息、执行记录不会永久存储; 一旦yarn集群重启 之前的信息就会消失。
功能
保存yarn上已经完成的MapReduce的执行信息。
配置
- 因为需求修改配置。重启hadoop集群才能生效。
vim mapred-site.xml <property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node1:19888</value> </property>
scp同步给其他机器
scp /export/server/hadoop-3.3.0/etc/hadoop/mapred-site.xml node2:/export/server/hadoop-3.3.0/etc/hadoop/ scp /export/server/hadoop-3.3.0/etc/hadoop/mapred-site.xml node3:/export/server/hadoop-3.3.0/etc/hadoop/
- 重启hadoop集群
- 自己手动启停jobhistory服务。
#hadoop2.x版本命令 mr-jobhistory-daemon.sh start|stop historyserver #hadoop3.x版本命令 mapred --daemon start|stop historyserver [root@node1 ~]# jps 13794 JobHistoryServer 13060 DataNode 12922 NameNode 13436 NodeManager 13836 Jps 13327 ResourceManager
6.2、HDFS 垃圾桶机制
- 背景 在windows叫做回收站
在默认情况下 hdfs没有垃圾桶 意味着删除操作直接物理删除文件。 [root@node1 ~]# hadoop fs -rm /itcast/1.txt Deleted /itcast/1.txt
- 功能:和回收站一种 在删除数据的时候 先去垃圾桶 如果后悔可以复原。
- 配置
在core-site.xml中开启垃圾桶机制 指定保存在垃圾桶的时间。单位分钟 <property> <name>fs.trash.interval</name> <value>1440</value> </property>
集群同步配置 重启hadoop服务。
[root@node1 hadoop]# pwd /export/server/hadoop-3.3.0/etc/hadoop [root@node1 hadoop]# scp core-site.xml node2:$PWD core-site.xml 100% 1027 898.7KB/s 00:00 [root@node1 hadoop]# scp core-site.xml node3:$PWD core-site.xml
垃圾桶使用
- 配置好之后 再删除文件 直接进入垃圾桶
[root@node1 ~]# hadoop fs -rm /itcast.txt INFO fs.TrashPolicyDefault: Moved: 'hdfs://node1:8020/itcast.txt' to trash at: hdfs://node1:8020/user/root/.Trash/Current/itcast.txt
垃圾桶的本质就是hdfs上的一个隐藏目录。
hdfs://node1:8020/user/用户名/.Trash/Current
后悔了 需要恢复怎么做?
hadoop fs -cp /user/root/.Trash/Current/itcast.txt /
就想直接删除文件怎么做?
hadoop fs -rm -skipTrash /itcast.txt [root@node1 ~]# hadoop fs -rm -skipTrash /itcast.txt Deleted /itcast.txt