Hadoop

: *Гарын авлага: Hadoop*

**Apache Hadoop** (дуудлага: *Апаче Хадүүп*) нь олон тооны бие даасан, сүлжээгээр холбоотой компьютеруудыг ашиглан маш том хэмжээний өгөгдөлтэй ажиллах тооцоолол хийх боломжийг олгодог нээлттэй эхийн програм хангамжийн бүрдэл юм. 

Hadoop нь бүхэлдээ Hadoop Kernel, MapReduce, HDFS болон олон тооны (Жишээ нь: Apache Hive, Apache Hbase, болон бусад) төслүүдээс бүрдэнэ. Ерөнхийдөө MapReduce тооцоолол ашиглан их өгөгдлийг тархмал маягаар хадгалж тооцоолол хийх боломжийг бүрдүүлнэ.

Hadoop бол Java хэл дээр бичигдсэн Апаче-ийн топ зэрэглэлийн төсөл бөгөөд үүнтэй хамааралтай төслүүдийнхээ (Жишээ нь: Hive, HBase, Zookeeper болон бусад) хамтаар дэлхийн нийтээрээ хөгжүүлэн мөн хэрэглэгдэж байна.

## Ашиглах үндэслэл
Техник технологийн хурдацтай хөгжиж буй өнөө үед цаг, минут тутамд асар их өгөгдлүүд шинээр үүсэж байна. 2000 онд компьютерийн хатуу дискний дундаж хэмжээ 10КВ байсан бол өнөөдөр фейсбүүкд өдөрт шинээр 500ТВ өгөгдөл нэмэгдэж байна.

2013 оны байдлаар дэлхий дээрх нийт өгөгдлийн 90 хувь нь сүүлийн 2 жилийн дотор бий болсон байдаг ба үүний 70 хувийг ямар нэгэн аж ахуйн нэгж, байгууллага биш харин хувь хүн бий болгосон гэсэн судалгааг IBM-ээс гаргажээ. Иймээс асар их өгөгдлийг зөв арга технологор боловсруулж, өгөгдөлд агуулагдаж байгаа үнэ цэнэтэй мэдээллийг гаргаж авах нь чухал ач холбогдолтой юм.

1990 оноос өмнө дэлхий даяар бүртгэлийн програм хангамж руу анхаарлаа хандуулдаг байсан бөгөөд үүний үр дүнд хангалттай их өгөгдлийг цуглуулж чадсан. Уг өгөгдөл нь одоо ч маш хурдацтайгаар өсөн нэмэгдсээр байгаа билээ. Өөрөөр хэлбэл бүртгэлийн програм хангамжуудыг хөгжүүлэх ажил маш сайн хийгдсэн бөгөөд одоогийн байдлаар тэдгээрээс цугларсан өгөгдлүүдийг хэрхэн зөв зохион байгуулж хадгалах, хэрхэн хэрэгтэй мэдээлэл, мэдлэг болгон гаргах зэрэгт төвлөрсөн судалгаанууд хийгдсээр байна. Боловсруулалт хийгдээгүй их өгөгдлийн үнэ цэнэ хамгийн бага байх бөгөөд түүнийг нэгтгэн дүгнэх, задлан шинжлэх аргаар мэдээлэл гаргаж авах, цаашид шийдвэр гаргах төвшний мэдлэгийг гаргаж авах тусам түүний үнэ цэнэ өсөж байна. Эндээс үзвэл өгөгдлийг зүгээр цуглуулж хадгалах биш түүнийг цааш нь улам их боловсруулах шаардлагатай байгаа юм. 

Худалдаа үйлчилгээ, бизнесийг салбарт үр ашигтай мэдээллийг гаргаж авахын тулд маш их өгөгдлийг цуглуулсаар байдаг бөгөөд өгөгдлийн хэмжээ эрчимтэй өсөх тусам тэрхүү мэдээллийг уламжлалт өгөгдлийн сан удирдах системд хадгалах нь өртөг ихтэй болж байна. Их хэмжээний мэдээлэлтэй ажилладаг Yahoo, Facebook, Google гэх мэт томоохон компаниуд энгийн техник хангамж дээр их өгөгдлийг хадгалах болон боловсруулахад MapReduce аргыг ашигладаг бөгөөд Hadoop нь уг аргыг хэрэгжүүлсэн нь хамгийн их хэрэглэгдэж байгаа алдартай нээлттэй эх бүхий технологи болсон юм. 

## Hadoop фреймворк
Hadoop технологийг Apache -аас гаргасан бөгөөд энэ технологи нь найдвартай ажиллагаатай, өргөтгөх боломжтой, тархсан тооцоололд зориулагдсан нээлттэй эх юм. Нэг серверийг мянган машинаар өргөтгөх боломжтойгоор зохиогдсон бөгөөд асар их өгөгдлийг болон тооны машинуудад тархаан байрлуулдаг. Энэ нь тусдаа ажиллаж байгаа машинуудаасс аль нэг нь ажиллагаагүй болоход түүнтэй холбогдож байсан програм хангамж өөр нэг машинтэй холбоо тогтоож үйл ажиллагаагаа хэвийн үргэлжлүүлэх боломжтой болж байгаа юм. Төвлөрсөн биш тооцоолох арга нь бодит хэрэглээ болно. Google -н нэг хайлтын хүсэлтэнд 0.2 секундээс богино хугацаанд хариу өгөхийн тулд 1000 компьютер зэрэг боловсруулалт хийдэг. Ийм тооцоолох аргад зориулагдсан нээлттэй эхийн Hadoop програмын эрэлт жил бүр 58 хувь нэмэгдэж 2020 гэхэд $1 тэрбумын зах зээлтэй болохоор байна. Их өгөгдлийг зөв ашигласнаар эрүүлийг хамгаалах салбар жилд $300 саяыг хэмнэх боломжтой. Өнөөдрийн байдлаар үүсч байгаа нийт датаны дөнгөж 0.5 хувь нь боловсруулагдаад байгаа нь энэ шинэ салбар хэр их ирээдүйтэйг харуулж байна. 

### Hadoop фреймворкын давуу тал
**Уян хатан :** 
Hadoop нь олон тооны эх үүсвэрүүдээс бүтэцлэгдсэн болон бүтэцлэгдээгүй өгөгдлүүдийн хүлээн авч чаддаг. 

**Өргөтгөх боломжтой :** 
Шаардлага гарвал шинэ зангилаа (өгөгдлийг тархаан байрлуулах зорилготой сервер)

**Найдвартай ажиллагаа :** 
Ямар нэг зангилаа нь ажиллагаагүй болоход системийн үйл ажиллагаа доголдохгүй өгөгдлийн өөр байршилтай холбогдон ажилладаг. 

**Зэрэгцээ боловсруулалт хийдэг **

**Компьютерийн хувьд өндөр үзүүлттэй байх шаардлагагүй**

**Нээлттэй эх** зэрэг олон давуу талуудтай юм.

## HDFS файл систем
HDFS нь өгөгдлийг олон газар хувааж тархан байрлуулж нэг цул юм шиг ажиллуулдаг файл систем юм. Их өгөгдлийг үнэтэй том сервер дээр байрлуулахаас илүү өртөг багатай энгийн хэрэглэгчдийн компьютеруудад хувааж тархаан байрлуулах нь дээр гэж үзэн уг системийг үүсгэсэн бөгөөд энэ систем нь алдаанд тэсвэртэй ажиллах давуу талтай. HDFS нь өгөгдлийг жижиглэн хуваагаад, тэдгээрийг олон серверүүдэд тархаан байрлуулж, зэрэгцээгээр боловсруулдаг систем юм. Бас нэг давуу тал нь олон газар хуваагдсан файлын хэсэг бүрийг бусад сервер рүү хуулбарлан байрлуулснаар аль нэг серверт алдаа гарахад бусад серверээс өгөгдлийг сэргээн үйл ажиллагааны хэвийн байдлыг хангадаг. 

**NameNode :** HDFS файл системийн цөм нь бөгөөд файл системийн бүх файлуудын мод бүтцийг хадгалдаг. Өөрөөр хэлбэл өгөгдлийг өөрөөр нь хадгалдаггүй харин файлуудыг кластер дээр хаана хаана тархаан байрлуулсан талаарх мэдээллийг хадгалдаг. Хэрэглэгч ямар нэг файлыг олохын тулд NameNode -тэй харьцдаг. NameNode өөрт байгаа файлуудын тухай мэдээллээс DataNode-г олж өгдөг. 

**DataNode :** энэ хэсэгт файлын өгөгдлийг хадгалдаг.

