天天看点

Hadoop实战-part5

当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安装完成,但没有启动

继续阅读