火花성능튜닝은시스템이사용하는메모리,코어와인스턴스를대상으로기록할설정을조정하는프로세스를가리킵니다。이프로세스를거치면火花에서흠잡을데없는성능을보장할수있으며,火花에서리소스병목현상을예방하는효과도있습니다。
메모리사용량을줄이기위해火花抽样를직렬화형식으로저장해야할수도있습니다。데이터직렬화는또한네트워크성능이우수한지결정하는입니다。Spark성능면에서좋은결과를얻으려면다음과같이하면됩니다。
Spark가지원하는직렬화라이브러리는다음의두가지입니다。
메모리사용량을튜닝할때눈에띄는세가지측면이있습니다。
메모리사용량을줄이는한가지방법으로오버헤드를발생시킬수있는java기능을피하는것이있습니다。이렇게하기위한몇가지방법을소개하면다음과같습니다。
java는프로그램이이전에저장한RDD와관련한대량의”변동(客户端)을피하기위해오래된개체를버리고새개체를저장할공간을만듭니다。하지만개체가적은데이터구조를사용하면비용이대폭절감됩니다。링크된목록대신int어레이를사용하는것이대적예입니다。아니면개체를직렬화된형식으로사용하여각抽样파티션마다개체가하나씩만포함되도록하는방법도있습니다。
우수한성능을확보하려면효율적메모리사용이필수적입니다。Spark는메모리를주로스토리지와실행용도로사용합니다。스토리지메모리는나중에다시사용할데이터를캐시하는데쓰입니다。반면실행메모리는섞기(shuffle)정렬,조인(加入)과집계연산에쓰입니다。메모리경합으로tmp해Apache Spark에는다음과같은세가지문제점이생깁니다。
정적으로미리메모리를예약하는방식으로경합을방지하는것이아니라,경합이발생했을때멤버들이강제로메모리를버리도록(泄漏)하는방식으로문제를해결할수있습니다。