当replication 多时,Hadoop不会自己删;需要人工干预
相同配置的机器不同的存储空间,是否可以混搭?
为什么不能做?
副本存放策略;均等存放,会造成数据倾斜
木桶原理
数据倾斜?
服务器与服务器之间的存储相差比不超过20%(可自主设定,但建议20%)
危害
导致磁盘很容易坏;
计算瓶颈;
为什么会倾斜?
与reduce task 的个数有关
reduce的输出是按照 partition 来的;partition的分区策略很重要; 所以在分区前要分析数据;
partition sort 中的sort 是默认按照字典顺序排序的
如何调整
重新调整存储平衡: 使用命令 start-balancer.sh
参数:
什么时候触发;如20% ,存储容量可用量
start time
end time
为什么 start time = now 也不马上执行?
因为在不影响正常服务的情况下,才会执行。 如果内网流量上线???
随机取几台机器,判断是否发生倾斜
要马上执行,需要把没有倾斜的DN挂起;是倾斜的DN的命中率提高; Hadoop就会做副本提升。??
热门数据
需要任务介入,直接切;步骤不能错,一个都不能错,错了block就丢失
如何做百度
什么情况下只有map没有reduce?
在不做任何聚合操作的时候; 把 setReduceCounter()设置为0
part-m-000000
多个小文件时,需要启动JVM的复用机制
如何在map启动一部分后,立即启动Reduce?
上传时,修改Block的大小—>麻烦,替代方案 splitting
map 前后都有partition ; 前边的partion可以是后边的的整数倍;修改前边partition的大小,从而修改reduce的执行数
怎么修改partition? mapred-site.xml 里的 mapred.min.split.size
map 在运行20%时,默认启动reduce。但reduce只有在map到80%时,才开始干活。所以 20%—80%之间reduce是空闲的
在 2 代上,把 mapred-site.xml 有一个key值设置为1,可以在map达到100%是再启动reduce
磁盘阵列
冗余不做;如果运维工程师够格,就可以不做
特别在DN上不做
NN上可以做冗余
磁盘坏损
当磁盘支持热插拔;且不是OS盘时;损坏的磁盘可以直接拔
不能直接插入使用,需要format; 生成需要的目录
最小资源数
说的是内存
任务要运行需要:数据、CPU、内存, 更重要的是内存是否到位,决定任务是否可以执行
任务,当前机器资源不足,就把数据数据拷贝到有资源的机器上执行; 如果这种情况多,就会使得hadoop反映慢;
内存给多少? 有公式,看《hadoop技术内幕》
高配计算,低配存储
hadoop推测机制; 低配执行慢,推测机制,会在启动一台机器做同样的任务,哪个早完成,就以这台计算结果为准,其它执行这个任务的机器全部 Kill
执行 JOIN 操作时,要求把hadoop的推测机制关了;否则,会资源浪费
心跳中包含: 任务状态、资源使用情况、
虚拟化
指的是大数据领域下的虚拟化
虚拟化通常指虚拟化CPU、内存;在大数据领域只有CPU可以造假(虚拟化),内存不能。
为什么内存不能造假?
因为Swap会关闭; 造成虚拟不出内存
为什么CPU可以?
时间片到期,就会保存任务现场,执行任务切换
可以造多少合适?
1个物理核可以对应1个;最多2倍;不要4倍
因为过多会造成频繁的保存和还原现场;实际执行计算的时间太少
通常机器托管,给的是真的内存、磁盘(物理设备),但CPU是虚拟的,假的
在这里插入图片描述
Hadoop 1 代上
client发送任务到job,job管理task ,task初始化任务的执行环境
task 只运行2个map, 2个reduce;
所以,1代是运行在廉价的机器上
Hadoop 2代上
job ----> RM
Tsk —》NM; appmaster 执行 application, client 查询任务状态,直接有APP master 相应
combiner
在map端做一次reduce操作;但有限制,如计算平均值,因为在map端做了一次reduce 所以记录数会减少,导致计算出平均数比实际值大,所以,部分业务不能执行combiner
hadoop的压缩codec
lzo 需要单独安装; defalate \gzip \ bzip2 不需要安装
所有第三方都需要安装
piqe 压缩比高; 自带的;Spark上的SQL会用到
压缩应该注意
压缩本身是否支持切割;算法本身是否支持切割; 原始文件大小,存放在一个Block中;一个DN上
压缩比:
选择哪个压缩算法? 如果懒得找可以全部使用quique
应用程序的压缩优先级最高
应用程序
XML
配置文件
Job 调度器
hadoop 资源管理(slots)
资源划分,需要考虑: 调度算法、管理多少资源、谁能用、任务的等级。
FIFO 调度器
Fair调度器:公平调度器
Capacity 调度器:容量调度器
算法原理待扩展
Fair和Capacity 什么情况下优先级低的先执行?只要不争抢资源的情况下。
电商里面,查询时模糊查询,为什么速度回那么快?全文检索, ES, 数据放在内存?
按照分词,做index, 词库, 单机做不到(伦策), 所有转集群, Solr, 和ES
Solr和ES选哪个?
压力测试报告,项目上的。就很明显了,选择哪个
学完这些东西怎么用?-----> 架构
数据
主动
被动
买
爬
爬虫:有专门工具局用专门的工具; 看爬什么数据,选择什么工具; 爬完就可以直接存储或做分析
Flume / Kafka ===> Storme / Spark Streaming ===> 入存储
Storm 处理完随时可以入存储
Spark Streaming
SQL:可以直接返回Web 服务或存储
AI:接入到模型或算法,必须是增量的,不能是全亮的。 还可以再接一个SQL或者AI
存储
HDFS
本地:其次,选择本地
RDB: 最差;在 跟事务有关的情况下选它
Hive:Hive SQL在高版本下 Spark SQL更快(因为Spark 的维护人员少)
HBase:能不上就不上; redis, Cassandra+kylin,kudu+Kylin, Kudu+impala ,做Join时最高到一亿级别; 超过是把 impala 踢掉
Cassandra:无中心节点
Kudu
ES / Solr:不能放在同一个集群内。为什么?他们都要资源抢占,如果资源出现问题,所有的服务会全挂掉。包括HBase和Spark也不可以。
MPP DB:同上
Kafka
Impala
Presto:京东在用; 面向PB和TB级别;与Spark SQL比, Prseto的速度快,要经过大量的优化才可以达到Presto的效果(成本高)
Redis:集群必须要上UPS;是否需要落磁盘,自己定
等等
如框架继续要CPU和内存,则不能部署到同一个集群内
查询
在哪里存就在哪里查
分析
数据挖掘
Hive
仓库:什么都可放,历史数据
可以自定义函数
没有专门的数据格式:字段的格式
为什么要MySQL或Orale铁环Derby? 解决单Session和元数据在任何时候都可以看到和可以被使用
Hive 不要使用2.1.1 因为它有缺陷
Hive 安装
给Hive创建一个单独的库
MySQL 建库和用户
mysql -uroot -p123456
create database hive1 default character set latin1; 存中文不会乱码?因为它里边存的是MetaData,里边没有中文; 为什么不用UTF-8? 数据写入的时候,会超出字段长度
create user ‘hive1’@’%’ identified by ‘hive1’;
grant all on hive1 to hive1; // 删除
grant all on hive1.* to hive1@‘localhost’ identified by ‘hive1’; // 远端登录的密码
flush privileges; /// 使其生效
mysql -uhive1 -phive1 //测试用户可以登录(即可用)
解压缩 hive: tar -zxvf apache-hive-2.3.3-bin.tar.gz
配置XML文件:hive-site.xml
规范操作下, /user/hive/warehouse 都是表; 在HDFS上
把MySQL 的 Jar 包拷贝到 Hive的 lib目录下
启动Hadoop: ./start-all.sh
schematool
./schematool -dbType mysql -initSchema
到现在Hive安装完成,但没有启动