ช่วงที่ผมไปซิลิคอนวัลเลย์มีโอกาสเจอคนไทยที่ทำงานอยู่ในบริษัทไอทีระดับโลกหลายคน เลยติดต่อขอสัมภาษณ์ลง Blognone เพื่อถ่ายทอดประสบการณ์ล้ำค่าเหล่านี้กับคนอื่นๆ ที่อยากไปสานฝันในระดับเดียวกัน
บทสัมภาษณ์ชุดนี้จะทยอยลงต่อกันเป็นซีรีส์ ซึ่งบทความตอนแรกเริ่มจากคุณทัศพล อธิอภิญญา วิศวกรของบริษัท Hortonworks ที่มีชื่อเสียงด้าน Hadoop ครับ (บริษัทนี้แยกตัวมาจากยาฮูในปี 2011) จะมาให้ความรู้เกี่ยวกับเทคโนโลยีด้าน Big Data และ Hadoop ที่กำลังร้อนแรงอยู่ในปัจจุบัน จากมุมมองของคนที่อยู่ในบริษัทด้านนี้โดยตรง
สวัสดีครับ ชื่อทัศพล อธิอภิญญา (Tassapol Athiapinya) ตอนนี้ทำงานเป็น Senior Quality Engineer อยู่ที่ Hortonworks Inc. เมือง Santa Clara, CA (ส่วนหนึ่งของ Silicon Valley) ในประเทศสหรัฐอเมริกา
ผมเรียนจบวิศวกรรมคอมพิวเตอร์ที่จุฬาฯ เคยทำงานด้าน IT Security ที่ ACIS Professional Center / ACIS i-Secure ในเมืองไทย แล้วมาเรียนต่อปริญญาโทที่ University of California, San Diego ในอเมริกา
ตอนที่เรียนมีโอกาสฝึกงานกับ VMware ที่ Silicon Valley จากนั้นหลังเรียนจบมาได้งานที่บริษัท Informatica (ทำด้าน enterprise database integration) ซึ่งอยู่ไม่ไกลจากกันมากนัก ทำงานที่นี่อยู่สองปี จากนั้นมี recruiter มาชวนมาทำงานที่ Hortonworks
Hortonworks เป็นบริษัทที่ทำซอฟต์แวร์ Hadoop รายแรกที่ขายหุ้นในตลาด Nasdaq (เข้าซื้อขายวันแรกเดือนธันวาคม 2557) ธุรกิจของบริษัทคือขาย technical support ของ Hadoop ให้ลูกค้าองค์กรและบริษัทดอทคอม ในอเมริกา ยุโรปและประเทศเอเชียบางส่วน (ตอนนี้ยังไม่ทำการตลาดในเอเชียตะวันออกเฉียงใต้)
Hadoop เป็นโครงการโอเพนซอร์ส เริ่มต้นโดยทีมงานยาฮูที่สร้างซอฟต์แวร์จากเปเปอร์ MapReduce กับ Google File System ของกูเกิล กูเกิลเป็นคนคิดค้นระบบนี้แต่ไม่เปิดโค้ดออกมา เปิดเฉพาะหลักการทำงานผ่านเปเปอร์ ทำให้ยาฮูสร้างซอฟต์แวร์เลียนแบบระบบของกูเกิลขึ้นมาใหม่ในชื่อ Hadoop
หลักการทำงานของมันคือใช้ process code ที่เขียนในรูป Map และ Reduce ที่สามารถ scale จำนวนข้อมูลแบบ linear ได้และใช้เก็บไฟล์ขนาดใหญ่มากๆ ระดับ terabyte ได้โดยมี fault tolerant
ทีมที่ทำ Hadoop ที่ยาฮูเป็นทีมที่ก่อตั้งบริษัท Hortonworks
ไม่ใช่ครับ ผู้ใช้ส่วนใหญ่จะใช้งาน SQL หรือ query ผ่านทางซอฟต์แวร์อีกตัวคือ Apache Hive หรือ Apache Pig มากกว่า เพราะใช้งานง่ายกว่า เมื่อรัน query จะถูกแปลงไปเป็น Hadoop (Map-Reduce และ HDFS) โดยอัตโนมัติ
ซอฟต์แวร์ตัวอื่นที่เกี่ยวข้องยังมี HBase (key-value store คล้าย MongoDB), Oozie (workflow), Storm (real-time processing), Tez (อธิบายง่ายๆ คือ multi-stage next-gen map reduce) และอีกหลายตัว
Hortonworks ช่วยทำแพ็กเกจของซอฟต์แวร์ติดตั้งง่ายขึ้น โดยรวมซอฟต์แวร์โอเพนซอร์ส 16 โครงการมาจัดเป็นชุดให้ คอนฟิกเตรียมไว้ให้ แค่สั่ง yum install ก็ใช้งานได้ทันที
นอกจากนี้ยังมีซอฟต์แวร์ด้าน operation management (start/stop services และเปลี่ยน config) และ automation testing สำหรับค้นหาและแก้ไขบั๊กก่อนส่งให้ลูกค้าทุกครั้งด้วย
บริษัทซอฟต์แวร์สาย enterprise ส่วนใหญ่ที่นี่จะมีโค้ดอีกชุดสำหรับทดสอบฟังก์ชันการทำงานของซอฟต์แวร์ ทั้งการทดสอบแบบ positive (functional ทดสอบว่าทำงานได้จริง) และ negative (error detection ทดสอบหาปัญหา)
การทดสอบพวกนี้จะรันทุกครั้งเมื่อมีการส่งโค้ดเข้าโครงการในระดับ production เพราะก่อนซอฟต์แวร์จะส่งให้ลูกค้าได้ ต้องผ่านการตรวจสอบ QA sign-off ว่าไม่มี regression (พบบั๊กในฟังก์ชันเก่าๆ ที่เคยทำได้ไม่มีปัญหา) และตรวจว่าบั๊กที่ลูกค้ารายงานมา ต้องถูกแก้ไขเรียบร้อยแล้ว
ตำแหน่งงาน Quality Engineer ที่ผมทำอยู่ก็คือดูแลโค้ดตรงนี้
ขอตอบรวม Big data กับ Hadoop กันไปเลยนะครับ เพราะว่า Hadoop เป็นส่วนเลเยอร์ล่างสำหรับงานด้านประมวลผล (processing) และสตอเรจ (storage) ซึ่งถือเป็นส่วนสำคัญของ Big Data
สำหรับคนที่ไม่คุ้นเคยกับคำว่า Big Data ต้องเริ่มจากนิยามก่อน บริษัทวิจัย Gartner ให้ความหมายว่า
Big data is high-volume, high-velocity and high-variety information assets that demand cost-effective, innovative forms of information processing for enhanced insight and decision making.
แปลเป็นภาษาไทยว่าเป็นแหล่งข้อมูลที่มีปริมาณมาก ความเร็วในการรับข้อมูลสูง มีความหลากหลายของรูปแบบ จำเป็นต้องมีวิธีการประมวลข้อมูลใหม่ๆ เพื่อจะได้เข้าใจตัดสินใจกับข้อมูลได้ถูกต้อง
โดยรวมผมคิดว่าเทคโนโลยี Big Data ตรงนี้ต้องมีความสำคัญในอนาคตแน่นอนด้วยปริมาณข้อมูลที่มีแนวโน้มสูงขึ้นเรื่อยๆ ส่วนตัว ผมคิดว่าเทคโนโลยีที่ต้องรองรับปริมาณและรูปแบบข้อมูลใหม่ๆ ต้องมาเป็นกระแสหลักแน่นอน
ตอนนี้เราเห็นข้อจำกัดว่าฐานข้อมูลแบบ Relational Database ไม่สามารถจะสเกลตัวเองกับปริมาณข้อมูลจำนวนมากได้ และรูปแบบของข้อมูลเองก็ไม่ได้มาเป็น strict column based อย่างในอดีตแล้ว
บริษัท enterprises ของอเมริกา-ยุโรปเข้าใจเรื่องนี้แล้ว และพยายามทดสอบระบบ Big Data กันอยู่ แต่ว่าหลายองค์กรก็พบอุปสรรคกันหลายอย่าง เช่น
อย่างแรกคือองค์กรพยายามเก็บข้อมูลมากขึ้น แต่ก็เกิดคำถามว่าจะเอาข้อมูลมาจากไหน เชื่อมโยงกับอันไหน หรือจะแสดงผลยังไง หลายองค์กรที่ยังไม่แน่ใจก็ต้องค้นหาคำตอบกันไป
อย่างที่สองคือเทคโนโลยีใหม่ๆ พวกนี้ใช้ยากกว่าเดิม เปลี่ยนเร็วกว่าเดิม คนดูแลไอทีในองค์กรส่วนใหญ่ตามไม่ทัน การหาคนที่มีความรู้ก็ยากขึ้นหรือค่าใช้จ่ายสูงขึ้นตาม
งาน Big Data จะมีสามแบบใหญ่ๆ ดังนี้
ถ้างานเป็นการประมวลผลข้อมูลทั่วๆ ไป (general processing) ควรเลือกแพลตฟอร์มเป็น Hadoop/SQL on Hadoop (Hive, Pig) เหตุเพราะว่าคนใช้กันเยอะ ตลาดแรงงานชัดเจน ตัวเทคโนโลยีเองก็เริ่มนิ่ง มีการเปลี่ยนแปลงช้าลง ตามเรียนรู้ได้ง่ายขึ้น
ถ้างานเป็น key-value store เป็น MongoDB, HBase, Cassandra ด้วยเหตุผลเดียวกัน
ถ้าเทคโนโลยีที่ใหม่กว่านี้ แนะนำให้ดู Apache Spark (in-memory processing) ที่ทำงานเร็วกว่า Hadoop หากข้อมูลอยู่ในหน่วยความจำ แต่ต้องบอกว่าเทคโนโลยีนี้ยังใหม่ ส่วนของ API คงแก้ไขกันอีกมาก ต้องรับความเสี่ยงเรื่องการเปลี่ยน API ไว้ด้วย
สำหรับงานส่วนอื่นที่เกี่ยวข้องกับ Big Data เช่น Visualization การแสดงข้อมูลให้อ่านง่าย กับ Data Analytics นั้น ตลาดมีความต้องการชัดเจน แต่กลับยังไม่มีเทคโนโลยีไหนที่โดดเด่นขึ้นมา อาจต้องรอเวลากันอีกหน่อย
ระดับของการเรียนรู้ เราไม่จำเป็นต้องมีข้อมูลขนาดใหญ่ครับ เพราะว่าตัวเทคโนโลยีโดนคนอื่นทดสอบมาแล้วว่ารองรับข้อมูลจำนวนมากได้แน่ๆ
สิ่งที่ควรศึกษาคือ API, configuration เป็นหลัก ให้ลองติดตั้งซอฟต์แวร์พวกนี้กับหลายเครื่อง คอนฟิกหลายๆ แบบให้เชี่ยวชาญก่อน พอเก่งแล้วค่อยทดสอบความเร็วหรือหาคอขวด เพื่อเรียนรู้ข้อจำกัดในการทำงานจริงของมัน
ส่วนข้อมูลที่ใช้ทดสอบ ลองหาอะไรที่ใกล้กับที่ใช้งานจริงอยู่แล้ว อาจจะเป็น text, social network data หรือ column row data ทั่วไป
Apache Tez เป็นส่วนหนึ่งของงานที่ทำอยู่แล้ว และผมก็อยากสนับสนุนโครงการโอเพนซอร์สด้วย พอพัฒนาฟีเจอร์ใช้ภายในบริษัทเสร็จก็เลยขอส่งโค้ดเข้าโครงการโอเพนซอร์สด้วย การเข้าร่วมกับโครงการโอเพนซอร์สจะช่วยขยายความคิดของเราให้กว้างขึ้น เพราะมีโอกาสเรียนรู้จากนักพัฒนาคนอื่นๆ
ขออธิบายกระบวนการว่า โครงการใต้ร่ม Apache แต่ละโครงการจะเลือกนักพัฒนาที่สามารถส่งโค้ดเข้าร่วมกับโครงการได้ ถ้าเป็นนักพัฒนาระดับ committer ก็สามารถเปลี่ยนโค้ดของ trunk (latest) version และ bug fix version ได้เองเลย
ตามปกติแล้วโครงการของ Apache ใช้วิธีเปลี่ยนโค้ดด้วยการส่งเรื่อง jira ticket เข้าไปที่ https://issues.apache.org/jira เลือกประเภทเป็นแจ้งบั๊ก (bug report) หรือว่าปรับปรุง (improvement idea) ก็ได้
ตอนเริ่มต้น เราก็เข้าไปส่งแพตช์แก้ไขสำหรับบั๊กนั้นๆ แล้วจะมีนักพัฒนาคนอื่นมารีวิวโค้ดของเรา และ commit เข้าระบบให้ ถ้าเราส่งเข้าไปอย่างต่อเนื่อง ก็จะถูกชุมชนเลือกให้เป็น committer ด้วยเลย
งานพัฒนาซอฟต์แวร์ในอเมริกามีโครงการที่มีความท้าทายในทางเทคนิค (technical challenge) ลึกกว่างานที่เมืองไทย
วัฒนธรรมการทำงานที่นี่เน้น performance-based หรือ project-based เข้างานไม่ต้องตอกบัตรเข้าออก แต่ไม่ใช่ว่าเข้ากี่โมงก็ได้ ถ้าทีมเราเข้า 8 โมงเช้าเพราะต้องคุยงานกับทีมต่างประเทศ เราก็ต้องเข้าตาม ส่วนการทำงานล่วงเวลาหรือทำงานในวันหยุด อันนี้แตกต่างกันตามวัฒนธรรมของแต่ละบริษัท โดยทั่วไปแล้ว ช่วงที่ระบบกำลังขึ้นก็มีงานล่วงเวลาเป็นปกติทุกบริษัท ทำงานจากนอกที่ทำงานผ่าน VPN มีเยอะสำหรับนอกเวลา
ส่วนบรรยากาศการทำงานค่อนข้างจริงจัง แต่ไม่ได้รู้สึกเหมือนเป็นครอบครัวพี่น้องเหมือนออฟฟิศเมืองไทย
แนะนำให้ฝึกทักษะทางเทคนิคให้รู้ลึก เข้าใจภาษา โครงสร้างข้อมูล อัลกอริทึมกับ concept ที่เรียนในมหาวิทยาลัย เขียนโค้ดให้เร็ว ไม่มีบั๊ก ฝึกเขียนให้ได้หลายภาษาแต่ให้มีภาษาที่คล่องที่สุดด้วย
นอกจากนี้ต้องฝึกภาษาอังกฤษให้คล่องในระดับสื่อสารได้ อธิบายโค้ดหรือความคิดเป็นภาษาอังกฤษได้
สุดท้ายคือพยายามทำโปรเจ็คให้เป็น portfolio ของตัวเอง ถ้าเป็น open-soure committer ได้จะมีประโยชน์มาก เพราะหลายบริษัทใหญ่ที่นี่มองว่าเป็นผลงานที่ชุมชนนักพัฒนาให้การยอมรับ
Comments
เทคโนโยลี => เทคโนโลยี
Automation Testing นี่ช่วยลดแรงงานที่ต้องใช้ในการทำ Testing ลงได้มาก บวกกับการมาของ Hadoop และ Big Data ที่ทำให้การทำ Parallel Processing มีความง่ายขึ้นกว่าแต่ก่อนครับ
ผมคิดว่าในอนาคต Big Data จะเป็นเรื่องที่สำคัญมากๆ ครับ ไม่ใช่แค่กับเฉพาะข้อมูลที่มีปริมาณมากๆ เท่านั้น แต่กับงานที่ต้องใช้เวลามากๆ แล้วต้องทำซ้ำบ่อยๆ อย่างการการทำ Testing เราก็สามารถนำ Hadoop มาช่วยเหลือได้เหมือนกันครับ
พอดีผมทำวิจัยป.โท เกี่ยวกับเรื่องนี้ครับ แต่เป็นการเอา Hadoop มาปรับใช้ทำ Automated GUI Testing สำหรับแอพ iOS ครับ
Cool เห็นวิดีโอแล้วนึกถึง Selenium
ข้อได้เปรียบหนึ่งของ Map reduce คือเอาโปรแกรมไปรันบนแต่ละโหนดที่มีข้อมูลแล้วจึงมารวม
ข้อมูลที่เป็นผลลัพธ์อีกทีทำให้มันทำงานได้เร็วเพราะไม่ต้องส่งผ่านข้อมูลขนาดใหญ่ระหว่างเครือข่าย
โปรเจคท์น่าสนใจดี แต่ผมยังไม่ค่อยเข้าใจว่ามันมีประโยชน์กับการ test ยังไงหรอครับ
เพราะจำนวนข้อมูลที่ทดสอบกับ ios ไม่น่าจะเยอะ
ถ้าเป็น android ที่มี fragmentation เยอะ แล้วใช้พวกทูลคิทอย่าง Akka หรือ แม้แต่การประยุกต์ใช้
เครื่องมือพวก distributed stream processing อย่าง Storm หรือ S4 ก็น่าสนใจ
กรณีที่แอพมีความซับซ้อน มีปุ่ม มีUI ที่ต้องทดสอบเยอะมาก ถ้าจะทดสอบให้หมดเพื่อให้แน่ใจว่าหลังจากแก้โค้ดแล้วไม่ไปกระทบจุดอื่นด้วย (regression) ก็อาจจะทำให้แอพนั้นมี test case ที่ต้องรันเยอะครับ ทีนี้การทำ GUI Testing มันใช้เวลานานครับ ไม่เหมือนกับ Unit Testing คือเราต้องทดสอบโดยการกดปุ่มโน้นนี่ไปเรื่อยๆ แล้วต้องเราต้องรอหลายอย่าง เช่นพวก Transition หรือ Animation ทั้งหลายแหล่ครับ เทสทีนึงก็จะใช้เวลานานครับ ถ้าเป็นแอพแบบ Universal ก็ต้องเทสทั้งบน iPhone กับ iPad ด้วย (แต่ก็คิดไว้ว่าทำเป็นแบบ All-in-one ไปเลยเทส Android/Windows Phone ได้ด้วยยิ่งดีครับ เขียนไว้ใน Future Work เหมือนกันครับ ฮ่าฮ่า)
เลยเกิดแนวคิดว่า ถ้าเราแบ่ง test case ไปเทสที่หลายๆ node น่าจะเร็วขึ้นครับ (Map) แล้วพอเทสเสร็จก็ส่งผลลัพท์กลับมารวมกัน (Reduce) จะเห็นว่ามันเข้ากับ Concept ของ MapReduce ได้พอดีเลยครับ แต่กรณีนี้คือ ข้อมูลไม่ได้มีขนาดใหญ่เพราะมีแต่ test case ที่ต้องการจะทดสอบ แต่ใช้เวลาในการ Process นานครับ มันเลยช่วยย่นเวลาจากปกติได้ถ้าแบ่งงานครับ แต่ถ้าแอพนั้นมี test case น้อยก็จะไม่ค่อยมีประโยชน์เท่าไหร่ครับ
ถึงตรงนี้ผมคิดว่าเราสามารถเอา Hadoop กับ MapReduce มาประยุคต์ใช้ในงาน Process ที่อาจจะต้องใช้เวลานานๆ ได้อีกหลายอย่างเลยครับ อย่างงาน GIS เป็นต้นครับ :D
ผมคิดว่าประยุกต์ใช้กับ Storm, S4 หรือ Spark Streaming น่าจะเหมาะกว่า Hadoop นะครับ อีกทั้งยังแสดงผลการ test ได้แบบ real-time ด้วย ยิ่งถ้าเป็น graph ได้ด้วยนี่ทำเสร็จขายได้เลย
เห็น Hadoop 2 (Yarn) เปลี่ยนจาก framework ขนาดใหญ่มาเป็น component ย่อยๆแทน ผมยังไม่ได้ลอง เคยใช้แต่ Hadoop 1 ถ้ามีเวลาอยากจะลองเล่น Spark บน Yarn (จริงๆเวลามี แต่ขี้เกียจ 555)
ถ้าผมเป็นคุณ ผมคงเล่น Akka เอาแบบ Overhead น้อยสุด แต่อาจจะโต๊ดเยอะหน่อย :)
คงต้องลองดูครับ แต่ว่าจากที่ทดสอบ ใช้ Hadoop มี Overhead อยู่จริงครับช่วง start-up ครับ
+1 น่าสนใจครับ
แวลลีย์
วัลลีย์
เขียนโค้ดให้เร็ว ไม่มีบั๊ก--->T_T
จาก คนเดินถนน 100 คน น่าจะมีคน อ่านแล้วเข้าใจ บทความข้างบน ไม่ถึง 8 คน?
Blognone เป็นเว็บคนเดินถนน?
Russia is just nazi who accuse the others for being nazi.
someone once said : ผมก็ด่าของผมอยู่นะ :)
อันนี้ไม่ใช่บทความ อันนี้เป็นบทสัมภาษณ์คนไทยในซิลิคอนวัลเลย์ที่ทำงานด้านเทคนิคที่นั้น ซึ่งไม่แปลกอยู่แล้วที่จะมีเนื้อหาที่เข้าใจยาก แต่แน่นอนว่าเมืออ่านจบ ถ้าเป็นคนทำงานด้านเทคนิคคงเอาสิ่งเหล่านี้ไปต่อยอดและพัฒนาตัวเองต่อไป ส่วนคนที่ไม่รู้ และไม่คิดจะรู้ ก็คงจะปิดมัน แล้วก็ใช้ชีวิตตามปรกติ
แนวคิดคือ อีก 92 คนจะรู้ว่า "ตัวเองไม่รู้อะไร" แล้วกลับไปหาเพิ่มเติม
สุดท้ายเราอาจจะมีสัก 30 คนที่กลับมาอ่านแล้วรู้เรื่องครับ
ส่วนคนที่อ่านแล้วไม่รู้เรื่อง แล้วไม่ทำอะไร เราก็คงทำอะไรไม่ได้
lewcpe.com, @wasonliw
ต้องเข้าใจ concept เว็บ Blognone ก่อนครับ
oxygen2.me, panithi's blog
Device: ThinkPad T480s, iPad Pro, iPhone 11 Pro Max, Pixel 6
ขอบคุณมากครับ สำหรับเรื่องราวดีๆที่นำมาแบ่งปัน ทั้งคนสัมภาษณ์และคนให้สัมภาษณ์ เก่งมากๆ
..: เรื่อยไป
ตอนนี้บริษัทเราก็ใช้ Spark & Hadoop ทำ Big Data อยู่บน Mesos ยากสุดๆ
มีใครทำอะไรแบบนี้ที่เมืองไทยอีกไหมเนี่ย น่าจะมี Meetup แลกเปลี่ยนความรู้กันนะครับ
พูดมาอย่างนี้
ผมนั่นแหละที่อยากเข้าในเนื้องานแบบนี้กับคุณ
เพราะผมยังไม่ค่อยเข้าใจเท่าไหร่ และไม่ได้แตะต้องพวกนี้เลย