本文由 ImportNew - 唐尤华 翻译自 apmblog.compuware.com。如需转载本文,请先参见文章末尾处的转载要求。 最近几周里,我和同事参加了在旧金山港湾区的Hadoop和Cassandra高峰论坛。如此密集地与众多有经验的大数据专家进行探讨是一件非常享受的事情。感谢
本文由 ImportNew - 唐尤华 翻译自 apmblog.compuware.com。如需转载本文,请先参见文章末尾处的转载要求。最近几周里,我和同事参加了在旧金山港湾区的Hadoop和Cassandra高峰论坛。如此密集地与众多有经验的大数据专家进行探讨是一件非常享受的事情。感谢我们的合作伙伴DataStax和Hortonworks主办了这场盛会!与此同时,我也看到性能问题已经成为了社区里讨论的主要内容。我们搜集了很多典型大数据性能问题的反馈,也惊讶于性能问题带来的挑战。因为与会者都是专家,因此通用性问题和基础的集群监控方法不在讨论之列。本文会介绍关于Hadoop和Cassandra的高级问题。
我整理了最有意思和最常见的Hadoop和Cassandra部署问题:
Hadoop焦点问题
Map Reduce数据本地性问题
数据本地性是Hadoop Map/Reduce的核心优势,map代码会在数据所处的节点上执行。然而有意思的是,很多人在实践中发现情况并非总是如此。他们发现了以下例外情况:
- 预测执行
- 异构的分布式集群
- 数据分布和位置
- 数据布局和输入分流
这些问题在大集群里出现更加频繁,也就是说数据节点越多本地化数据就越少。由于越大的集群完全相同的可能性就越小,一些节点的更新速度会比其他节点更快导致计算比例失衡。预测执行即使没有本地数据也会占用计算能力。问题数据节点可能会计算其他内容,这会导致另一个节点执行非本地处理。问题的根源可能在数据布局和输入分流上。无论如何,处理非本地数据会造成网络的扩展性问题,使得网络成为瓶颈。不仅如此,由于数据本地性不容易观察诊断这些问题非常困难。
为了提高数据本地性,你首先需要检测你的任务(job)中哪些有数据本地性问题或者会随着时间性能下降。通过APM(每分钟操作次数)方案,你可以知道哪些任务访问了什么数据节点。解决本地性问题更为复杂,包括更改数据位置和数据布局、使用不同的调度器或者简单改变任务的映射器(mapper)和减速器槽(reducer slot)。接下来,通过执行同样的工作你可以验证新方案是否能带来更好的本地数据比率。
低效任务代码和Hadoop工作量“分析”
接着我们又证实了一个有趣的观点:很多Hadoop工作量非常低效。请注意,这不是Hadoop的问题而是执行任务的问题。然而,在更大的Hadoop集群里“分析”任务是最主要的痛点。仅仅黑盒方式的监控是不够的,传统的分析器不能应对Hadoop集群的分布式特点。针对这个问题,我们的解决方案得到了很多资深Hadoop开发者的认可。我们还收到了很多关于如何让我们的Hadoop任务“分析”更加有效的有趣反馈。
TaskTracker性能及其对置乱时间的影响
众所周知,置乱是Haddop Job中对性能影响最主要的因素。在很多Hadoop性能调优的文章里都描述了优化图中间的数据(比如使用组合其)、(使用拆分器)置乱分布和纯粹的读/合并性能(线程个数、管理低端内存)。但是很少有文章谈及降低特定TaskTracker速度,这种方案在很多资深“Hadooper”中间已经得到了广泛地讨论。
当计算节点处于高压状态、硬件能力不足或者进入层叠效果时,本地的TaskTracker就会受到负面影响。更简单地说,在大集群中的一些节点会因此降低性能!
结果就是TaskTracker节点不能为还原器提供快速置乱数据,或者可能在进行操作时发生错误。基本上所有还原器都会出现该问题,因为置乱是整个任务执行时间的瓶颈而且会不断增加。在小集群上我们可以监控一组运行的TaskTracker性能,然而在现实中的集群上这是不可行的。监控基于中枢的平均值会掩盖触发该问题的任务,所以不能确定究竟是哪个TaskTracker造成的问题以及背后的原因。
解决方法是采用基线方式,配置PurePath/PureStack模型。对TaskTracker请求做基线能够解决平均值和监控问题,通过这种方法,如果发生TaskTracker mapOutput性能问题我们可以得到即时通知,而且能够及时确认是哪个TaskTracker出现的问题。接下来,我们能够通过通过JVM主机的健康状况定位究竟是基础设施、Hadoop配置或是新操作系统造成了问题。最后,通过追踪所有任务、作业(task)以及mapOutput请求各自的任务,我们可以知道究竟是哪个任务触发了TaskTracker性能问题以及哪些任务受其影响。
NameNode和DataNode变慢
与TaskTracker类似,NameNode和DataNode也会对任务性能产生影响。NameNode或特定DataNode变慢会对整个集群产生显著的影响。解决的办法可以对请求建立基线,进行检测并自动检测性能退化。同样地我们也可以知道哪些任务和客户端受到NameNode和DataNode减速的影响,并判断是基础设施、高使用率还是服务发生的错误。
Cassandra 焦点问题
Spotify在Cassandra高峰论坛上的演讲是最棒的。如果你正在使用或者计划使用Cassandra强烈向你推荐!
读操作用时随着时间性能退化
在第一次部署Cassandra时运行速度非常快,但是读操作用时随着时间不断增加。实际上所有的操作随着时间推移都会有类似的问题,对跨SStable的读取和删除行操作都会导致死节点。所有问题都可以归咎于访问模式和模式设计错误,而且通常都与数据相关。如果你向同一行(row)长时间(几个月)不断写数据,那么这一行会扩散到很多SStable。读取该行数据将变得缓慢,然而访问更“新”的行(位于同一个SSTable)还是很快的 。对同一行不断进行删除和插入情况会更糟糕,不仅这一行的数据会到处扩散而且会充满很多死节点,读取时效率会非常恐怖。然而,平均值数据只是缓慢地增加(这就是均值效应)。实际上“老”行的性能会急剧下降,而“新”行的速度仍然很快。
为了避免这种情况的发生,在应用程序中绝不要经常删除数据,也绝对不要长时间向同一行写入数据。要发现这个问题你应当首先为Cassandra一组列(column)的读请求制作基线。与均值相比基线方法能够在分布式环境下检测变化,并通知你哪些请求会性能退化哪些仍然保持快速。除此之外,为实际终端用户的Cassandra请求进行分类能够助你快速定位问题。
慢节点会影响整个集群
与很多真实世界的应用程序一样,Cassandra节点会因为各种因素变慢(硬件、压缩、GC、网络、磁盘等)。?Cassandra是一个集群化数据库,每一行都在集群里存在很多次,每次写请求都会发送给包含该行的所有节点(甚至是级别相同的节点)。单个节点失效不是大问题,因为其他节点包含了相同的数据所有读写请求都能够继续正常进行。理论上一个超级慢的节点不会带来问题,除非我们明确指定向同一级别的“所有”节点请求数据。然而在内部,每个节点都有一个协调队列等待所有请求完成,即使他应当在请求完成时就马上向客户端作出回应。该队列能够应对一个超级慢的节点,并且迅速地指出单个节点不能响应请求。然而这会让这个集群不能响应任何请求。
这个问题的解决包含两方面。如果可以,使用一个类似Astyanax的令牌客户端。通过直接与包含数据的节点沟通,该客户端能够高效地跳过协调队列问题。除此之外,你应当对服务器节点的Cassandra请求建立基线,当节点变慢时给出警告。说起来奇怪,关闭问题节点也可以暂时解决问题,因为Cassandra能够几乎立刻处理该问题。
读往返次数太多/读数据量过大
Cassandra的另一个典型性能问题来自我们习惯了SQL,这个问题对于Cassandra入门者尤其典型。这是一个数据库设计问题,事务中包含了太多请求或读取大量数据。这不是Cassandra本身的问题,事实是进行太多请求或者读取大量数据会减慢实际事务的处理速度。这个问题可以很容易检测并且通过APM方法发现,而解决办法往往需要对代码和数据模型进行改动。
总结
Hadoop和Cassandra都是扩展性非常好的系统!但是通常这种可扩展性不能解决性能问题,二者都不能避免而且简单的误用也不能解决。
这些系统上出现的特定问题都不会在其他系统上出现。其他虽然不是新问题但是从未有在这样大规模的分布式系统上出现。由于可扩展性和规模的问题,这些问题都难于诊断(尤其是Hadoop)而且会产生巨大的影响(比如Cassandra集群停止)。性能分析专家可以举杯庆祝了,未来的很长一段时间他们都会有做不完的工作。
原文地址:关于Hadoop和Cassandra性能问题的讨论, 感谢原作者分享。

