Tag: Amazon AWS

  • 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 ***
  • วิธีการตรวจสอบราคาเครื่องที่ให้บริการบนระบบ Public Cloud

    “จะมีวิธีคิดราคา Public Cloud แต่ละเจ้าได้อย่างไรว่าต้องจ่ายเท่าไหร่ต่อเดือน”

    ในปกติแล้ว Cloud แต่ละเจ้าจะมีให้ทดสอบเลือกเครื่อง spec ที่ต้องการและคิดค่าใช้จ่ายคร่าว ๆ ซึ่งตัวเครื่องโดยมากคิดเป็นรายเดือน แต่ส่วนที่คิดตามการใช้งานจริงจะเป็น IOP ของการใช้งาน Storage และการส่งข้อมูลออก หรืออาจจะเป็นจำนวน Traffic สำหรับให้บริการ (นำเข้าข้อมูลไม่เสียตังค์) โดยขอสรุปเป็นบทความดังนี่้ครับ
    Target : ต้องใช้เครื่องประมาณ CPU 4 Core, RAM 4-8GB, HDD 100GB รัน Windows Server เพื่อรันระบบที่เขียนด้วย .NET Framework

    • ราคา ณ วันที่ 19 มิถุนายน 2559

    AWS Pricing Calculator
    https://calculator.s3.amazonaws.com/index.html

    price1 price2 price3
    จะเห็นว่าใช้เงินประมาณ $193.98 ต่อเดือน คิดเป็นเงิน 6799.75 บาทต่อเดือน ซึ่งจากการประเมินราคาใน Private Cloud ปัจจุบันที่มหาลัยให้บริการจะคิดที่ 3200 บาทต่อเดือน (4 CPU,8 GB,SAS 100G (Multi-Site Raid 5-Network RAID 1 ราคานี้ไม่รวมค่า OS) แต่ทางมหาวิทยาลัยยังไม่มีบริการ Storage ที่เป็น SSD ซึ่งถ้าเอาตามการใช้งานจริงที่ไม่ใช่ Database Server, File Server ยังไม่จะเป็นต้องใช้ถึง SSD แต่ในปัจจุบันราคา SSD ของ Server ก็ลดลงมาเยอะมาก โดยที่การจัดซื้ออนาคตคงจะเปลี่ยนเป็น ซื้อ SSD สำหรับทำ Private Cloud แทน ซึ่งราคานี้ยังไม่รวม EBS ที่ไว้สำหรับทำ Snapshot สำรองข้อมูล, Data Transfer ซึ่งดูแล้วที่จะขึ้นได้ในตอนนี้น่าจะมีแค่ Web Server ที่เป็นพวก CMS เพราะการโอนข้อมูลขึ้นลงไม่มากนัก (ยกเว้นที่เว็บที่เน้นการใช้งาน CMS Document Sharing ที่ใช้งานหนัก ๆ อาจจะไม่เหมาะ เพราะใช้ Traffic ขาออกเยอะจากการดาวน์โหลด)

    Azure Pricing Calculator
    https://azure.microsoft.com/en-us/pricing/calculator/
    price4 price5

    จะเห็นได้ว่าราคาใกล้เคียงกับ AWS แต่ได้เนื้อที่น้อยกว่า
    price6 price7
    ถ้าเพิ่ม Storage อีก 16G จะต้องเพิ่มเงินอีก $1..28 ต่อเดือน รวมเป็น $191.74

    Google Cloud Platform Pricing Calculator
    https://cloud.google.com/products/calculator/

    price8 price9 price10 price11
    จะเห็นได้ว่าถูกที่สุดแล้วเมื่อเทียบกับอีก 2 เจ้า

    Digital Ocean Pricing Calculator
    https://www.digitalocean.com/pricing/

    price12 price13

    ขอยกมาอีกเจ้าที่ใช้งานกันเยอะเนื่องจากราคาถูกจะเห็นว่าถูกที่สุด แต่สำหรับเจ้านี้จะไม่มี Windows ให้ใช้งาน

    สรุปค่าใช้จ่าย

    price14
    จากที่เขียนไว้ข้างต้นยังไม่สามารถสรุปได้ว่าเจ้าไหนดีกว่า เพราะมีปัจจัยอีกเยอะที่ไม่ได้ยกมาเช่น Data Transfer, ราคา Discount ซึ่งเหมือน Google จะมีส่วนลดสำหรับเครื่องที่สอง, Downtime, Speed จึงยกมาเป็นตัวอย่างวิธีพิจารณาคร่าว ๆ ส่วนถ้าซื้อจริงก็คงต้องเตรียมแผนให้สามารถย้ายได้ด้วยในกรณีที่ Cloud ที่ใช้อยู่บริการได้ไม่ตรงกับความต้องการ