Hadoop HDFS в режиме HA

Hadoop – это сво­бод­но рас­про­стра­ня­е­мый набор ути­лит, биб­лио­тек и фрейм­ворк для раз­ра­бот­ки и выпол­не­ния рас­пре­де­лён­ных про­грамм, рабо­та­ю­щих на кла­сте­рах из сотен и тысяч узлов. Эта осно­во­по­ла­га­ю­щая тех­но­ло­гия хра­не­ния и обра­бот­ки боль­ших дан­ных (Big Data) явля­ет­ся про­ек­том верх­не­го уров­ня фон­да Apache Software Foundation.

Из чего состоит Hadoop: концептуальная архитектура

Изна­чаль­но про­ект раз­ра­бо­тан на Java в рам­ках вычис­ли­тель­ной пара­диг­мы MapReduce, когда при­ло­же­ние раз­де­ля­ет­ся на боль­шое коли­че­ство оди­на­ко­вых эле­мен­тар­ных зада­ний, кото­рые выпол­ня­ют­ся на рас­пре­де­лен­ных ком­пью­те­рах (узлах) кла­сте­ра и сво­дят­ся в еди­ный резуль­тат [1].

Про­ект состо­ит из основ­ных 4-х модулей:

  1. Hadoop Common – набор инфра­струк­тур­ных про­грамм­ных биб­лио­тек и ути­лит, кото­рые исполь­зу­ют­ся в дру­гих реше­ни­ях и род­ствен­ных про­ек­тах, в част­но­сти, для управ­ле­ния рас­пре­де­лен­ны­ми фай­ла­ми и созда­ния необ­хо­ди­мой инфра­струк­ту­ры [1];
  2. HDFS – рас­пре­де­лён­ная фай­ло­вая систе­ма, Hadoop Distributed File System – тех­но­ло­гия хра­не­ния фай­лов на раз­лич­ных сер­ве­рах дан­ных (узлах, DataNodes), адре­са кото­рых нахо­дят­ся на спе­ци­аль­ном сер­ве­ре имен (масте­ре, NameNode) [2]. За счет дуб­ли­ро­ва­ния (репли­ка­ции) инфор­ма­ци­он­ных бло­ков, HDFS обес­пе­чи­ва­ет надеж­ное хра­не­ние фай­лов боль­ших раз­ме­ров, поблоч­но рас­пре­де­лён­ных меж­ду узла­ми вычис­ли­тель­но­го кла­сте­ра [1];
  3. YARN – систе­ма пла­ни­ро­ва­ния зада­ний и управ­ле­ния кла­сте­ром (Yet Another Resource Negotiator), кото­рую так­же назы­ва­ют MapReduce 2.0 (MRv2) – набор систем­ных про­грамм (демо­нов), обес­пе­чи­ва­ю­щих сов­мест­ное исполь­зо­ва­ние, мас­шта­би­ро­ва­ние и надеж­ность рабо­ты рас­пре­де­лен­ных при­ло­же­ний [3]. Фак­ти­че­ски, YARN явля­ет­ся интер­фей­сом меж­ду аппа­рат­ны­ми ресур­са­ми кла­сте­ра и при­ло­же­ни­я­ми, исполь­зу­ю­щих его мощ­но­сти для вычис­ле­ний и обра­бот­ки дан­ных [1];
  4. Hadoop MapReduce – плат­фор­ма про­грам­ми­ро­ва­ния и выпол­не­ния рас­пре­де­лён­ных MapReduce-вычис­ле­ний, с исполь­зо­ва­ни­ем боль­шо­го коли­че­ства ком­пью­те­ров (узлов, nodes), обра­зу­ю­щих кластер.

Где и зачем используется Hadoop

Выде­ля­ют несколь­ко обла­стей при­ме­не­ния тех­но­ло­гии [4]:

  • поис­ко­вые и кон­текст­ные меха­низ­мы высо­ко­на­гру­жен­ных веб-сай­тов и интер­нет-мага­зи­нов (Yahoo!, Facebook, Google, AliExpress, Ebay и т.д.), в т.ч. для ана­ли­ти­ки поис­ко­вых запро­сов и поль­зо­ва­тель­ских логов;
  • хра­не­ние, сор­ти­ров­ка огром­ных объ­е­мов дан­ных и раз­бор содер­жи­мо­го чрез­вы­чай­но боль­ших файлов;
  • быст­рая обра­бот­ка гра­фи­че­ских дан­ных, напри­мер, газе­та New York Times с помо­щью хадуп и Web-сер­ви­са Amazon Elastic Compute Cloud (EC2) все­го за 36 часов пре­об­ра­зо­ва­ла 4 тера­бай­та изоб­ра­же­ний (TIFF-кар­тин­ки раз­ме­ром в 405 КБ, SGML-ста­тьи раз­ме­ром в 3.3 МБ и XML-фай­лы раз­ме­ром в 405 КБ) в PNG-фор­мат раз­ме­ром по 800 КБ

В дан­ной ста­тье мы раз­бе­рем как под­нять Hadoop кла­стер c HDFS в режи­ме HA.

Будем исполь­зо­вать:

  • CentOS 7
  • 2 сер­ве­ра будут NameNode’ами в режи­ме Active и Standby
  • 3 сер­ве­ра для DataNode с фак­то­ром репли­ка­ции = 3

Основ­ная идея HDFS исполь­зо­вать его без точек мон­ти­ро­ва­ния на конеч­ных клиентах.

Режим High Availability появил­ся в Hadoop с вер­сии 2.x для реше­ния про­бле­мы с еди­ной точ­кой вхо­да в отли­чие от вер­сии Hadoop 1.х. Это было узкое место. Сей­час реа­ли­зо­ва­на кон­цеп­ция Master/Slave для NameNode, кото­рые в свою оче­редь сле­дят за DataNode.

Архи­тек­ту­ра HDFS HA

Отка­зо­устой­чи­вость.

Apache Zookeeper — служ­ба, обес­пе­чи­ва­ю­щая реги­стра­цию всех собы­тий и отве­ча­ю­щая за реа­ли­за­цию функ­ци­о­на­ла отка­зо­устой­чи­во­сти в кластере.

ZookeerFailoverController (ZKFC) явля­ет­ся кли­ен­том Zookeeper, кото­рый кон­тро­ли­ру­ет и управ­ля­ет ста­ту­сом NameNode. Каж­дая из NameNode содер­жит ZKFC. ZKFC отве­ча­ет за мони­то­ринг состо­я­ния NameNodes — актив­ный (Active) и пас­сив­ный режи­мы (Standby/Passive).

Служ­бы на актив­ной NameNode:

  • Zookeeper
  • Zookeeper Fail Over controller
  • JournalNode
  • NameNode

Служ­бы на пас­сив­ной NameNode:

  • Zookeeper
  • Zookeeper Fail Over controller
  • JournalNode
  • NameNode

Служ­бы на DataNode:

  • Zookeeper
  • JournalNode
  • DataNode
Сер­вер IP Hostname
Active NameNode 192.168.0.99 nn1.cluster.com или nn1
Standby NameNode 192.168.0.100 nn2.cluster.com или nn2
DataNode 1 192.168.0.101 dn1.cluster.com или dn1
DataNode 2 192.168.0.102 dn2.cluster.com или dn2
DataNode 3 192.168.0.103 dn3.cluster.com или dn3

Обнов­ля­ем систе­му, уста­нав­ли­ва­ем Java на все ноды: