การติดตั้ง Hadoop แบบ Multi-Node ( Hadoop Cluster Installation )

Posted on Posted in Big Data, Hadoop

 

        หลังจากที่เราได้โอกาสไปเป็นวิทยากรอบรม Big Data with Hadoop ที่เป็นโครงการพัฒนาบุคลากรด้านผู้พัฒนา ผู้ผลิต สนับสนุนโครงการโดย สำนักงานส่งเสริมเศรษฐกิจดิจิทัล (DEPA) แล้วติดค้างการติดตั้ง Hadoop Cluster ไว้เพราะว่าเวลาในชั้นอบรมไม่พอเนื่องจากต้องเรียนกันให้ครอบคลุมถึง Software ตัวอื่นใน Ecosystem  เราก็เลยต้องมาตามชดใช้กันใน Blog นี้กันนะ

 

       เอาล่ะเราเริ่มด้วยความต่อเนื่องจาก Blog ก่อนหน้าที่เราผ่านการติดตั้ง Hadoop แบบ Pesudo Distributed กันมาแล้วในบทความ การติดตั้ง Hadoop แบบ Step-by-Step สำหรับก้าวแรกของ Big Data Engineering แต่ละคนที่ลองเล่นตาม รวมถึงในชั้นอบรม Big Data with Hadoop ก็น่าจะคล่องกันแล้วในการใช้งาน  ดังนั้นใน Blog เราจะมาสรุปขั้นตอนที่สำคัญในการทำให้ Hadoop แบบ Pesudo ไปเป็น Fully Distributed กัน

 

1). เตรียมการติดตั้ง

      การเริ่มติดตั้งและปรับแต่ง Hadoop ให้ทำงานแบบ Cluster สิ่งแรกที่ต้องทำคือการกำหนด Topology ของระบบ Cluster ว่าจะให้เครื่องใดทำหน้าที่เป็น Master Node หรือ NameNode  และ เครื่องใดทำหน้าที่เป็น Slave Node หรือ Slave Node แล้วทำการเขียนรูป System Architecture ไว้เพื่อการสื่อสารกับคนอื่นๆได้  จากนั้นกำหนดว่าเครื่องใดจะใช้ IP ใด     กรณีการติดตั้งนี้เราจะใช้ host file สำหรับการกำหนดชื่อเครื่อง และ IP 

        การติดตั้งนี้เราจะใช้เครื่องทั้งหมด 4 เครื่อง สำหรับ 1 Master Node และ 3 Slave Node โดยกำหนด host name เพื่อให้แต่คนกำหนด IP เองดังนี้

Master Node : hadoop-master

Slave Node : hadoop-slave-1 , hadoop-slave-2 , hadoop-slave-3 

โดยกำหนดในไฟล์ /etc/hosts  ตัวอย่างตามรูป 1-1

 

รูปที่ 1-1

2). ติดตั้ง Computer Server  + OS ( Ubuntu 14.x + ) + Hadoop Package

       การติดตั้งในขั้นตอนนี้ สำหรับในงาน Production อาจจะแยกเป็น Physical Machine  หรือ Virtual Machine ก็ได้ซึ่งแต่ละแบบก็จะมีข้อดีข้อด้อยในการจัดการด้านระบบแตกต่างกันไป แต่เป้าหมายหลักๆคือ ทุกเครื่องจะต้องมี Hadoop Package ที่มีการกำหนด โครงสร้าง Directory สำหรับวาง Hadoop Package , Data , Log  และ การ Setup Environment Variable ต่างๆที่เหมือนกัน  รวมถึงการกำหนด host name ที่สอดคล้องตรงกันทั้ง 4 เครื่องที่จะทำงานรวมกันแบบ Cluster  

     สำหรับการติดตั้งแบบ Physical Machine หรือ การใช้ VM แบบ ลง OS ใหม่ เราจะต้องลง Hadoop Package เองแต่ต้นเองทั้งหมดทุกเครื่อง และ กำหนดค่า Configuration เองทั้งหมดแต่ต้น  ขณะที่การเลือกลงแบบ Virtual Machine เราสามารถใช้เทคนิคการ Clone เครื่อง VM จากที่ลงไว้แล้วเป็น Single Node แบบ Pesudo และผ่านทดสอบการทำงานของ Hadoop เรียบร้อยแล้ว เพื่อ Copy ไปเป็นเครื่อง Slave Node ทั้ง 3 เครื่องได้

        การติดตั้งใน Blog นี้เราจะใช้ VirtualBox และเลือกวิธีการ Clone VM จากเครื่อง Single Node แบบ Pesudo ไปทำ Slave Node ถ้าหากใครที่ยังไม่ผ่านการติดตั้งแบบ Single Node มาก่อนให้ย้อนกลับไปทำตามวิธีการติดตั้งในบทความการติดตั้ง Hadoop แบบ Step-by-Step สำหรับก้าวแรกของ Big Data Engineering  

        ดังนั้นโดยเทคนิคการติดตั้งโดยใช้ VM จากบทความข้างต้น สามารถทำการ Copy VM Disk Image เป็น  3 ก้อนได้ ( อย่าลืมแก้ harddiskuid ของ VM ด้วย กรณีว่าง VM บนเครื่อง host เดียวกัน ) เมื่อได้ Disk VM Image ครบทั้ง 3 ก้อนแล้วก็ทำการสร้าง VM เปล่าๆ แล้ว Assign VM Disk ให้ VM นั้นๆ

