内容大纲:
1. Hadoop架构详解
大数据概述
大数据发展史 //谷歌的3驾马车
Hadoop的分类 //Apache社区版, Cloudera商业版(CDH版)
应用场景
特点
Hadoop的架构图
//Hadoop1.X(HDFS + MapReduce), Hadoop2.x(Hdfs + MapReduce + Yarn), Hadoop3.X的架构和 2.X的架构一样, 只不过性能做了提升.

2. Hadoop环境搭建
	//Hadoop3.3.0, 编译后的, 支持(Snappy + BZip压缩协议), 还有一些C的接口. 
	
3. Hadoop初体验
	//HDFS: 玩一下
	//MapReduce: 玩一下
	
4. 垃圾桶机制Trash

5. Hdfs详解
	分布式存储系统图解
	HDFS的适用 和 不适用场景
	HDFS的常用Shell命令		//重点
	
6. HDFS原理
	//心跳机制, 负载均衡, 副本机制
	//3个副本是如何存储的?
	//HDFS的读写流程.			
	//HDFS是如何管理元数据的?
	//SecondaryNameNode是如何辅助namenode管理元数据的?

*********************************************** 以下是具体内容 ***********************************************

  1. Hadoop的特点
    //扩容能力, 成本低, 高效率, 可靠性, 通用性(如果你能解释清楚, 面试的时候可以说, 否则不要讲)
    //通用性解释: Hadoop高效的区分开了 业务 和 技术, 业务占比大概20%, 技术占比80%, 也就是说: 对于程序员来讲, 只要能把业务逻辑梳理清楚了,
    //剩下的技术都是那一套, 所以有: 天下数仓是一家的说法.

  2. Hadoop的国内外应用
    国外:
    雅虎, FaceBook(Meta), IBM…
    国内:
    百度, 腾讯…
    总结:
    各行各业.

  3. Hadoop的发行版
    //Linux发行版 = Linux内核(托瓦兹团队维护) + 系统库 + 系统软件, 常用的: RedHat, Ubantu, CentOS, 中标麒麟.

    随着互联网的发展, 很多公司基于Hadoop的内核也都加入了一些自己的类库, 软件等, 逐步发展, 就形成了目前我们的Hadoop体系.
    //总结: 早期应用比较多的Hadoop版本有4个, Apache版, Cloudera公司的(CDH版), HotonWorks公司的, MapR
    //目前, 企业用的较多的就2个版本: Apache版(社区版, 免费的), CDH版(商业版, 收费的)

     Apache版:	//Apache开源组织推的, 免费的, 也叫: 社区版, 兼容性相对较差一点.
     	免费的, 有些时候可能存在软件的兼容性, 及不向下兼容的情况. 
     	//我们用Apache3.3.0 这个版本的.
     
     CDH版:		//商业版
     	是Cloudera公司推出的, 在环境搭建, 使用及软件的兼容性方面, 做的非常好.
     	Doug Cutting(卡大爷)目前就就职于这家公司, 职位: 副总裁.
     
     
     HortonWorks:	//商业版
     	这个公司最早是雅虎团队的副总裁带着雅虎最早搞Hadoop的技术团队集体跳槽, 成立的公司. 
     	2018年, 该公司已经被CDH收购, 收购了60%的股份, 大概在53亿美金.
    
  4. hadoop1.X的架构图(了解)
    Hadoop1.X = HDFS + MapReduce, 具体参考: 图片.

  5. Hadoop2.X的架构图(单节点)
    Hadoop2.X = HDFS + MapReduce + Yarn

  6. Hadoop2.X的架构图(HA模式)
    //HDFS的高可用, 详见图解.

  7. Hadoop集群的编译
    //我们用的不是直接从官网上下载下来的Hadoop, 因为它不支持一些高效的压缩协议, 例如: Snappy, BZip, 也不支持C系列的端口.
    //实际开发中, 我们一般会对从官网下载下来的Hadoop先编译, 然后再使用.

    Hadoop(编译前)下载地址:
    https://archive.apache.org/dist/hadoop/core/hadoop-3.3.0/
    //具体编译动作, 详见: Hadoop3.3.0Linux编译安装.md 笔记, 建议: 你直接用我编译好的Hadoop安装包安装即可, 不要自己尝试编译, 99.99%会失败.

    总结:
    直接用我给大家编译好的版本安装即可, 即: hadoop-3.3.0-Centos7-64-with-snappy.tar.gz

  8. Hadoop的集群规划
    //HDFS集群 和 Yarn集群 物理上常在一起, 但是逻辑上是分离的.
    集群规划如下:
    HDFS集群 Yarn集群
    node1: namenode(主节点), datanode(从节点) ResourceManager(主节点), nodemanager(从节点)
    node2: SecondaryNameNode(辅助节点), datanode(从节点) nodemanager(从节点)
    node3: datanode(从节点) nodemanager(从节点)

  9. Hadoop的安装

    1. 上传 安装包(编译后的) 到 /export/software目录下.

    2. 解压上述的压缩包到 /export/server目录下.

    3. 修改配置文件. //3类6个.

      //路径: hadoop-3.3.0/etc/hadoop/配置文件.
      //分类: 1. hadoop-env.sh 2. core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml 3.works

    4. 配置Path环境变量.

    5. 远程分发给 node2, node3

    6. 配置Path环境变量. //node2, node3

    7. 刷新环境变量. //三台机器都要做, source /etc/profile

    8. 启动.
      //细节1: 第一次启动, 必须先初始化下你的HDFS集群, 在node1中执行 hdfs namenode -format
      //细节2: 实际开发中, 我们一般是用 start-all.sh 的方式来启动Hadoop集群的.
      //细节3: 如果你是用Notepad++连接Hadoop, 然后修改配置文件, 记得先把文件的编码格式换成 UTF-8.

  10. Hadoop的启动
    核心细节:
    第一次启动的时候, 需要初始化一下 namenode, 注意: 这个动作只要做一次就行了, 否则会出多主或者无主的情况, 即: namenode 和 datanode匹配不上.
    即: 我们只要在node1中做一次即可.
    hdfs namenode -format

    如果实在是不小心把上述的命令重复执行, 只要把 /export/data下的 hadoop-3.3.0 文件夹整体删掉, 然后重新执行一次上述的命令即可. 
    

    Hadoop的启动方式:
    1. 启动Hadoop之前, 先启动ZK集群, 由它来帮我们管理Hadoop集群.
    /export/onekey/startZK.sh

    2. Hadoop集群的启动方式1: 逐个启动.		//看看就行了, 一般不用的.
    	HDFS集群:
    		hdfs --daemon start namenode			//只在node1中执行即可
    		hdfs --daemon start secondarynamenode	//只在node2中执行即可
    		hdfs --daemon start datanode			//node1, node2, node3, 三台机器都要执行.
    		
    	Yarn集群:
    		yarn --daemon start resourcemanager		//只在node1中执行即可
    		yarn --daemon start nodemanager			//node1, node2, node3, 三台机器都要执行.
    
    3. Hadoop集群的启动方式2: 逐集群启动.	//单独启动/关闭 HDFS集群  或者 Yarn集群.
    	start-dfs.sh
    	start-yarn.sh
    
    4. Hadoop集群的启动方式3: 脚本一键启动.	//直接开启或者关闭Hadoop环境, 推荐, 实际开发用. 
    	start-all.sh
    	stop-all.sh
    	
    //上述的和Hadoop相关的所有命令, 你可以在任意的路径下执行, 因为我们已经在Path环境变量(vim /etc/profile)中配置过Hadoop了. 
    
  11. 使用Linux的时候遇到的一些问题
    问题1:
    Linux虚拟机IP好好的, 突然变成127.0.0.1了, 如何解决?
    答案:
    这是因为 NetworkManager(网卡管理者做的事儿), 我们要把它禁用掉, 即: 执行一下如下的命令即可.
    systemctl stop NetworkManager //关闭
    systemctl disable NetworkManager //禁用
    systemctl restart network //重启网卡.
    ifconfig //查看ip, 成功显示

    问题2:
    虚拟机的路径放的不对, 想换个路径咋整, 注意, 是node1, node2, node3这些机器, 不是VMware软件.
    答案:
    关闭虚拟机, 然后把虚拟机所在的文件夹整体拷贝到你要移动到的路径下, 然后选择虚拟机中的 *.vmx, 重新挂载到VMware中即可.

    问题3:
    某个进程如果想把它关闭, 但是脚本啥的关不了怎么办?
    答案:
    kill -9 pid值 //强制杀死当前进程.

    问题4:
    如果遇到问题了, 如何查看日志信息.
    答案:
    Hadoop的日志信息都在 /export/server/hadoop-3.3.0/logs文件夹下, hadoop-root-节点名-node1.itcast.cn.log

    问题5:
    配置path环境变量后, 没生效?
    答案:
    配置完毕要通过 source /etc/profile 方式刷新下才可以生效.

    问题6:
    编辑文件的时候, 如果我的路径写错了, 进去了怎么办?
    //例如: vim /etc/profile 写成了 vim /etc/proabc
    答案:
    直接 :q 或者 :q! 退出即可.

  12. Hadoop集群的初体验之HDFS集群的初体验: //大数据分布式存储架构.
    Web页面: node1:9870 //Hadoop3.X HDFS的端口号是9870, Hadoop2.X及其以前是: 50070

    需求1: 在HDFS中创建1个文件夹. 
    	hadoop fs -命令名 参数		//这个是Hadoop1.X出来的, Hadoop2.X也支持, 针对于Hadoop支持的所有文件系统, 更广泛.
    	hdfs dfs -命令名 参数		//这个是Hadoop2.X 出来的写法, 主要是针对于 hdfs文件系统的, 有点局限.
    	//总结: 目前来看写hadoop fs 和 hdfs dfs没有区别, 推荐使用 hadoop fs, 因为更通用.
    	
    	hadoop fs -mkdir -p /aa/bb		//后边写的是 HDFS的路径.
    	hdfs dfs -mkdir -p /cc/dd		//后边写的是 HDFS的路径.
    
    需求2: 往上述的文件夹下上传1个文件. 
    	Linux  => HDFS:
    		hadoop fs -put Linux文件的路径 HDFS文件的路径
    		
    	Window => HDFS:
    		方式1: 先从 windows => Linux,  再从 Linux => HDFS中
    		
    		方式2: 直接通过 页面(node1:9870)自带的功能, 拖拽上传即可. 
    
    需求3: 删除刚才的文件夹.
    	hadoop fs -rm HDFS路径.
    
  13. Hadoop集群的初体验之Yarn集群的初体验: //资源调度器.
    就是在Yarn上跑一个 Hadoop自带的 MR程序的脚本即可, 脚本所在路径为:
    cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce/测试包.

    具体步骤:
    1. 进入到本机的Hadoop提供的 初体验脚本的位置.
    cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce/测试包.
    2. 通过Yarn命令, 执行上述的脚本即可.
    格式:
    yarn -jar 测试包的位置 pi 2 10
    解释:
    yarn -jar 说明执行的Yarn程序.
    测试包的位置 就是Hadoop自带的数据的位置.
    pi 圆周率
    数字1: MapTask的个数, 实际开发中 1个MapTask任务 = 1个Block块.
    数字2: 投点数, 数据越多, 相对越精准, 具体可以参考 蒙特卡洛算法.

    3. 参考命令如下:
    	cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce
    	ll		//查看当前目录下有谁.
    	yarn jar hadoop-mapreduce-examples-3.3.0.jar pi 2 10
    
  14. Hadoop的历史任务
    目前遇到的问题是:
    我们执行过的MR程序, 可以在Yarn的Web页面中进行查看, 即: node1:8088, 但是当集群重新启动后, 这里的数据就丢失了,
    即: node1:8088只记录 本次启动Hadoop集群后, 执行过的任务, 那么历史任务应该去哪里看呢?
    这个时候就需要用到: JobHistory 服务了.

    JobHistory的搭建步骤:
    //使用这个服务, 需要我们单独修改一些配置, 但是这个配置信息我们刚才搭建Hadoop集群的时候
    //已经改过了, 所以大家直接用就好了.

    1. 修改 mapred-site.xml 文件
    	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>
    
    2. scp 拷贝给node2, node3
    3. 重新启动hadoop集群.
    	stop-all.sh		//一键关闭
    	start-all.sh	//一键开启.
    

    开启MR历史任务:
    1. 开启.
    mapred –daemon start historyserver //新的命令格式, hadoop3.X的写法.

    	mr-jobhistory-daemon.sh start historyserver	//旧版的命令格式, Hadoop3.X以前的写法.
    2. 通过 node1:19888 页面进行查看.
    
  15. Hadoop的垃圾桶机制
    解释:
    默认是没有开启的, 即: 如果我们删除数据(文件), 则数据(文件)直接就没了, 相当于永久删除.
    如果开启了垃圾桶机制, 当我们删除文件的时候, 如果不加 -skipTrash 这个选项, 则默认会将该文件移动到 HDFS的垃圾桶中(类似于windows的回收站)

    垃圾桶机制需要我们单独部署下, 步骤如下:
    1. 修改 core-site.xml文件内容. //这个是我们没有做的, 需要单独做一下.
    //在core-site.xml中开启垃圾桶机制, 指定保存在垃圾桶的时间。单位分钟, 1440分钟 = 1天

    fs.trash.interval
    1440

    2. scp远程分发给node2, node3
    
    3. 重新启动hadoop集群.
    	stop-all.sh		//一键关闭
    	start-all.sh	//一键开启.
    
版权声明:本文为南顾〆原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/nanguyhz/p/16801228.html