Jan 27, 2021Explode the array of struct in Hiveวันนี้เจอปัญหาหนึ่ง ซึ่งทีแรกคิดว่าจะมีการแก้ปัญหาแบบง่ายๆ แต่ดันไปจบที่วิธีการดั้งเดิมมากๆ คือการ explode โจทย์ที่ต้องแก้ปัญหาวันนี้คือ มีข้อมูลอยู่ใน mongodb แล้วต้องพามันไปอยู่ในโลกของ hdfs ให้ได้ โดยเงื่อนไขคือ จะต้องสามารถ search ด้วย where clause ในรูปที่สามารถใช้งานได้ง่ายๆ โดยธรรมชาติของข้อมูลใน mongodb เราจะเจอหนึ่งสิ่งที่เป็นปกติเลยคือข้อมูลที่เป็น document-based หรือเราเรียกง่ายๆ ว่า json object ที่จะมี json object ซ้อนๆ เข้าไปใน object นั้นๆ อีกMongodb2 min readMongodb2 min read
Apr 14, 2020Fluentd overview2–3 อาทิตย์ก่อนต้อง tune fluentd ครับ พอไปดู configuration มันแล้ว มีของเยอะมากๆ บางตัวก็เหมือนจะเข้าใจแต่ไม่เข้าใจ จะทำไงดี ก็ไปแกะ source code มันสิครับ พอทำความเข้าใจมันได้ ก็ต้องเตรียมแผน scale อีก เลยต้องเข้าใจภาพรวมมันก่อน จะทำไงดี ก็แกะ code มันอีกรอบ คราวนี้แกะตั้งแต่ต้นทางยันปลายทางเลย จะได้เห็นคอขวดว่าตรงไหนน่าจะเกิด พอเห็นภาพกว้างๆ แล้วก็เอามาสรุปเอาไว้หน่อยดีกว่า fluentd คืออะไร? ในเว็บมันว่าไว้งี้ครับFluentd5 min readFluentd5 min read
Published in LINE Developers Thailand·Dec 23, 2019Argo workflows and Why not Airflow?คือตอนนี้ ด้วย project ที่ผมทำงานด้วย ใช้เครื่องมือประเภท Workflow manager ที่ชื่อว่า Argo workflows ครับ (ซึ่งต่อไปจะขอเรียกว่า Argo พอ) เป็นเครื่องมือในการคุม workflow สำหรับ data pipeline ครับ พอสมาชิกในทีมรู้ว่าเลือกเครื่องมือตัวนี้ก็มีคำถามตามมาเลยว่าทำไม?? เพราะตอนแรกเราใช้เครื่องมือที่ชื่อว่า Apache Airflow อยู่(ซึ่งต่อไปจะขอเรียกว่า Airflow พอ) ทำไมถึงไม่เลือกใช้ต่อ?? โพสนี้เลยพยายามจะให้เห็นว่า Argo มันทำงานยังไง ทำไมถึงเลือกเครื่องมือตัวนี้ โดยเทียบกับ AirflowData Engineering6 min readData Engineering6 min read
Nov 10, 2019จบฮาล์ฟแบบไม่เจ็บอยากแชร์ achievement วันนี้หน่อย คือวันนี้ผมวิ่งจบ half 21 km ได้ครั้งแรกในชีวิตครับ ด้วย pace 7 ซึ่งอันนี้เฉยๆ ครับ แต่ความตื่นเต้นจริงๆ คือ มันจบได้แบบไม่เจ็บ สิครับ ต้องย้อนไปอาทิตย์ที่แล้วก่อนว่า ผมวิ่งไป 16 km ละมันเจ็บเข่ามาก ละอาการเจ็บเข่าเนี่ย มันมีมาทั้งชีวิต ที่ กม ที่ 7–8–9 ราวๆ นี้ ตลอดทั้งชีวิต ไม่เคยหายเลย เพราะฉะนั้นการวิ่งของผมจะตันอยู่ 10 km นี่แหละ ผมลองปรับด้วยการลด pace ลง พบว่ามันชะลอการเจ็บได้แฮะ แต่มันโผล่มาตอน กม ที่ 10 ว่ะ ละก็ต้องผ่อนทุกๆ กม ถัดไป ดันทุรังจนได้ 16…Running Tips2 min readRunning Tips2 min read
Oct 5, 2019ARGO สั้นๆpost นี้ตั้งใจจะให้สั้นๆ เพราะ Argo มันสั้นจริงๆ cli argo submit workflow definition(CRD) ไปที่ K8S API สร้าง resource จาก yaml file(CRD) ไว้ใน etcd ใน K8S มี argo controller คอยดูว่ามี CRD ที่เป็น workflow มาใหม่ไหม ถ้ามีสร้าง K8S POD ตามที่ define ไว้ใน CRD POD จะทำงานตามลำดับที่ define ไว้และ update status เรื่อยๆ ใน etcd สิ่งที่เราต้องทำคือ define ส่วนที่เป็น workflow และ image ที่จะทำงานใน POD จบArgo1 min readArgo1 min read
Aug 18, 2019ทำไมต้องจับยกกำลังสองใน Variance และ SDคือกำลังศึกษาพื้นฐานของสถิติอยู่ครับ ในชีวิตนี้ อันนี้คือรอบที่ 3 ที่ศึกษาด้วยความจริงจัง ลืมไปหมดแล้ว 5555 เจอค่าเฉลี่ย(mean) ผ่านไปอันแรก เข้าใจได้ไม่มีปัญหา สมมติตัวอย่างเป็นความสูงของนักเรียนในห้องละกัน(และจะใช้ตัวอย่างนี้ตลอดใน post นี้) ค่าเฉลี่ยจะหมายความว่า เอาทุกๆ คนมาวัดความสูงกัน แล้วพยายามตบๆ เกลี่ยๆ(เฉลี่ยนั่นแหละ) ให้เท่ากัน อันนี้น่าจะเข้าใจกันหมด ไม่ต้องอธิบายมาก ต่อมาเป็นค่าความแปรปรวน(variance) “น่าจะ” หมายถึงรวมๆ มันแกว่งหรือห่าง หรือกระจายตัว จากค่า mean ขนาดไหนStandard Deviation2 min readStandard Deviation2 min read
Published in LINE Developers Thailand·Aug 13, 2019Cuckoo filter: Better than Bloomวันก่อนดู talk เกี่ยวกับ data algorithm แล้วเจอว่ามันมีสิ่งที่ทำอะไรได้เหมือนกับ Bloom filter ได้ แต่สามารถลบของที่อยู่ใน data ที่เราเอามา filter ได้ หากยังไม่รู้จัก Bloom filter สามารถจิ้มไปอ่านที่ผมเขียนเอาไว้ก่อนได้ 4 เทคนิคที่ควรรู้ในการทำงานกับ streaming data ช่วงนี้ผมทำงานเกี่ยวกับ streaming data processing ซะส่วนใหญ่ครับ เจอโจทย์ที่สามารถแก้ได้ด้วยสติปัญญาที่มี แต่พบว่า…medium.com ซึ่งหลักๆ ทั้ง Bloom filter และ Cuckoo filter มีเอาไว้แก้ปัญหาในการเช็คว่ามีข้อมูลหรือสิ่งที่เรากำลังพิจารณาอยู่ในกลุ่มของข้อมูลหรือเปล่า เช่น IP นี้ เคยมาเยี่ยมชมเว็บไซต์เราหรือยังBackend5 min readBackend5 min read
Published in LINE Developers Thailand·May 16, 20194 เทคนิคที่ควรรู้ในการทำงานกับ Streaming Dataช่วงนี้ผมทำงานเกี่ยวกับ streaming data processing ซะส่วนใหญ่ครับ เจอโจทย์ที่สามารถแก้ได้ด้วยสติปัญญาที่มี แต่พบว่า มันแพงมากในแง่ของการใช้ทรัพยากร เพราะข้อมูลเยอะมาก ตัวอย่างความแพงก็เช่น ใช้ ram เยอะ ใช้ network io เยอะ เลยต้องไปทำการบ้านเพิ่ม พบว่ามี 4 สิ่งที่คิดว่าน่าจะเอามาใช้ประโยชน์ในการทำงานกับ streaming data processing คือ Reservoir sampling Bloom filter Count-min sketch HyperLogLog 4 เทคนิคนี้ เป็นสิ่งที่มีข้อจำกัดว่าจะทำงานได้ดีกับข้อมูลที่มีลักษณะ streaming และเนื่องจากเป็นการใช้ประโยชน์จากเรื่องความน่าจะเป็น(probability) สิ่งที่แลกมาก็คือความถูกต้องของข้อมูลจะไม่แม่นยำมากนัก…Live Streaming Data12 min readLive Streaming Data12 min read
Jan 13, 2019Datalake ยังไง(วะ) #3 : ประกอบร่างหลังจากโพสที่แล้ว นานมาก เพิ่งมีเวลามาต่อ Datalake ยังไง(วะ)? #2 : Lambda Architecture โพสที่แล้วmedium.com ก็มี flow ครบ cycle ตั้งแต่เอาเข้ามา แล้วก็มีช่องทางสำหรับเอาออก โพสนี้ก็จะเอาเครื่องมือมาประกบ ในแต่ละชั้นของ architecture แต่คงไม่ได้ลงรายละเอียดนะครับ ข้อสงสัยอื่นๆ อาจจะต้องศึกษาด้วยตัวเอง Data Acquisition Layer ที่มีหน้าที่รับข้อมูลจากแหล่งต่างๆ หลายๆ ที่ มีเครื่องมือดังนี้ Apache Sqoop สำหรับ batch dataData Engineering5 min readData Engineering5 min read
Oct 10, 2018Apache Spark: Repartition vs Coalesceตอนแรกว่าจะไม่ลง blog แล้ว คือมันสั้นมาก ใน stackoverflow ยังมีคนถามเลย Spark - repartition() vs coalesce() Justin's answer is awesome and this response goes into more depth. The repartition algorithm does a full shuffle and…stackoverflow.com แต่ก็เอามาลงแหละ น่าจะช่วยเหลือคนที่สงสัยได้ คือไม่เคยสงสัย จนมาสังสัย แล้วก็หาคำตอบได้ จุดประสงค์ของทั้ง 2 method นี้คือ ต้องการมี RDD ตามจำนวน partition ที่กำหนดRdd1 min readRdd1 min read