*** แต่ถ้าใช้ AWS ก็ใช้การสร้าง VM Image และ Clone Image ได้เช่นเดียวกัน ***

        สรุปการติดตั้ง Hadoop Package ตามที่เราได้ทำไว้แล้วในแบบ Pesudo Distributed แบ่งกลุ่มของ Directory ได้ 3 กลุ่ม 

Main Package: /usr/local/hadoop

Data File: /var/hadoop_data

Log File: /var/log/hadoop

 

3). กำหนดสิทธิการเข้าถึงเครื่อง ระหว่าง  Master Node  และ  Slave Node แบบ ไม่ต้องยืนยันการ Log in 

       ตามที่ Process NameNode คุยกับ DataNode ผ่าน Secure Channel  ดังนั้นการจัดการของระบบการเชื่อมต่อจำเป็นต้องกำหนดสิทธิการเข้าถึงเครื่อง Slave Node จาก Master Node โดยที่ไม่ต้องให้ยืนยันการป้อน Password

      การจัดการเชื่อมต่อในลักษณะนี้จำเป็นต้องให้ Slave Node ทุกเครื่องมี Public Key ของ Master Node อยู่ใน Key Store สามารถทำได้โดย run command สร้าง Key ที่เครื่อง Master Node  

# su hadoop 
$ ssh-keygen -t dsa P'' --
$ cat .ssh/id_dsa.pub >> .ssh/authorized_keys
-- Copy public key ใหับกับ Slave ทั้ง 3 เครื่อง
$ ssh-copy-id -i ~/.ssh/id_dsa.pub hadoop_tp1@hadoop-slave-1 
$ ssh-copy-id -i ~/.ssh/id_dsa.pub hadoop_tp2@hadoop-slave-2
$ ssh-copy-id -i ~/.ssh/id_dsa.pub hadoop_tp2@hadoop-slave-3 
$ chmod 0600 ~/.ssh/authorized_keys 

ทดสอบการเปิด Connection แบบ SSH ทั้ง 4 เครื่องด้วยคำสั่ง
$ssh auoychai@hadoop-master     ( <- enter ) 
$ssh auoychai@hadoop-slave-1    ( <- enter )
$ssh auoychai@hadoop-slave-2    ( <- enter )
$ssh auoychai@hadoop-slave-3    ( <- enter )
ถ้าทุกเครื่อง แสดงหน้าจอตามรูปด้านล่างแสดงว่า SSH Connection ระหว่างเครื่องเรียบร้อยสมบูรณ์ ตัวอย่างแสดงตามรูปที่ 3-1


รูปที่ 3-1

        ทดสอบ $ifconfig  จะเห็นว่าเป็น IP ของเครื่อง hadoop-slave-1  จากนั้นออกจาก remote session ที่ได้ต่อไปหาเครื่องปลายทางด้วย $exit  เพื่อกลับมาอยู่ใน terminal ของเครื่องที่เรากำลังใช้งานอยู่ ( hadoop-master )

