Hadoop
指令
# 查看文件大小
hadoop fs -ls -du -s -h 目录
# 查看文件,去头部
hadoop fs -text /data/hello.csv| head
Hadoop介绍
# HDFS (分布式文件系统)
# NameNode: 数据都存放在n(文件的元数据)
# DataNode:数据具体的存放位置(存储文件块数据)
# SeconaryNameNode:每隔一段时间对NameNode元数据备份
# Yarn (Hadoop的资源管理器 CPU + 内存)
# ResourceManager (RM):整个集群资源的管理
# NodeManager (NM):单个节点服务器资源管理
# ApplicationMaster (AM) 单个任务运行的老大
# Container (容器),相当于一台独立的服务器,默认内存(1~8G)CU(最低1个)
缺点
# 不适合存储小文件,一个文件占用150字节的内存的元数据
# 存储大量小文件,会占用大量的内存
HDFS的读写流程
# 写流程
1.客户端向NameNode请求上传文件,NameNode检查文件是否已存在。
2.NameNode返回是否可以上传。
3.客户端向Namenode请求第一个文件块上传到DataNode。
4.返回DataNode节点。
5.客户端先请求dn1,再dn1收到请求会继续请求dn2,后面一样,建立通信管道完成。
6.DataNode逐级应答客户端。
7.客户端开始往dn1上传第一个文件块,dn1收到一个文件块就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。(存放机制,先本机架,起它机架,同机架)。
8.传输完成,重复之前的传输操作。
#读流程
1.客户端向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
2.挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
3.DataNode开始传输数据给客户端。
4.客户端先在本地缓存,然后写入目标文件。
# 客户端切分文件,机械硬盘一般(128M),固态硬盘一般(256M)
# HDFS设置太小,会增加寻址的时间。
# HDFS文件块的大小(面试重点)
硬盘读写数据(寻址时间*100*磁盘读写速度)
机械硬盘 128M 固态硬盘 256M
序列化
# 将内存中数据持久化到磁盘(字节码)
# 内存到磁盘(序列化)
# 磁盘到内存(反序列化)
# Hadoop序列化
数据+简单校验(结构紧凑,存储空间少,chu)
# Java序列化(太重)
数据+各种校验信息/头/继承体系
Hadoop切片
# FileInputFormat切片机制:1.1倍
# CombineTextInputFormat切片机制:当文件块大于1倍小于2倍,则平分块,小块相加,大于等于则形成切片。
Shuffle机制
# Map -> 环形缓冲区(默认100M,一边索引,一边数据,80%后反向)
1.分区,分区索引排序,字典顺序排序
2.第1-n次溢写:(可执行combiner操作),分区(快排 )(索引文件,数据文件),分区合并(归并排序)
3.(可执行combiner操作),分区合并,可设置压缩,写入磁盘:
# map输出数据
4.内存缓冲(内存不够溢出到磁盘)
5.归并排序,按key分组
# - > Reduce:
MapTask工作机制(切片决定并行度)
Read阶段:
1.读取数据,
2.切片化,
3.提交Yarn(切片,jar,xml)
4.计算MapTask数量
5.TextInputFormat
Map阶段:
6.逻辑运算
Collect阶段:
7.环形缓冲区
8.分区,排序(快排,索引)
溢写阶段:
9.溢出到文件(分区且区内有序)
Merge阶段:
10.归并排序
ReduceTask工作机制
Copy阶段:
1.拉取指定分区的数据
Sort阶段
2.分区间的归并排序
Reduce阶段:
3.Reduce方法,TextInputFormat
Yarn
Yarn的工作机制:
Yarn调度器:
1. FIFO/容器/公平
2. apache默认调度器 容量,CDH默认调度器 公平
3. 公平/容量默认一个队列,需要创建多队列
4. 中小企业:hive spark flink mr
5. 中大企业:业务模块:登录/注册/购物车/营销
6. 好处:解耦 降低风险 降级使用
7. 调度器特点:
相同点:支持多队列,可以借资源、支持多用户
不同点:容器:有限满足先提交任务运行
公平:队列里面的任务公平享有资源
8. 生产环境如何选
中小企业:对并发度不高,选择容量
中大企业:对并发度要求高,选公平
配置文件
hdfs-site.xml
<!-- 关闭用户权限控制 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
Hadoop支持的压缩格式
压缩格式 | 算法实现 | 压缩比 | 效率 | 可切分 | 内置 | 拓展名 | Native | Java | 描述 |
---|---|---|---|---|---|---|---|---|---|
bzip2 | bzip2 | 最高 | 慢 | Yes | Yes | .bz2 | Yes | Yes | 压缩率最高,压缩/解压缩效率最慢 |
deflate | DEFLATE | 高 | 慢 | No | Yes | .deflate | No | Yes | 标准压缩算法 |
gzip | DEFLATE | 高 | 慢 | No | Yes | .gz | No | Yes | 相比deflate增加文件头、尾;压缩比较高,压缩/解压缩效率慢 |
zlib | DEFLATE | 高 | 慢 | No | Yes | .zl | Yes | No | 相比deflate增加文件头、尾 |
lz4 | lz4 | 最低 | 最快 | No | Yes | .lz4 | Yes | No | 压缩率较低;压缩/解压缩效率最快 |
lzo | lzo | 较低 | 快 | Yes | No | .lzo_deflate | Yes | No | 压缩率较低;压缩/解压缩效率最快 |
lzop | snappy | 较低 | 快 | Yes | No | .lzo | Yes | No | 压缩率较低;压缩/解压缩效率较快 |
snappy | snappy | 较低 | 快 | No | No | .snappy | Yes | No | 压缩率较低;压缩/解压缩效率较快 |
Hadoop
hadoop指定SSH端口和修改启动用户,修改hadoop-env.sh
export HADOOP_SSH_OPTS="-p 1234"
export JAVA_HOME=""
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HDFS_DATANODE_USER=root
export HADOOP_SECURE_DN_USER=hdfs
export HDFS_NAMENODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export HADOOP_SECURE_DN_USER=yarn
export YARN_NODEMANAGER_USER=root
改端口
然后
ssh-copy-id -p 8022 hadoop102
ssh-copy-id -p 8022 hadoop103
ssh-copy-id -p 8022 hadoop104
netstat -anlp | grep sshd
Yarn查看错误
yarn logs -applicationId application_xxxx