当前位置:首页>开发>正文

集群瓶颈为什么是磁盘io 为什么Hadoop集群中机器台数多反而执行速度慢

2023-06-15 22:58:56 互联网 未知 开发

 集群瓶颈为什么是磁盘io 为什么Hadoop集群中机器台数多反而执行速度慢

集群瓶颈为什么是磁盘io

首先,瓶颈一般是指在整体中的关键限制因素,磁盘IO是指数据往磁盘读写,现在的科技速度最快的属固态硬盘了,读的速度很大有1G/秒左右,但是写入速度最快几百兆/秒,集群中数据在cpu和内存之间速度快的可以忽略,处理速度也可以忽略,相对这些速度,磁盘读写就显得慢了,旁贷一下现在好一点的数据库oracle存储数据都是写日志先暂存然后等机器空闲再写入到磁盘,这些都是为了提高效率,不然你执行一条操作等半天。大概就这样。希望能帮到您!

为什么Hadoop集群中机器台数多反而执行速度慢

一般都是内存问题:
1、内存容量不足,应用程序抢占内存空间会导致死机。可腾讯电脑管家卸载不要的软件
2、应用程序内存空间分配错误会导致死机。
3、内存质量不佳,应用程序写入内存的数据无法读取会导致死机。
4、多个应用程序在内存地址分配时发生冲突也会导致死机。
5、系统感染了毒,病毒大量在内存中复制导致应用程序可用内存不足从而产生应用程序内存分配冲突而导致死机用腾讯电脑管家彻底查杀病毒。

redis3.0集群性能瓶颈主要有哪些

Redis最初的使命是用高效的内存取代复杂繁重的数据库,如果从缓存服务器获取一个Key要经过二次定位,访问时间是原来单机
  缓存服务器的两倍,那样我们还不如直接用数据库呢。
  鉴于Redis3.0所谓的ASK 转向/MOVED 转向机制,网上推出了JAVA版的Redis3.0客户端库jedis、C 版的Redis3.0客户端
  库ACL,他们都支持根据Redis服务器居返回"MOVED"信息进行二次定位数据访问,而且还有在主备切换的情况下访问备机的功能,
  正常情况下Redis3.0集群要部署3台主机和3台备机,这样客户端就要同时维持这6台服务器的长连接,像我们公司的系统有上百个
  进程,一个线程就要维持6台缓存服务器的长连接,一个进程拥有多个线程,总的算起来差不多上千个缓存服务器的长连接,这无异于饮鸩止渴。

在hadoop集群中,下面哪一项限制了扩展性

adoop性能优化:Hadoop机架感知实现及配置:分布式的集群通常包含非常多的机器,由于受到机架槽位和交换机网口的限制,通常大型的分布式集群都会跨好几个机架,由多个机架上的机器共同组成一个分布式集群。机架内的机器之间的网络速度通常都会高于跨机架机器之间的网络速度,并且机架之间机器的网络通信通常受到上层交换机间网络带宽的限制。

有关hadoop的问题

hdfs本身提供http访问方式,即使用Rest方式。
参考:http://hadoop.apache.org/docs/r2.3.0/hadoop-hdfs-httpfs/index.html

如何评估hadoop集群计算能力

计算能力调度器介绍
Capacity Scheduler支持以下特性:
(1) 计算能力保证。支持多个队列,某个作业可被提交到某一个队列中。每个队列会配置一定比例的计算资源,且所有提交到队列中的作业共享该队列中的资源。
(2) 灵活性。空闲资源会被分配给那些未达到资源使用上限的队列,当某个未达到资源的队列需要资源时,一旦出现空闲资源资源,便会分配给他们。
(3) 支持优先级。队列支持作业优先级调度(默认是FIFO)
(4) 多重租赁。综合考虑多种约束防止单个作业、用户或者队列独占队列或者集群中的资源。
(5) 基于资源的调度。 支持资源密集型作业,允许作业使用的资源量高于默认值,进而可容纳不同资源需求的作业。不过,当前仅支持内存资源的调度。
3. 计算能力调度器算法分析
3.1 涉及到的变量
在capacity中,存在三种粒度的对象,分别为:queue、job和task,它们均需要维护的一些信息:
(1) queue维护的信息
@ queueName:queue的名称
@ ulMin:每个用户的可用的最少资源量(所有用户均相同),需用户在配置文件中指定
@ capacityPercent:计算资源比例,需用户在配置文件中指定
@ numJobsByUser:每个用户的作业量,用以跟踪每个用户提交的作业量,并进行数量的上限限制。
该队列中map 或reduce task的属性:
@ capacity:实际的计算资源量,这个随着tasktracker中slot数目变化(用户可能在添加或减少机器节点)而动态变化,大小为:capacityPercent*mapClusterCapacity/100
@ numRunningTasks:正在running的task数目
@ numSlotsOccupied:正在running的task占用的slot总数,注意,在Capacity Scheduler中,running task与slot不一定是一一对应的,每个task可获取多个slot,这主要是因为该调度支持内存资源调度,某个task可能需要多个slot包含的内存量。
@ numSlotsOccupiedByUser:每个用户的作业占用slot总数,用以限制用户使用的资源量。
(2) job维护的信息
priority:作业优先级,分为五个等级,从大到小依次为:VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOW
numMapTasks/ numReduceTasks :job的map/reduce task总数
runningMapTasks/ runningMapTasks:job正在运行的map/reduce task数
finishedMapTasks/finishedReduceTasks:job已完成的map/reduce task数
……
(3) task维护的信息
task开始运行时间,当前状态等
3.2 计算能力调度算法
当某个tasktracker上出现空闲slot时,调度器依次选择一个queue、(选中的queue中的)job、(选中的job中的)task,并将该slot分配给该task。下面介绍选择queue、job和task所采用的策略:
(1) 选择queue:将所有queue按照资源使用率(numSlotsOccupied/capacity)由小到大排序,依次进行处理,直到找到一个合适的job。
(2) 选择job:在当前queue中,所有作业按照作业提交时间和作业优先级进行排序(假设开启支持优先级调度功能,默认不支持,需要在配置文件中开启),调度依次考虑每个作业,选择符合两个条件的job:[1] 作业所在的用户未达到资源使用上限 [2] 该TaskTracker所在的节点剩余的内存足够该job的task使用。
(3) 选择task,同大部分调度器一样,考虑task的locality和资源使用情况。(即:调用JobInProgress中的obtainNewMapTask()/obtainNewReduceTask()方法)
综合上述,公平调度器的伪代码为:
// CapacityTaskScheduler:trackTracker出现空闲slot,为slot寻找合适的task

ListassignTasks(TaskTrackerStatus taskTracker) { sortQueuesByResourcesUsesage(queues) for queue:queues {

最新文章