了解Hadoop发展历史、生态圈
掌握Hadoop集群架构、角色
掌握Hadoop集群分布式安装部署
掌握Job HistoryServer功能
理解HDFS垃圾桶机制
#Apache Hadoop入门
介绍概念
狭义上hadoop指什么 指软件
广义上hadoop指什么 指生态圈
hadoop起源
hadoop特性优点
#Apache Hadoop搭建
hadoop集群:主从架构
分为两个集群,两个集群物理上在一起,逻辑上分离
hdfs集群
yarn集群
集群角色 集群规划
集群配置
format初始化
启停脚本
webUI页面
hadoop初体验 现象与疑惑 后续学习方向
#Apache hadoop辅助功能
jobhistory服务 查看历史执行记录
文件系统垃圾桶机制 回收站
狭义上: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内存
#任务调度
集群资源繁忙的时候 如何分配资源给各个程序 调度
调度的关键是策略:先来后到 权重
广义上:Hadoop指的是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。
分布式、扩容能力
不再注重单机能力 看中的是集群的整体能力。
动态扩容、缩容。
成本低
在集群下 单机成本很低 可以是普通服务器组成集群
意味着大数据处理不一定需要超级计算机。
高效率 并发能力
可靠性
通用性
#技术是相同的 业务不相同的
#hadoop精准区分技术和业务。
做什么?(what need to do)---->业务问题(20%)
怎么做?(how to do)----->技术问题(80%)
Hadoop把技术实现了 用户负责业务问题。
原来大数据这么简单 可以这么玩。
官方社区版本 Apache基金会官方
商业版本 商业公司在官方版本之上进行商业化发行。著名: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)
本课程中 使用的是Apache 3.3.0版本。
Hadoop本身版本变化
hadoop 1.x
只有hdfs mapreduce. 架构过于垃圾 性能不高 当下企业中没人使用了。
hadoop 2.x
hdfs MapReduce yarn.
hadoop 3.x
架构和2一样 性能做了优化
单机模式 Standalone
一台机器,所有的角色在一个java进程中运行。 适合体验。
伪分布式
一台机器 每个角色单独的java进程。 适合测试
分布式 cluster
多台机器 每个角色运行在不同的机器上 生产测试都可以
高可用(持续可用)集群 HA
在分布式的模式下 给主角色设置备份角色 实现了容错的功能 解决了单点故障
保证集群持续可用性。
Hadoop集群的规划
根据软件和硬件的特性 合理的安排各个角色在不同的机器上。
node1: namenode datanode | resourcemanager nodemanger
node2: datanode secondarynamenode| nodemanger
node3: datanode | nodemanger
Q:如果后续需要扩容hadoop集群,应该增加哪些角色呢?
node4: datanode nodemanger
node5: datanode nodemanger
node6: datanode nodemanger
.....
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 官方编译后安装包
对应java语言开发的项目软件来说,所谓的编译是什么?
xxx.java(源码)---->xxx.class(字节码)---->jar包
正常来说,官方网站提供了安装包,可以直接使用,为什么要自己编译呢?
native library 本地库。
官方编译好的 adoop的安装包没有提供带 C程序访问的接口。主要是本地压缩支持、IO支持。
怎么编译?
在源码的根目录下有编译相关的文件BUILDING.txt 指导如何编译。
使用maven进行编译 联网jar.
可以使用课程提供编译好的安装包
hadoop-3.3.0-Centos7-64-with-snappy.tar.gz
详细安装步骤参考课程资料:
《Python+大数据:hadoop离线阶段\02–Apache Hadoop\2、软件\hadoop-3.3.0\Hadoop3.3.0Linux编译安装.md》
ip、主机名
hosts映射 别忘了windows也配置
防火墙关闭
时间同步
免密登录 node1---->node1 node2 node3
JDK安装
#上传安装包到/export/server 解压
bin #hadoop核心脚本 最基础最底层脚本
etc #配置目录
include
lib
libexec
LICENSE.txt
NOTICE.txt
README.txt
sbin #服务启动 关闭 维护相关的脚本
share #官方自带实例 hadoop相关依赖jar
官网文档:https://hadoop.apache.org/docs/r3.3.0/
第一类 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
format准确来说翻译成为初始化比较好。对namenode工作目录、初始文件进行生成。
通常在namenode所在的机器执行 执行一次。首次启动之前
#在node1 部署namenode的这台机器上执行
hadoop namenode -format
#执行成功 日志会有如下显示
21/05/23 15:38:19 INFO common.Storage: Storage directory /export/data/hadoopdata/dfs/name has been successfully formatted.
[root@node1 server]# ll /export/data/hadoopdata/dfs/name/current/
total 16
-rw-r--r-- 1 root root 321 May 23 15:38 fsimage_0000000000000000000
-rw-r--r-- 1 root root 62 May 23 15:38 fsimage_0000000000000000000.md5
-rw-r--r-- 1 root root 2 May 23 15:38 seen_txid
-rw-r--r-- 1 root root 207 May 23 15:38 VERSION
Q:如果不小心初始化了多次,如何?
现象:主从之间互相不识别。
解决
#企业真实环境中 枪毙
#学习环境
删除每台机器上hadoop.tmp.dir配置指定的文件夹/export/data/hadoop-3.3.0。
重新format。
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
优点:精准的控制每个角色每个进程的启停。避免了群起群停(时间成本)。
前提:配置好免密登录。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
确认是否成功
[root@node1 ~]# jps
8000 DataNode
8371 NodeManager
8692 Jps
8264 ResourceManager
7865 NameNode
如果进程不在 看启动运行日志!!!!!!!!!!!!!
#默认情况下 日志目录
cd /export/server/hadoop-3.3.0/logs/
#注意找到对应进程名字 以log结尾的文件
Hadoop Web UI页面
http://node1:9870/dfshealth.html#tab-overview
本质就是存储文件的 和标准文件系统一样吗?
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适合处理大数据场景还是小数据场景?
背景
默认情况下,yarn上关于MapReduce程序执行历史信息、执行记录不会永久存储;
一旦yarn集群重启 之前的信息就会消失。
功能
保存yarn上已经完成的MapReduce的执行信息。
配置
因为需求修改配置。重启hadoop集群才能生效。
vim mapred-site.xml
<property>
<name>mapreduce.jobhistory.addressname>
<value>node1:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>node1:19888value>
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
背景 在windows叫做回收站
在默认情况下 hdfs没有垃圾桶 意味着删除操作直接物理删除文件。
[root@node1 ~]# hadoop fs -rm /itcast/1.txt
Deleted /itcast/1.txt
功能:和回收站一种 在删除数据的时候 先去垃圾桶 如果后悔可以复原。
配置
在core-site.xml中开启垃圾桶机制
指定保存在垃圾桶的时间。单位分钟
<property>
<name>fs.trash.intervalname>
<value>1440value>
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