hadoop 大型框架
定义: 开源的分布式系统基础架构
分布式: 多台服务器共同完成某一项任务
用途: 海量数据的存储,分析计算
特性:
高效性(可并行工作),
高扩展性(可动态增加/删除节点)
高可靠性(底层维护多个数据副本)
高容错性(自动将失败的任务重新分配)
HDFS架构概述Hadoop Distributed File System 分布式文件系统
用于存储文件,通过目录树来定位文件
使用场景:适合一次写入,多次读出,一个文件经过创建,写入和关闭后不需要再改变
NameNode(简称nn): 存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),j以及每个文件的块列表和块所在的DataNode等,相当于Master,是一个管理者
a. 管理HDFS的名称空间
b. 配置副本策略
c. 管理数据库(block)映射信息
d.处理客户端读写请求
DataNode(dn): 在本地文件系统存储文件快数据,以及块数据的校验和,相当于slave,nn下达命令,dn执行实际 *** 作
a. 存储实际的数据块
b. 执行数据库的读/写 *** 作
Secondary NameNode(2nn): 每隔一段时间对NameNode元数据备份
a. 并非nn的热备,当nn挂掉的时候,它不能马上替换nn并提供服务
b. 辅佐nn,分担其工作量,比如定期合并Fsimage和Edits,并推送给nn
c. 紧急情况下,可辅助恢复nn
Client 客户端
a. 文件切分,文件上传HDFS时,Client将文件切分成一个一个的Block,然后上传
b. 与nn交互,获取文件的位置信息
c. 与dn交互,读取或者写入数据
d. Client提供一些命令来管理HDFS,比如nn格式化
e. Client提供通过一些命令来访问HDFS,比如增删查改
优势: 高容错性(多副本),适合处理大数据(数据规模,能处理GB,TB,PB级别的数据/文件规模,能处理百万规模的文件),可构建在廉价机器上
劣势:
不适合低延时数据访问,比如毫秒级的存储数据;
无法高效的对大量小文件存储(大量小文件会占用NameNode大量的内存来存储文件目录和块信息;小文件的寻址时间超过读取时间,违背HDFS设计目标),
不支持并发写入,文件随机修改(一个文件只能有一个写,不允许多线程同时写/仅支持数据append追加,不支持文件的随机修改)
HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M
寻址时间为传输时间的1%时,则为最佳时间
hadoop运行模式
local本地模式 数据存储在linux本地,测试偶尔用一下
pseudo-distributed伪分布式 数据存储在HDFS,公司比较差钱
fully-distributed 完全分布式 数据存储在HDFS,多台服务器工作
启动Hadoop
start-all.sh stop-all.sh 一次性启动/关闭所有服务(不建议使用)
start-dfs.sh
start-yarn.sh
先开的后关,后开的先关
启动historyserver
mapred --daemon start historyserver
mapred --daemon stop historyserver
WEB访问HADOOP状态
http://你的容器IP:9870/来查看 HDFS 面板以及详细信息
http://你的容器IP:8088/ 查看监控状态
http://你的容器IP:19888/ 查看history server
安全模式: 集群启动时,所有的dn都必须向nn汇报磁盘使用状态和block存储信息
在此之前,出于hdfs的保护,会禁止访问hdfs,此状态为安全模式
检查安全模式 get|leave|enter
hdfs dfsadmin --safemode get 获取当前安全模式状态 => on|off
hdfs dfsadmin --safemode enter 手动进入安全模式=> on
hdfs dfsadmin --safemode leave 离开安全模式=>off
从本地剪切粘贴到HDFS
在hadoop目录下通过vi Hello.txt 写入并创建该txt,截止在该目录下输入hdfs dfs -moveFromLocal ./Hello.txt /input
./表示当前目录下
可将Hello.txt挪到hdfs的input文件夹中
copyFromLocal
put 等同于copyFromLocal
从本地拷贝文件到HDFS
hdfs dfs -copyFromLocal Hello.txt /input
hdfs dfs -put Hello.txt /input
追加一个文件到已经存在的文件末尾
hdfs dfs -appendToFile Lai.txt /input/LaiLai.txt
copyToLocal
get 等同于copyToLocal
从HDFS拷贝到本地
hdfs dfs -copyToLocal /input/Hello.txt ./
hdfs dfs -copyToLocal /input/Hello.txt ./newHello.txt 可改名为newHello
从HDFS的一个路径拷贝到HDFS的另一个路径
hdfs dfs -cp /input/Hello.txt /tmp
在HDFS目录中移动文件
hdfs dfs -mv /input/Hello.txt /tmp
tail
显示一个文件的末尾1kb的数据
hdfs dfs -tail /tmp/Hello.txt
rm
删除文件/文件夹
hdfs dfs -rm /tmp/Hello.txt
递归删除目录及目录里的内容
hdfs dfs -rm -r /tmp
统计文件夹的大小信息
hdfs dfs -du -s -h /input
带出信息如下 62 124 /input
62表示文件大小,即为Size,多个文本则会相加
124 表示62*2个副本
/input表示查看的副本
hdfs dfs -du -h /input 则直接显示文本明细
设置HDFS中文件的副本数量
hdfs dfs -rm -setrep 10 /tmp/Hello.txt
这里设置的副本数只记录在namenode的元数据中,能否有这么多副本,还需看datanode的数量
关于IDEA出现报错: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.、_whs0329的博客-CSDN博客https://blog.csdn.net/whs0329/article/details/121878162?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164082946216780264048062%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164082946216780264048062&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-121878162.pc_search_insert_es_download_v2&utm_term=java.io.FileNotFoundException%3A+HADOOP_HOME+and+hadoop.home.dir+are+unset.&spm=1018.2226.3001.4187
MapReduce架构概述
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用“的x核心框架
核心功能: 将用户编写的业务逻辑代码和自带默认组件,整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上
优点:易于编程,良好的扩展性(可动态增加服务器,解决计算机资源不够问题),高容错性(任何一台机器挂掉,可以将任务转移到其他节点),适合海量数据计算(TB/PB) 几千台服务器共同计算
缺点:不擅长实时计算,不擅长流式计算,不擅长DAG有向无环图计算
结构化数据(二维表格): 数据库 Sqoop数据传递
半结构化数据:文件日志 Flume日志收集
非结构化数据: 视频,PPT等 Kafka消息队列
核心编程思想:
Map阶段并行处理输入数据 互不相干
Reduce阶段对Map结果进行汇总,并发ReduceTask,完全互不相干,但是数据依赖于上一个阶段的所有MapTask并发实例的输出
MapReduce进程
1. MrAppMaster 负责整个程序的过程调度和状态协调
2. MapTask 负责Map阶段的整个数据处理流程
3. ReduceTaskf 负责Reduce阶段的整个数据处理流程
MapReduce编程规范
共分为三个部分: Mapper,Reducer,Driver
Mapper阶段
1. 用户自定义的Mapper要继承父类
2. Mapper的输入数据是KV对的形式(KV的类型可自定义)
3. Mapper中的业务逻辑写在map()方法中
4. Mapper的输出数据是KV对的形式(KV类型可自定义)
5. map()方法(MapTask进程)对每一个
Reduce阶段
1. 用户自定义的Reducer要继承父类
2. Reducer的输入数据类型对应Mapper的输出数据类型,也是KV
3. Reducer中的业务逻辑写在reduce()方法中
4. ReduceTask进程对每一组相同K的
Driver阶段
相当于Yarn集群的客户端,用于提交整个程序到Yarn集群,提交的是封装了MapReduce程序相关运行参数的job对象
1. 获取配置信息,获取job对象实例
2. 指定本程序的jar包所在的本地路径
3. 关联Mapper/Reducer业务类
4. 指定Mapper输出数据的kv类型
5. 指定最终输出的数据的kv类型
6. 指定job的输入原始文件所在目录
7. 指定job的输出结果所在目录
8. 提交作业
YARN架构概述 YetAnother Resource Negotiatorjy另一种资源协调者,是Hadoop的资源管理器
ResourceManager(RM): 整个集群资源(内存,CPU等)的老大
NodaManager(NM): 单个节点服务器资源老大(默认1T-8T内存)
ApplicationMaster(AM): 单个任务运行的老大
Container: 容器,相当一台独立的服务器,封装了任务运行需要的资源,如内存,cpu,磁盘,网络等,AM在此运行
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)