数科1991 庄泽华
文章目录
1.集群环境配置
超级用户与普通用户的区别
[root@localhost ~]# 超级用户
[hadoop@localhost ~]$ 普通用户
#以下代码不区分超级用户和普通用户
免密使用root权限执行命令
# 修改/etc/sudoers的配置
[root@localhost ~]# vi /etc/sudoers
root ALL=(ALL) ALL
hadoop ALL=(ALL) NOPASSWD:ALL
# 在/etc/sudoers.d下新建文件hadoop
# 1. 切换到root 用户
# 2. 新建在/etc/sudoers.d下新建文件hadoop,并写入配置
[root@localhost ~]# echo "hadoop ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/hadoop
修改主机名
[root@localhost ~]# echo "hadoop01" > etc/hostname
[root@localhost ~]# reboot 重启
[root@localhost ~]# hostname 查看主机名称
关闭防火墙
# 使用root账户关闭防火墙
# 关闭防火墙
[root@localhost ~]# systemctl stop firewalld.service
# 检查防火墙状态
[root@localhost ~]# systemctl status firewalld.service
# 设置开机默认不开启防火墙
[root@localhost ~]# systemctl disable firewalld.service
# 检查防火墙的开机启动情况
[root@localhost ~]# systemctl list-unit-files firewalld.service | grep firewalld
配置主机IP映射
[root@localhost ~]# vi /etc/hosts
192.168.168.101 hadoop01
192.168.168.102 hadoop02
192.168.168.103 hadoop03
2.搭建Hadoop集群
配置hadoop账户的免密
#各台主机生成rsa密钥:
[root@localhost ~]# ssh-keygen -t rsa
#各台主机拷贝公钥到hadoop01:
[root@localhost ~]# ssh-copy-id hadoop01
#将hadoop01上的authorized_keys公钥文件发送给各hadoop02和hadoop03
[root@localhost ~]# scp ~/.ssh/authorized_keys hadoop02:~/.ssh
[root@localhost ~]# scp ~/.ssh/authorized_keys hadoop03:~/.ssh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-58wwPSWD-1656424012339)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220531213129440.png)]
Hadoop概述
- Hadoop守护进程运行在集群里的机器之上
- Hadoop分布式文件系统(HDFS)的数据分布于运行datanode守护进程的节点上
- 计算框架(像MapReduce,Spark和Impala)向数据移动计算
- 为实现Hadoop的优点,必须在集群里的许多机器上部署Hadoop守护进程
- 许多组织维护多个集群,每个集群都有几百个或几千个节点
- Apache Hadoop是一个大型的复杂的系统
基本的Hadoop集群
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-su0Kgcgd-1656424012341)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220601142221673.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T42gX3Si-1656424012341)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220601142254578.png)]
不是所有守护进程都运行在每台机器上
- NameNode,ResourceManager,JobHistoryServer(“主”守护进程)
- 每个集群只有一个,除非配置了高可用
- Secondary NameNode
- 在没有配置高可用的环境下,每个集群只有一个
- DataNode,NodeManager
- 集群里的每个数据节点一个
- 例外:对于小集群(少于10-20节点),多个主守护进程运行在同一台物理节点上也是可以接受的
配置系统环境
[root@localhost ~]# sudo vi /etc/profile
[root@localhost ~]# source /etc/profile #立即生效配置
[root@localhost ~]# hadoop version #查看hadoop版本
格式化Namenode
[root@localhost ~]# hadoop namenode -format
启动与关闭Hadoop集群
[root@localhost ~]# start-all.sh 启动
[root@localhost ~]# stop-all.sh 关闭
[root@localhost ~]# jps 查看进程
Name Node Web UI
hadoop01:50070
3.HDFS
看ppt
#在 HDFS 的根目录下创建文件夹/input
[root@localhost ~]# hdfs dfs -mkdir /input
#将 mr_score 文件夹里的内容都上传到 HDFS 的/input 目录下
[root@localhost ~]# hdfs dfs -put ./mr_score /input
#使用 hdfs shell 查看 HDFS 的/input/mr_score 下的文件列表
[root@localhost ~]# hdfs dfs -ls /input/mr_score
#使用 HDFS 客户端查看/input/mr_score/chinese.txt 文件的 内容
[root@localhost ~]# hdfs dfs -cat /input/mr_score/chinese.txt
#单独从 HDFS 上下载 chinese.txt 文件到本地文件系统
[root@localhost ~]# hdfs dfs -get /input/mr_score/chinese.txt ./
#合并下载/input/mr_score 下的所有文件,并以 scores.txt 命
[root@localhost ~]# hdfs dfs -getmerge /input/mr_score ./mr_score.txt
#使用 hdfs shell 删除/input/mr_score/chinese.txt 文件
[root@localhost ~]# hdfs dfs -rm /input/mr_score/chinese.txt
#将 HDFS 上的/input/mr_score 目前权限修改为 777
[root@localhost ~]# hdfs dfs -chmod 777 /input/mr_score
#删除 HDFS 上的/input/mr_score 文件夹
[root@localhost ~]# hdfs dfs -rm -r /input
#将本地文件系统上的 score.txt 文件剪切到 HDFS 上 hadoop
[root@localhost ~]# hdfs dfs -moveFromLocal score.txt /user/hadoop
#查看 scores.txt 文件的最后 2 行内容
[root@localhost ~]# hdfs dfs -cat /user/hadoop/scores.txt | tail 2
#往 score.txt 文件添加一行内容:zhangsan 59
[root@localhost ~]# echo "zhangsan 59" | hdfs dfs -appendToFile /user/hadoop/scores.txt
4.MapReduce
MapReduce介绍
- MapReduce是一种编程模型(计算框架)
流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0dCq4g6g-1656424012342)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220601195521230.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DGfj4OgW-1656424012342)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220601195344999.png)]
在hadoop集群上运行java程序
[hadoop@hadoop02 ~]# hadoop jar ~/eclipse-workspace/jars/mr_demo.jar mr.demo.WordCount zen.txt out_zen
MapReduce相较于传统的并行计算框架有什么优势?
MapReduce | |
---|---|
集群架构/容错性 | 非共享式, 容错性好 |
硬件/价格/扩展性 | 普通PC机, 便宜, 扩展性强 |
编程/学习难度 | what, 简单 |
适用场景 | 批处理, 非实时, 数据密集型 |
5.Yarn
流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BOTy78Vp-1656424012343)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220605143547400.png)]
什么是YARN
一种管理Hadoop集群资源的分布式系统
为什么选YARN
- YARN允许在同一个Hadoop集群上运行多种不同类型的作业
- YARN允许不同的计算框架间动态共享集群的内存和CPU资源
- 增加集群的利用率
YARN上著名的计算框架
MapReduce Spark Hive可运行在Spark或MapReduce上
YARN守护进程
-
ResourceManager:每个集群一个
- 初始化应用程序的启动
- 调度工作节点使用的资源
-
JobHistoryServer:每个集群一个
- 存档MapReduce作业的完成情况和元数据
-
NodeManager:每个工作节点一个
-
启动应用程序的进程
-
管理工作节点的资源
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sZdo5kix-1656424012343)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220605151348734.png)]
-
小结
集群的资源被YARN管理
YARN资源管理器调度资源并管理应用程序的生命周期
YARN的NodeManager启动容器
像MapReduce和Spark这样的计算框架使用YARN
开发者不需要处理集群资源管理,调度,容错,等等
YARN应用程序里的的每个任务都是由Application Master来管理的
Map Reduce作业有一个map阶段,一个shuffle和排序阶段,以及一个Reduce阶段
有许多可用的用户界面来查看YARN应用程序的详情
CM的YARN应用程序页面
资源管理器的Web UI
MapReduce作业历史服务器的Web UI
YARN应用程序日志默认被CM聚合,可从CM,HDFS客户端及命令行访问
6.zookeeper
简介
Zookeeper提供了分布式协调服务
Zookeeper数据模型类似树形文件系统
应用场景
- 集群管理
- 配置管理
- 统一命名服务
- 分布式锁
结构原理
高可用集群
容错:过半数可用就行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gsHU3lBV-1656424012344)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220608205010139.png)]
zookeeper Shell
#查询路径下的znode
ls /
#创建节点 -s 顺序节点 -e 临时节点
create /bidata
create /sk1991/201941084028 "庄泽华" #命名
#查看节点信息
get /sk1991/201941084028
#修改节点
set /sk1991/201941084028 "肥仔"
#删除节点
delete /sk1991/201941084028
7.HDFS-HA
#创建软链接
ln -s 文件路径 链接名称
8.HBase
什么是HBase
大型分布式数据库
区别与传统数据库
硬件成本 低,
容错性 高,
数据库 大,
排列方式 稀疏多维,
存储模式 面向列,
数据类型 Bytes,
查询速度 快
基本结构
表(table)
行(row)
行键(rowkey)
列族 (column family)
列限定符(qualifier)
单元格(cell)
成员角色
主从(master/slave)模式
- HMaster
- 监控集群中所有RegionServer进程
- 集群中所有metadata信息改变的入口
- RegionServer
- 负责管理region
- Zookeeper
- 维护Hbase配置信息
- 监控RegionServer状态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RadqJu47-1656424012344)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220608162016258.png)]
Regions详解:
- 表按行键拆分成多个regions
- RegionServer管理regions,向client提供服务
- RegionServer通常运行在集群中的工作节点
- RegionServer通常服务多个Regions
HBase Web端口
hadoop01:16016
HBase Shell
#启动 hdsf
#启动三台 zkServer
zkServer.sh start
#启动 hbase
start-hbase.sh
#创建表
create 表名,列族1,列族2
create 'Student','StuInfo','Grades'
#插入数据
put 表名,rowkey,列族:列限定符,数据
put 'Student','0001','StuInfo:Age','18'
#全表扫描
Scan 表名
Scan 'Student'
#查数据
get 表名,rowkey,列族:列限定符
get 'Student','0003'
get 'Student','0001',"Grades:Computer"
#删除数据
#删除单元格 delete 表名,rowkey,列族:列限定符
delete 'Student','0001','Grades:Math'
#删除一行 deleteall 表名,rowkey
deleteall 'Student','0002'
#删除表 disable 表名 drop 表名
disable 'Student'
drop 'Student'
#修改数据
put 表名.rowkey,列族:列限定符,数据
put 'Student','0002','StuInfo:Age','20'
#设置列族保留版本数
alter 表名,{NAME=>列族,VERSIONS=>保留的版本数}
alter 'Student',{NAME=>'StuInfo',VERSIONS=>4}
#查询最近几个版本的数据
get 表名,rowkey,{COLUMN=>列族:列限定符,VERSIONS=>要查询的版本数}
get 'Student','0003',{COLUMN=>'StuInfo:Age',VERSIONS=>3}
#列出所有表
list
#批量执行命令
hbase shell 文本文件地址
#查询表中记录数
count 表名
#查询表是否存在
exist 表名
9.Hive
Hive介绍
用于解决海量结构化的日志数据统计问题
用于管理和查询结构化/ 非结构化数据的数据仓库
适用于大数据集的批处理统计分析作业
不能在大规模数据集上实现低延迟快速的查询
大数据分析为什么需要Hive
- Hive 的出现, 完美的解决了传统数据分析人员所面临的问题
- 理解mapreduce编程模型
- 自行开发代码实现业务逻辑
- 为超大数据集设计的计算/ 扩展能力
- 统一的元数据管理
Hive特点
- 简单易用 基于SQL表达式语法
- 可扩展 可以自由扩展集群规模
- 延展性 根据需求自定义函数
- 容错性 良好
Hive架构体系
- 用户接口
- Hiveserver2
- Driver
- 负责将HQL解析为MR任务,并提交给集群
- Metastore Server
- 提供元数据服务
- DataBase
- 存储元数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p0qEYbz8-1656424012345)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220608182122861.png)]
Hive三种运行模式
- 内嵌模式
- 本地模式
- 远程模式
数据模型
-
Managed Table(管理表)
- HDFS存储数据受Hive管理,在统一的路径下
- Hive对表的删除操作影响实际数据的删除
-
External Table(外表)
- 数据不受Hive管理,元数据由Hive管理
- Hive对表的删除操作仅仅删除元数据,实际数据不受影
-
永久表
- 是指永久存储在HDFS之上的表,默认创建表为永久表
-
临时表
- 是指仅当前Session有效的表,数据临时存放在用户的临时目录下,当前session退出后即删除
-
分区(Partition)
- 基于用户指定的分区列的值对数据表进行分区
- 分区从物理上分目录划分不同列的数据,用于查询的剪枝,提升查询的效率
-
桶(Bucket)
- 桶作为一种更细粒度的数据组织方式,用于以进一步提高查询效率
- 对于抽样非常有效
- 有利于查询优化
Hive Shell
#启动Metastore Server
hive --service metastore &
#启动hive
hive
#创建表
create table sogou(
time string,
rank int)
row format delimited fields terminated by '\t';
#导入外部数据
load data local inpath '/opt/sogou1000' into table sogou;
#查询前两行数据
select * from sogou
limit 2;
#查询有多少条数据
select count(*) from sogou;
#查询搜索结构排名第1,但是点击次序排第2的数据有多少条
select count(*) from sogou
where rank==1 and num==2;
#统计每分钟的查询次数
select substr(time,0,12),count(*) from sogou
group by substr(time,0,12);
#查询url含百度的数据有多少条
select count(*) from sogou
where url regexp '.*baidu.*';
#查询最热门的10个查询词
select wold,count(*)
from sogou
group by wold
order by count(*) desc
limit 10;
Spark
Spark介绍
Spark用十分之一的计算资源,获得了比Hadoop快3倍的速度
Spark的设计遵循“一个软件栈满足不同应用场景”的理念
RDD: 是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型
spark架构图和部署方式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VOPuPUOE-1656424012346)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220608203638162.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dSjdrRUu-1656424012347)(C:\Users\86130\AppData\Roaming\Typora\typora-user-images\image-20220608203946657.png)]
spark是否能取代hadoop
不能,因为 Spark 是基于内存进行数据处理的,所以不适合于数据量特别大、对实时性要求不高的场合。另外,Hadoop 可以使用廉价的通用服务器来搭建集群,而 Spark 对硬件要求比较高,特别是对内存和 CPU 有更高的要求。
Spark Shell
#本地读取文件
lines = sc.textFile("file:///user/word.txt")
#本地存储
lines.saveAsTextFile("file:///***")
#filter(func): 帅选过滤元素,返回新的数据集
newlines = lines.filter(lambda line:"a" in line)
#map(func): 处理每个元素,并返回新的数据集
newlines = lines.map(lambda line:line+10)
newlines = lines.map(lambda line:line.split(','))
newlines = lines.map(lambda line:line.replace(' ',''))
newlines = lines.map(lambda line:(line,1))
#groupByKey(): 应用于(K,V)键值对的数据集
newlines = lines.groupByKey()
#reduceByKey(func): 应用于(K,V)键值对的数据集
newlines = lines.reduceByKey(lambda a,b:a+b)
#count(): 返回数据中元素的个数
#first(): 返回数据中第一个元素
#take(n): 返回数据前n个数据
#collect(): 以数组形式返回所有元素
#foreach(func): 遍历每个元素
#sortByKey(False): 排序 False表示降序
#sortBy(lambda x:x[1],False) 指定按第二个值排序,降序
nes.filter(lambda line:“a” in line)
#map(func): 处理每个元素,并返回新的数据集
newlines = lines.map(lambda line:line+10)
newlines = lines.map(lambda line:line.split(‘,’))
newlines = lines.map(lambda line:line.replace(’ ‘,’'))
newlines = lines.map(lambda line:(line,1))
#groupByKey(): 应用于(K,V)键值对的数据集
newlines = lines.groupByKey()
#reduceByKey(func): 应用于(K,V)键值对的数据集
newlines = lines.reduceByKey(lambda a,b:a+b)
#count(): 返回数据中元素的个数
#first(): 返回数据中第一个元素
#take(n): 返回数据前n个数据
#collect(): 以数组形式返回所有元素
#foreach(func): 遍历每个元素
#sortByKey(False): 排序 False表示降序
#sortBy(lambda x:x[1],False) 指定按第二个值排序,降序
![在这里插入图片描述](https://img-blog.csdnimg.cn/4ae60fa6b1e840[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YlLhGA95-1656424107708)(https://imgblo
g.csdnimg.cn/89df2fdc80f84f8dad65e12df31c1c6f.jpeg#pic_center)]