Hadoop初学习笔记

Hadoop初学习笔记,第1张

Hadoop初学习笔记

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 dfs -ls /列出目录“/”下的所有文件hdfs dfs -ls /hbase列出目录“/hbase”下的所有文件hdfs dfs -ls -R /递归列出多层文件夹的内容hdfs dfs -mkdir  /input创建/input文件夹hdfs dfs -rm -r /input  删除/input文件夹hdfs dfs -put a.log /input将a.log上传至/input文件夹hdfs dfs -put /etc/hosts /abc/hosts 把Linux系统中/etc/hosts文件上传到HDFS中chgrp, chmod,chownLinux文件系统的用法一样,修改文件所属权限hdfs dfs -get /input/a.log 将a.log下载到本地电脑上hdfs dfs -cat a.log查看a.log的内容hdfs dfs -cat /tmp/input.txt 查看某文本文件的内容hdfs dfs -mkdir /tmp/tianliangedu创建/tmp/tianliangedu目录hdfs dfs -rm -r /tmp/tianliangedu  删除目录moveFromLocal

从本地剪切粘贴到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

appendToFile

追加一个文件到已经存在的文件末尾

hdfs dfs -appendToFile Lai.txt /input/LaiLai.txt

hdfs dfs -cat /abc/hosts查看HDFS中文本文件的内容

copyToLocal

get 等同于copyToLocal

从HDFS拷贝到本地

hdfs dfs -copyToLocal /input/Hello.txt ./

hdfs dfs -copyToLocal /input/Hello.txt ./newHello.txt 可改名为newHello

cp

从HDFS的一个路径拷贝到HDFS的另一个路径

hdfs dfs -cp /input/Hello.txt /tmp

mv

在HDFS目录中移动文件

hdfs dfs -mv /input/Hello.txt /tmp

tail

显示一个文件的末尾1kb的数据

hdfs dfs -tail /tmp/Hello.txt

rm

删除文件/文件夹

hdfs dfs -rm /tmp/Hello.txt

-rm-r

递归删除目录及目录里的内容

hdfs dfs -rm -r /tmp

-du

统计文件夹的大小信息

hdfs dfs -du -s -h /input

带出信息如下 62 124 /input  

62表示文件大小,即为Size,多个文本则会相加

124 表示62*2个副本

/input表示查看的副本

hdfs dfs -du -h /input  则直接显示文本明细

-setrep

设置HDFS中文件的副本数量

hdfs dfs -rm -setrep 10 /tmp/Hello.txt

这里设置的副本数只记录在namenode的元数据中,能否有这么多副本,还需看datanode的数量

关于IDEA出现报错: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.

关于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阶段的整个数据处理流程
 

Java类型Hadoop Writable类型BooleanBooleanWritableByteByteWritableintintWritableFloatFloatWritableLongLongWritableDoubleDoubleWritableStringTextMapMapWritableArrayArrayWritableNullNullWritable

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的组调用一次reduce()方法


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在此运行
 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5690658.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存