MySQL과 Sqlite의 주요 차이점은 설계 개념 및 사용 시나리오입니다. 1. MySQL은 대규모 응용 프로그램 및 엔터프라이즈 수준의 솔루션에 적합하며 고성능 및 동시성을 지원합니다. 2. SQLITE는 모바일 애플리케이션 및 데스크탑 소프트웨어에 적합하며 가볍고 내부질이 쉽습니다.

MySQL의 인덱스는 데이터 검색 속도를 높이는 데 사용되는 데이터베이스 테이블에서 하나 이상의 열의 주문 구조입니다. 1) 인덱스는 스캔 한 데이터의 양을 줄임으로써 쿼리 속도를 향상시킵니다. 2) B-Tree Index는 균형 잡힌 트리 구조를 사용하여 범위 쿼리 및 정렬에 적합합니다. 3) CreateIndex 문을 사용하여 CreateIndexIdx_customer_idonorders (customer_id)와 같은 인덱스를 작성하십시오. 4) Composite Indexes는 CreateIndexIdx_customer_orderOders (Customer_id, Order_Date)와 같은 다중 열 쿼리를 최적화 할 수 있습니다. 5) 설명을 사용하여 쿼리 계획을 분석하고 피하십시오

MySQL에서 트랜잭션을 사용하면 데이터 일관성이 보장됩니다. 1) STARTTRANSACTION을 통해 트랜잭션을 시작한 다음 SQL 작업을 실행하고 커밋 또는 롤백으로 제출하십시오. 2) SavePoint를 사용하여 부분 롤백을 허용하는 저장 지점을 설정하십시오. 3) 성능 최적화 제안에는 트랜잭션 시간 단축, 대규모 쿼리 방지 및 격리 수준을 합리적으로 사용하는 것이 포함됩니다.