## MapReduce програмчлал
Их өгөгдлийг зэрэгцээгээр боловсруулах програм хангамжийн фрэймворк юм. Энэхүү өгөгдөл боловсруулах арга н Google-ээс үүсэлтэй бөгөөд одоогийн байдлаар Apache Hadoop -с гадна их өгөгдөлтэй ажилладаг

хэрэгслүүд уг фрэймворкийг ашиглаж байна. MapReduce нт бүтэцлэгдсэн болон бүтэцлэгдээгүй өгөгдлүүдтэй ажиллаж чаддагаараа давуу талтай. MapReduce фрэймворк нь map() болон reduce() гэсэн хоёр үндсэн функцээс бүрддэг.  Map() нь процессыг жижиглэн хуваах ба хуваалт бүр нь зэрэг ажилладаг. Reduce() нь хуваасан процесс бүрийн гаргасан үр дүнг нэгтгэж эцсийн үр дүн гаргах үйлдлийг хийдэг.

## Hive өгөгдлийн агуулах
Hadoop технологийг ашиглан өгөгдөл хадгалах гэдэг нь HDFS файл систем рүү хандах бөгөөд файл системээс өгөгдлийг унших, боловсруулах нь өгөгдлийн сан удирдах системээс илүү төвөгтэй болдог. Учир нь та хэрэтэй өгөгдлөө гаргаж авахын тулд файлыг бүхэлд нь уншиж, түүнээс хайлт хийх, дээр нь тооцоолол хийх зэрэг бүх үйлдлээ өөрөө програмчлах шаардлагатай болдог. Үүнийг хялбарчлахын тулд Hadoop дээр суурилсан өгөгдлийн сангийн Hive програмыг ашиглаж боловсруулалтаа хийдэг. Hive програм нь хэрэглэгч HDFS файл систем рүү хандахгүйгээр, HiveQL гэдэг SQL -тэй төсэтй өгөгдлийн санг ашиглан файл системээс хэрэгтэй мэдээллээ хялбархан гаргаж авах боломжтой болсон. Өөрөөр хэлбэл хэрэглэгч Hadoop системээс хялбарханаар мэдээлэл гаргаж авах боломжийг олгох зорилготой, өгөгдлийн агуулах үүсгэх нээлттэй эхийн програм юм. Apache -с 2012 онд Hive -ийн анхны хувилбарыг гаргаж байсан бөгөөд Java VM суусан бүх платформ дээр ажиллах боломжтойгоор давуу юм. Hive нь SQL -тэй адил өгөгдлийн төрөл, хүснэгтийг дамждэг бөгөөд HiveSQL асуулгын хэлийг ашигладаг. Facebook -д 700 ТВ хэмжээтэй өгөгдлийг хадгалахад арван хэдэн мянган хүснэгтийг агуулсан Hive өгөгдлийн агуулахыг ашигладаг бөгөөд сард 200-с олон хэрэглэгч уг агуулахаас шинжлгээ болон тайлан гаргаж авдаг байна. CLI, Web interface, Thrift сервер гэсэн гурван аргаар Hive өгөгдлийн агуулах руу хандаж болно. CLI (Command Line Interface) болон Web interface нь хэрэглэгчийн програм хангамжаар дамжихгүй шууд өгөгдөл рүү хандах боломжийг олгодог бол хэрэглэгч өөрийн зохиосон програмаас Hive өгөгдлийн агуулах руу хандахын тулд эхлээд thrift server -ийг асаасан байх шаардлагатай. Уг сервер нь хэрэглэгчээс ямар нэг програм ашиглан Hive өгөгдлийн агуулах руу HiveQL агуулгыг явуулж мэдээлэл авах боломжийг олгодог.
Hadoop системийн үйл ажиллагааг илүү сайжруулахын тулд түүн дээр суурилсан олон шинэ технологиуд бий болсон. Үүний нэг нь Hive өгөгдлийн агуулахын програм юм. Hive өгөгдлийн агуулахыг hive-site.xml файлын тохиргоо хийх файлыг тайлбарлав. 
* **Mapred.reduce.tasks**
 Боломжит reducer -н тоог тохируулдаг бөгөөд анх 1 гэж тохируулагдсан байдаг. Энэ нь reducer -н тоог автоматаар тохируулна гэсэн утгатай.
* **Hive.exec.scratchdir**
 Hive асуулгад ашиглагдаж байгаа өгөгдлүүдийг түр хадгалах зориулалттай хавтасын замыг зааж өгдөг. Hive асуулга ажиллаж дуусахад уг хавтасын өгөгдлүүд устдаг.
