Ambari #04 การสร้าง Hadoop ด้วย Ambari บน AWS

การจัดการข้อมูลขนาดใหญ่ (Big Data) มีเครื่องมือที่ได้รับความนิยมหลายตัว หนึ่งในนั้นคือ Apache Hadoop ซึ่งสามารถติดตั้งได้โดยตรง ตาม บทความที่เล่าให้ฟังก่อนหน้านี้

ขั้นตอนการติดตั้ง Hadoop Cluster อย่างง่าย

แต่ Hadoop เอง ไม่ได้มีแค่ HDFS และ MapReduce เท่านั้น ยังประกอบด้วย Modules ต่างๆ รวมกันเป็น Ecosystem ซึ่งจะต้องติดตั้งไปทีละตัวๆ และก็ไม่ง่ายนัก

จึงมีโปรเจคชื่อ Apache Ambari ทำหน้าที่ Deploy Hadoop และส่วนประกอบต่างๆได้ง่ายขึ้น ดังที่เคยเล่าให้ฟังมาแล้วใน (ใช้ Ambari ที่อยู่ในบริการของ Hortonwors)

Ambari #01: ติดตั้ง Ambari Server

Ambari #02 ติดตั้ง Ambari Agent

คราวนี้ ถ้าจะลองทำกับระบบขนาดใหญ่ขึ้น ทางเลือกหนึ่ง ที่ประหยัด และรวดเร็วคือ ไปใช้บริการ Cloud ซึ่งในที่นี้ จะขอเล่าให้ฟังในกรณีการติดตั้งบน Amazon Web Service (AWS)

Prerequisite

เปิดบัญชี AWS ก่อนนะ AWS Getting Start