4).  กำหนดค่า Configuration เพื่อให้ Hadoop ทำงานร่วมกันแบบ Cluster  ( Fully Distributed )

         การกำหนดค่า Configuration ในขั้นตอนนี้จะทำที่  Master Node ที่ ไฟล์ /usr/local/hoadoop/etc/hadoo/slaves และ ใช้ text editor เปิดไฟล์แล้ว ดังนี้

      a). ลบ localhost 

      b). เพิ่ม 3 บรรทัดที่เป็น host name ของเครื่อง Slave Node ทั้ง 3 เครื่อง แล้วบันทึกไฟล์

         hadoop-slave-1

         hadoop-slave-2

         hadoop-slave-3

       รายละเอียดในไฟล์ slaves ดูได้จากรูปที่ 4-1

รูปที่ 4-1

5).  ทำการ Format NameNode ของ Hadoop Cluster ( Fully Distributed )

        ทำการ format NameNode โดยทำที่เครื่อง hadoop-master ตามคำสั่งดังนี้

        $hdfs namenode -format

 

6).  ทดสอบ Start Hadoop แบบ Cluster ( Fully Distribution )

        เปิด terminal เครื่อง hadoop-master สั้ง Start HDFS และ ตรวจสอบผลการ Run ตามคำสั่งดังนี้

a). ทำการ Start Hadoop ดังนี้

        $start-all.sh

        $jps 

ซึ่งที่เครื่อง hadoop-master จะมีแต่ Process ของ NameNode และ Resource Manager  ที่ทำงานอยู่ ตามรูป 6-1 ด้านล่าง

รูปที่ 6-1

และ ตรวจสอบการทำงานของ DataNode ที่ terminal ของเครื่อง hadoop-slave-1 , hadoop-slave-2 , hadoop-slave-3 แล้วพิมพ์  $jps

จะเห็นว่ามีแต่ Process ของ DataNode และ NodeManager ที่ทำงานอยู่ตามรูป 6-2 ด้านล่าง      

รูปที่ 6-2

7).  ภาระกิจติดตั้ง Hadoop Cluster เสร็จสมบูรณ์

        แสดงความยินดีครับ เราผ่านกระบวนการติดตั้ง Hadoop ให้ทำงานแบบ Fully Distributed หรือ ทำงานแบบ Hadoop Cluster ได้เรียบร้อยแล้ว  และ พร้อมแล้วสำหรับการใช้งาน Hadoop  ที่เป็นแบบ Distributed Processing และ Distributed Data Store

      ณ.จุดนี้เราพร้อมแล้วสำหรับการนำ Software ใน Big Data Ecosystem มาติดตั้งให้ทำงานร่วมกันอย่างมีประสิทธิภาพ ทั้งส่วนที่ทำหน้าที่นำข้อมูลเข้า เช่น Flume , Sqoop , Kafka   หรือ ส่วนการเก็บเข้น HBase  หรือ ส่วนการประมวลผลข้อมูลเช่น Hive , Spark

      เราเดินหน้าเดินไปข้างหน้าในการพัฒนาทักษะการใช้งา Big Data Technology ร่วมกันครับ  ; )  

About Author

อวยชัย ภิรมย์รื่น

| ปัจจุบันอยู่ในงานด้าน Big Data Engineer  ที่ทำ Solution บน Big Data Technology และ เอา Big Data Technology  เช่น Hadoop & Ecosystem , Elasticsearch , เทคนิค Data Analytic  มาพัฒนางานระบบซอฟต์แวร์

รู้จักประสบการณ์กันให้มากกว่านี้ ดูที่นี่   My FB: https://www.facebook.com/auoychai.me

[ ต้องการพัฒนาทีม : ติดต่อให้ไปแบ่งปันที่ Office ท่าน : Tel. 086-813-5354 , e-mail: p.auoychai@gmail.com]

Our Services

Big Data Engineering

ติดตั้ง Cloudera Enterprise Hadoop , อิมพลีเมนท์การเอาข้อมูลเข้า HDFS , Hive , HBase , Elasticsearch ผ่าน Talend  ETL Tool และ Custom Programming admin

Software&Solution

พัฒนา Smart Software Application ( Web , Mobile ) และ เชื่อมต่อกับอุปกรณ์ IoT  , พัฒนาระบบ Dashboard ทำ Visualize ข้อมูล , การพัฒนา API&Micro-Service , การเชื่อมต่อและประมวลผลข้อมูลบน Big Data Store ด้วยเทคนิค Machine Learning admin

IT Operation

อิมพลีเมนท์ระบบ IT  Monitoring สำหรับการเฝ้าระวังและแจ้งเตือนสภาพการทำงานของ Server , Application Server และ IoT Device ต่างๆ , การบริหารจัดการ Service & Application Log. admin