* **Hive.metestore.warehouse.dir**
 Hive өгөгдлийн агуулахад үүссэн хүснэгтүүдийг хадгалах зориулалттай HDFS файл систем дээрх байрлал

## Sqoop өгөгдөл дамжуулах хэрэгсэл
2012 оны гурван сард Apache -аас Sqoop хэмээх өгөгдөл дамжуулах хэрэгслийг гаргаж ирсэн бөгөөд Sqoop нь Hadoop болон өгөгдлийн сан удирдах системүүдийн хооронд багц өгөгдлийг дамжуулах үүрэгтэй холболтын хэрэгсэл юм. Өгөгдлийн сан удирдах системээс Hadoop систем рүү өгөгдөл оруулах, Hadoop системээс өгөгдлийн сан удирдах систем рүү өгөгдөл гаргах гэсэн хоёр чиглэлтэйгээр ажилладаг. Өөрөөр хэлбэл холбоост өгөгдлийн санд байгаа өгөгдлийг HDFS, Hive болон HBase -рүү ачаалахаас гадна эдгээрт хадгалагдсан өгөгдлийг буцаагаад холбоост өгөгдлийн сан руу зөөдөг юм.

## Hadoop хаана ашиглаж байна
* IBM
* Samsung
* Hp
* Yahoo
* Intel
* Twitter
* Amazon гэх мэт том компаниуд Hadoop -г ашиглаж байгаа бөгөөд үүнээс 2 компанийг нь авч дэлгэрэнгүй тайлбарлав.

### Facebook
Yahoo, Facebook, Ebay гэх мэт томоохон байгууллагууд нь тайлан тооцоо таамаглал дэвшүүлэх системийнхээ өгөгдлийг Hadoop технологи ашиглан хадгалдаг байна. Эдгээрээс хамгийн том Hadoop кластер ашигладаг байгууллага нь Facebook юм. Facebook компани анх дүн шинжилгээ хийхэд зориулагдсан өгөгдлийг олон машинуудад тархаан байгуулахдаа MySQL өгөгдлийн санг ашигладаг байсан бөгөөд Python скриптээр боловсруулалтыг нь хийдэг байжээ. Гэвч тархаан байрлуулсан өгөгдлүүдийг буцаагаад нэгтгэхэд өгөгдлийн санд ачаалал үүсэх, удах үр дүн муутай байх зэрэг асуудлууд тулгарч эхэлсэн байна. Тиймээс 10ТВ хэмжээтэй  өгөгдлийн агуулахыг байгуулсан  нь жижиг, дунд байгууллагуудад тохиромжтой шийдэл байсан юм. Учир нь Facebook -д сэтгэгдэл бүртгэгдсэн эхний өдөр гэхэд 400 GB өгөгдөл үүссэн байна. Тиймээс өгөгдөл цуглуулах болон боловсруулах давхаргаа Hadoop кластераар сольсон байна.

### Ebay
Ebay нь 120 сая идэвхитэй хэрэглэгчтэй өдөрт 300 сая хайлт хийгддэг, 350 сая боломжит бүтээгдэхүүнүүдтэй онлайнаар худалдаа явуулдаг олон улсын байгууллага юм. Тиймээс хэрэглэгчийн дарсан даралт болон бүтээгдэхүүн, гүйлгээ, үйлчлүүлэгч, санал хүсэлт, дуудлага худалдааны өгөгдлүүдийг хадгалж боловсруулалт хийхдээ Hadoop технологийг ашигладаг байна. 2007 онд 4 зангилаанаас бүрдсэн кластер үүсгэж байсан бол 2009 онд 28 зангилаа, 2010 онд 532 зангилаа бүхий кластер үүсгэсэн байна. 
Ebay нь судалгаа шинжилгээнд хэрэглэгдэх өгөгдлийг Hadoop технологи ашиглан хадгалдаг бөгөөд Facebook -н адилаар Hive өгөгдлийн агуулахад шаардлагатай өгөгдлүүдийг нэгтгэн цуглуулдаг боловч нэг онцлог нь OLAP куб ашиглан өгөгдлийг хялбар аргаар хандаж авдаг байна.

## Нэмж унших
* Apache Hadoop
* Apache Accumulo
* Apache Cassandra
* Big data
* Cloud Computing