ขั้นตอนการใช้งาน

  1. สิ่งที่เรากำลังจะทำคือ สร้าง Ubuntu 14.04 LTS จำนวน 4 เครื่อง แต่ละเครื่อง ใช้เป็น t2.medium ซึ่งมี CPU Intel Xeon 2.5 GHz 2 ตัว, มี RAM 4 GB และมี SSD HD 30 GB
  2. Login เข้าไปยัง AWS Console (ผมเลือกใช้ Singapore นะครับ) แล้วคลิก Launch Instance
  3. เลือก Ubuntu Server 14.04 LTS 64bit คลิก Select
  4. เลือก Instance Type เป็น t2.medium แล้วคลิก Next: …
  5. ต่อไป เลือกขนาด Storage ในที่นี้ ใส่ size เป็น  30 GB แล้วคลิก Next …
  6. Add Tags ในกรณีต้องการใส่ Tag เพือให้ง่ายต่อการจัดกลุ่มสามารถทำได้ แต่ไม่ขอทำในตอนนี้ คลิก Next
  7. ต่อไป สร้าง Security Group กล่าวคือ เปิด Port ให้มีการเข้าถึงได้จากที่ใด ไปยัง port ใดบ้าง ให้เลือก Create a new security group และ คลิก Add Rule เพิ่ม Port 8080 เพื่อให้สามารถเรียกใช้ Ambari Web UI ได้ และ เปิด All TCP จากเครือข่ายภายใน ในที่นี้คือ 172.31.0.0/16 จากนั้น คลิก Review and Launch
  8. มีเตือนเรื่องความปลอดภัย … ใช่ … แต่ผ่านไปก่อน คลิก Launch
  9. สร้าง Key pair เพื่อให้สามารถ SSH เข้าไปใน Instance ได้โดยไม่ต้องใส่รหัสผ่าน ในที่นี้จะเลือก Create a new key pair ตั้งชื่อว่า ambari (จะได้ไฟล์ ambari.pem) แล้วคลิก Launch Instances
    ระวัง! ต้องเก็บไฟล์ .pem นี้ให้ดี หายไปแล้วไม่สามารถขอใหม่ได้
  10. คลิก View Instances
  11. จะพบว่า ระบบสร้างเครื่อง 4 เครื่องให้เราแล้ว ต่อไป ให้คลิกใน Column “name” เลือกเครื่องแรกให้เป็น Ambari Web UI และเครื่องอื่นตั้งชื่อเป็น node1, node2, node3
  12. ในการใช้งาน AWS จะเรียกผ่าน Name และ IP Address
    ในตอนนี้ ขอให้คลิกแต่ละ Instance แล้วจดค่า
    – Public DNS IPv4
    – Private DNS
    – Private IPs
    ซึ่ง หากมีการ Restart Instance ค่าของ Public DNS IPv4 จะเปลี่ยนไปเรื่อยๆ


    ประมาณนี้
  13. วิธีการ SSH ไปยังเครื่องต่างๆ คลิกที่ Connect ก็จะแสดงรายละเอียด
  14. ต่อไป เพื่อให้ง่ายต่อการจัดการ เราจะ Key Pair “ambari.pem” ที่ AWS สร้างให้ เอาไปใส่ในเครื่องที่เราตั้งเป็น Ambari Web UI
    ซึ่งทุก Instance ที่สร้างขึ้นทั้ง 4 ตัวนี้ จะมี Public Key อยู่ใน /home/ubuntu/.ssh/authorized_hosts แล้ว ทำให้สามารถ SSH เข้าไปโดยใช้ ambari.pem ซึ่งไม่ต้องใส่รหัสผ่าน  (จริงๆแล้วสามารถทำตามขั้นตอน วิธีทำ Password-less SSH บน Ubuntu เพื่อสร้าง Key Pair อีกชุดได้) ให้ทำการ scp ambari.pem ไปไว้ใน hom directory ของ ubuntu ด้วยคำสั่ง

    scp -i ambari.pem ambari.pem ubuntu@ec2-xx-xx-xx-xx.ap-southeast-1.compute.amazonaws.com:
  15. จากนั้น SSH เข้าไปยังเครื่อง Ambari Web UI
    ssh -i ambari.pem ubuntu@ec2-xx-xx-xx-xx.ap-southeast-1.compute.amazonaws.com
  16. ตอนนี้ เราก็จะเข้ามาอยู่ใน home directory ของ ec2-user บนเครื่อง Ambari Web UI
    ต่อไป ทำการสร้าง .ssh/id_rsa ด้วยคำสั่งนี้

    mv ambari.pem .ssh/id_rsa
  17. ต่อไป ให้ sudo su เพื่อเป็น root แล้วติดตั้ง Ambari Server ตามคำสั่งต่อไปนี้
    (ในขั้นตอนของ ambari-server setup ให้เคาะ Enter ใช้ค่า Default ไปทั้งหมด)

    sudo su
    
    wget -O /etc/apt/sources.list.d/ambari.list http://public-repo-1.hortonworks.com/ambari/ubuntu14/2.x/updates/2.5.2.0/ambari.list
    
    apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B9733A7A07513CAD
    
    apt-get update -y
    
    apt-get install -y ambari-server
    
    ambari-server setup
  18. ซึ่งจะ Error น่ะ 555 เพราะ Postgresql รุ่นนี้ต้องสร้าง cluster ก่อนจึงจะทำงานได้
    ให้ใช้คำสั่งต่อไปนี้

    export LC_ALL=en_US.UTF-8
    
    pg_createcluster 9.3 main --start
    
    /etc/init.d/postgresql restart

    แล้วจึง setup อีกครั้ง

    ambari-server setup
    ambari-server start
  19. เสร็จแล้ว ไปทำต่อบน Ambari Web UI ที่
    http://ec2-xx-xx-xx-xx.ap-southeast-1.compute.amazonaws.com:8080
    Default user/password คือ admin/admin
  20. คลิก launch Install Wizard
  21. ตั้งค่า Cluster แล้วคลิก Next
  22. เลือก Version ล่าสุด HDP-2.6.2.0

    แล้วคลิก Next
  23. ต่อไป ให้เอา Private DNS ของทุกเครื่องที่ต้องการจะติดตั้ง Ambari Agent มาใส่ (ในที่นี้ ใส่ทั้งตัว Ambari Web UI และ node1 – node3) แล้ว เลือก Provide your SSH Private Key “ambari.pem” และ กำหนด SSH User Account เป็น ubuntu ใช้ Port 22
  24. ระบบจะทำการติดต่อไปยัง nodes ต่างๆแล้วติดตั้ง Ambari Agent เมื่อเสร็จแล้ว คลิก Next
  25. จากนั้น เลือก Services ที่ต้องการใช้งาน
    ในที่นี้ จะใช้ HDFS, Yarn, Tez, Hive, Sqoop, Spark2, Zeppelin
    หากมี Service ใดที่ต้องใช้งานร่วมด้วย ระบบจะแจ้งเตือนอีกครั้ง

    แล้วคลิก Next
  26. เลือก Master ว่าจะอยู่บนเครื่องใดบ้าง
    หาก Deploy ระบบขนาดใหญ่ๆ ก็ควรจะจัดกลุ่ม Server ไว้เลย แล้วพวก Slave เป็นอีกกลุ่มหนึ่ง
  27. เลือกว่า Slaves and Clients จะติดตั้งไว้ในเครื่องใดบ้าง
  28. ต่อไป จะเป็นการปรับแต่งระบบ ในที่นี้ ซึ่งถ้ามี ตัวแดง ปรากฏที่ใด ก็ให้ตามไปใส่ค่าที่ระบบแนะนำให้ปรับแต่ง
    ในที่นี้ จะเป็น Hive, Ambari Matrics และ SmartSense ซึ่งจะเป็นเรื่องการกำหนด Password
  29. เมื่อปรับแต่งเรียบร้อย ก็ Review
  30. ระบบจะติดตั้ง Service/Clients ต่างๆ เมื่อเสร็จแล้วจะได้ผลดังภาพ แล้วคลิก Next
  31. แสดง Summary
    คลิก Next
  32. แล้วก็จะได้ระบบพร้อมใช้งาน
  33. คราวนี้ เรื่องค่าใช้จ่าย ก็ประมาณนี้

    ประมาณ 22 บาทต่อชั่ว่โมง จะใช้งาน ค่อย Start ใช้งานเสร็จก็ Stop ไม่คิดตังค์ (เว้นแต่ EBS Storage ที่คิดเป็นรายเดือน)

Addtional

  • หากต้องการใช้ Hive2 View จะต้องสร้าง /user/admin directory ก่อน ด้วยคำสั่ง
    sudo su hdfs
    
    hdfs dfs -mkdir /user/admin
    
    hdfs dfs -chown admin.hdfs

    แล้วไปแก้ไขใน Ambari Web UI
    http://AmbariWebUI:8080/#/main/services/HDFS/configs
    แก้

    hadoop.proxyuser.root.groups=*
    
    hadoop.proxyuser.root.hosts=*
  • หากต้องการติดต่อ mysql จาก Spark ให้ Download จาก https://dev.mysql.com/downloads/connector/j/
    จากนั้นให้ Unzip  จะได้ไฟล์ mysql-connector-java-5.1.44-bin.jar (Version อาจจะแตกต่างกัน)
    แล้วนำไปไว้ใน /usr/hdp/current/spark2-client/jars *** ของทุก Nodes ***