MySQL 대신 PostgreSQL을 선택한 시나리오에는 다음이 포함됩니다. 1) 복잡한 쿼리 및 고급 SQL 기능, 2) 엄격한 데이터 무결성 및 산 준수, 3) 고급 공간 기능이 필요하며 4) 큰 데이터 세트를 처리 할 때 고성능이 필요합니다. PostgreSQL은 이러한 측면에서 잘 수행되며 복잡한 데이터 처리 및 높은 데이터 무결성이 필요한 프로젝트에 적합합니다.

MySQL 데이터베이스의 보안은 다음 조치를 통해 달성 할 수 있습니다. 1. 사용자 권한 관리 : CreateUser 및 Grant 명령을 통한 액세스 권한을 엄격히 제어합니다. 2. 암호화 된 전송 : 데이터 전송 보안을 보장하기 위해 SSL/TLS를 구성합니다. 3. 데이터베이스 백업 및 복구 : MySQLDump 또는 MySQLPump를 사용하여 정기적으로 백업 데이터를 사용하십시오. 4. 고급 보안 정책 : 방화벽을 사용하여 액세스를 제한하고 감사 로깅 작업을 가능하게합니다. 5. 성능 최적화 및 모범 사례 : 인덱싱 및 쿼리 최적화 및 정기 유지 보수를 통한 안전 및 성능을 모두 고려하십시오.

MySQL 성능을 효과적으로 모니터링하는 방법은 무엇입니까? Mysqladmin, Showglobalstatus, Perconamonitoring and Management (PMM) 및 MySQL Enterprisemonitor와 같은 도구를 사용하십시오. 1. MySQLADMIN을 사용하여 연결 수를보십시오. 2. showglobalstatus를 사용하여 쿼리 번호를보십시오. 3.pmm은 자세한 성능 데이터 및 그래픽 인터페이스를 제공합니다. 4. MySQLENTERPRISOMITOR는 풍부한 모니터링 기능 및 경보 메커니즘을 제공합니다.

MySQL과 SqlServer의 차이점은 1) MySQL은 오픈 소스이며 웹 및 임베디드 시스템에 적합합니다. 2) SQLServer는 Microsoft의 상용 제품이며 엔터프라이즈 수준 애플리케이션에 적합합니다. 스토리지 엔진의 두 가지, 성능 최적화 및 응용 시나리오에는 상당한 차이가 있습니다. 선택할 때는 프로젝트 규모와 향후 확장 성을 고려해야합니다.

고 가용성, 고급 보안 및 우수한 통합이 필요한 엔터프라이즈 수준의 응용 프로그램 시나리오에서는 MySQL 대신 SQLServer를 선택해야합니다. 1) SQLServer는 고 가용성 및 고급 보안과 같은 엔터프라이즈 수준의 기능을 제공합니다. 2) VisualStudio 및 Powerbi와 같은 Microsoft Ecosystems와 밀접하게 통합되어 있습니다. 3) SQLSERVER는 성능 최적화에서 우수한 성능을 발휘하며 메모리 최적화 된 테이블 및 열 스토리지 인덱스를 지원합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

WebStorm Mac 버전
유용한 JavaScript 개발 도구
