Ambari #05 การดึงข้อมูลเข้าจาก MySQL เข้าสู่ Hive ด้วย Sqoop

Apache Hive เป็นระบบ Data Warehouse ซึ่งสร้างอยู่บน Hadoop ใช้สำหรับการวิเคราะห์ข้อมูล โดยจุดเด่นคือการใช้คำสั่งภาษา SQL ในการเรียกข้อมูล ทั้งที่อยู่ในรูปแบบของ Database และไฟล์บน Hadoop ได้ เหมาะสำหรับการเก็บข้อมูลขนาดใหญ่มากๆ เช่น การเก็บข้อมูลที่ Rotate ออกจากฐานข้อมูลหลักอย่าง MySQL ก็นำมาเก็บไว้ใน MySQL เพื่อใช้วิเคราะห์ต่อไป ในการดึงข้อมูลจาก MySQL จะแบ่งเป็น 2 ส่วน คือ Full Backup คือการนำข้อมูลทั้งหมดจาก MySQL มาเก็บไว้ใน Apache Hive Incremental Backup คือการดึงเฉพาะข้อมูลที่เพิ่มขึ้นมาเก็บไว้ใน Apache Hive แต่ในบทความนี้ จะแนะนำการทำแบบ Incremental Backup ซึ่งในครั้งแรกจะทำ Full Backup และครั้งต่อๆไป จะทำ Incremental Backup เลย Incremental Backup sqoop ออกแบบมาให้สามารถ Run คำสั่งให้ทำงานทันทีก็ได้ หรือ จะสร้างเป็น Job เอาไว้ เพื่อใช้งานภายหลังก็ได้ ในที่นี้จะสร้างแบบ Job เพราะให้สะดวกในการทำ Incremental Backup การสร้าง Sqoop Job ใช้คำสั่ง sqoop job –create JobName — import … ในส่วนที่จะบอก sqoop ให้ทำงานแบบ incremental backup ต้องตามด้วย Options –incremental append –check-column your_primary_key ในตัวอย่างต่อไปนี้ จะสร้าง sqoop job ชื่อ maillog-incremental ใช้คำสั่งต่อไปนี้ เพื่อดึงข้อมูลทั้งหมดจาก your.mysql.server ใน Database: mailscanner จาก Table: maillog โดยสมมุติใช้ username/password เป็น root/123456 แล้วนำมาใส่ใน Hive Database: mailscanner เพิ่มเติมคือ ให้เก็บไว้ในรูปแบบ Paquet File และ กำหนดให้ใช้ Field: timestamp เป็น Key เพื่อแบ่งงานเพื่อดึงข้อมูลแบบ Parallel ในที่นี้กำหนดให้แบ่งออกเป็น 10 ส่วนพร้อมๆกัน UPDATE: sqoop job จะไม่ยอมให้ใส่ password ตรงๆ แต่จะต้องสร้างไฟล์ password เก็บไว้ใน hdfs และต้องเป็น mode 400 ให้ทำคำสั่งต่อไปนี้ก่อน echo -n “123456” > mysqlpassword.txt hdfs dfs -put mysqlpassword.txt mysqlpassword.txt hdfs dfs -chmod 400 mysqlpassword.txt แล้วจึงสร้าง sqoop job ด้วยคำสั่งต่อไปนี้ sqoop job –create maillog-incremental — import –connect jdbc:mysql://your.mysql.server:3306/mailscanner –username root –password-file /user/hdfs/mysqlpassword.txt –table maillog –hive-database mailscanner –as-parquetfile –hive-import –split-by timestamp -m 10 –incremental append –check-column timestamp เมื่อสร้าง sqoop job เสร็จแล้ว สามารถเรียกดูได้ด้วยคำสั่ง sqoop job –list ดูรายละเอียดการทำงานได้ด้วย คำสั่ง

Read More »

การลบเมลล์ใน PSU Webmail

เคยเจอปัญหาว่า… มีคนทั้งนอกและในมอ. ส่งเมลล์เช้า @psu.ac.th แต่ไม่ได้รับเมลล์ (ปกติเช็คเมลล์ผ่าน google) เลยลองเข้า https://webmail.psu.ac.th ดูเพื่อที่จะเข้าไปลบเมลล์ เพราะระบบแจ้งว่าพื้นที่เมลล์เต็มแล้ว ก็ทำการลบ(ตามรูป) แต่ก็ไม่เป็นผล เหมือนว่าเมลล์ยังไม่ได้ถูกลบ และพื้นที่เมลล์ก็ยังคงเต็มอยู่เหมือนเดิม มาดูวิธีการลบเมลล์ในกล่อง Inbox กันครับ 1. select all 2. click ปุ่ม Delete 3. แล้วคลิกปุ่ม Expunge อีกครั้ง เมลล์จะถูกลบเป็นหน้าๆ ไป ก็ทำอย่างนั้นไปเรื่อยๆ จนกว่าจะหมด 4. Sign Out แล้วทำการ Sign in ใหม่อีกครั้ง 5. พื้นที่เก็บเมลล์ (Quota Usage) เหลือเยอะขึ้น   หวังว่าจะเป็นประโยชน์กับใครหลายๆคนหรือผู้ที่ประสบปัญหาเดียวกันนะครับ ^^ *** อย่าลืมหมั่นตรวจสอบ และลบเมลล์ออกบ้างนะครับเพื่อเคลียร์พื้นที่ในการจัดเก็บเมลล์

Read More »

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 ขั้นตอนการใช้งาน สิ่งที่เรากำลังจะทำคือ สร้าง Ubuntu 14.04 LTS จำนวน 4 เครื่อง แต่ละเครื่อง ใช้เป็น t2.medium ซึ่งมี CPU Intel Xeon 2.5 GHz 2 ตัว, มี RAM 4 GB และมี SSD HD 30 GB Login เข้าไปยัง AWS Console (ผมเลือกใช้ Singapore นะครับ) แล้วคลิก Launch Instance เลือก Ubuntu Server 14.04 LTS 64bit คลิก Select เลือก Instance Type เป็น t2.medium แล้วคลิก Next: … ต่อไป เลือกขนาด Storage ในที่นี้ ใส่ size เป็น  30 GB แล้วคลิก Next … Add Tags ในกรณีต้องการใส่ Tag เพือให้ง่ายต่อการจัดกลุ่มสามารถทำได้ แต่ไม่ขอทำในตอนนี้ คลิก Next ต่อไป สร้าง 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 มีเตือนเรื่องความปลอดภัย … ใช่ … แต่ผ่านไปก่อน คลิก Launch สร้าง Key pair เพื่อให้สามารถ SSH เข้าไปใน

Read More »

วิธีทำ Password-less SSH บน Ubuntu

ในการทำงานกับ Server Cluster ขนาดใหญ่ ซึ่งประกอบด้วย Ubuntu Server จำนวนมาก หากต้องแก้ไขระบบทั้งหมด โดยการ Secure Shell หรือ SSH เข้าไปทีละเครื่อง “โดยต้องเป็น root ด้วย” จะเป็นงานที่ใช้เวลาอย่างมาก เค้าจึงมีระบบที่เรียกว่า Password-less SSH โดยการแลกเปลี่ยน Public Key แทนที่จะต้อง Login ด้วย Username/Password และเนื่องจาก Ubuntu โดย Default ไม่มีการสร้าง root password (มี root แต่ไม่มี password –> ก็เลย Login ไม่ได้ด้วย Password) ซึ่งก็ดีในเรื่องของ Security แต่ทำให้การทำงานยุ่งยากนิดหน่อย บทความนี้จะกล่าวถึงวิธีการทำ Password-less SSH รวมไปถึง การที่ไม่ต้องถาม Known Host ในครั้งแรกที่เข้าใช้งานด้วย โดยระบบจะประกอบด้วย server01 เป็นเครื่องที่จะสั่งการเครื่อง server02 … serverNN ในสิทธิ์ root และในระบบนี้ ทุกเครื่องมี user ชื่อ mama ซึ่งมีสิทธิ์ sudo ที่เครื่อง server01 ใช้คำสั่งต่อไปนี้ เพื่อสร้าง Public/Private rsa key pair ssh-keygen จะได้ผลดังนี้ ซึ่งจะได้ไฟล์มา 2 file อยู่ใน directory: ~/.ssh – id_rsa – id_rsa.pub เพื่อไม่ให้การ SSH ไปยังเครื่องใหม่ๆ มีการถาม Known Host แบบนี้ แล้วก็ต้องคอยตอบ yes ทุกเครื่องไป ก็ให้สร้างไฟล์ .ssh/config ว่า (วิธีนี้จะมีผลเฉพาะ mama เท่านั้น) หรือสร้างใน /etc/ssh/ssh_config เพื่อให้มีผลทั้งระบบ Host * StrictHostKeyChecking no UserKnownHostsFile=/dev/null จากนั้น ให้เอาไฟล์ Public Key คือ  .ssh/id_rsa.pub  ไปยังเครื่องปลายทาง ในที่นี้คือ server02 (ใช้วิธี scp ไปยัง mama@server02) scp .ssh/id_rsa.pub mama@server02:~ ในครั้งแรกนี้ ยังต้องใส่ Password ของ mama บนเครื่อง server02 อยู่ จากนั้น ไปดำเนินการต่อใน server02 ที่เครื่อง server02 ใน home directory ของ mama บน server02 จะมีไฟล์ id_rsa.pub อยู่ ลองตรวจสอบโดยใช้คำสั่ง ls -l /home/mama/id_rsa.pub เปลี่ยนเป็น root ด้วยคำสั่ง sudo su แล้ว เข้าไปใน root home directory ด้วยคำสั่ง cd สร้าง directory .ssh และ สร้างไฟล์ .ssh/authorized_keys โดยนำข้อมูลในไฟล์ /home/mama/id_rsa.pub มาต่อท้าย mkdir .ssh cat /home/mama/id_rsa.pub >> .ssh/authorized_keys เพื่อความปลอดภัย ตั้งค่า Permission ให้ถูกต้อง chmod 700 .ssh chmod 600 .ssh/authorized_keys   จากนั้น ลองทดสอบ ssh จาก

Read More »

Spark #04 – Pyspark connect to MySQL

ในบทความนี้ จะกล่าวถึง การดึงข้อมูลจาก MySQL ผ่าน JDBC เพื่อนำมาใช้งานใน Spark ด้วยภาษา Python ซึ่งจะใช้ Library Pyspark ในขั้นตอนนี้ขอกล่าวเฉพาะวิธีการก่อน (รายละเอียดจะตามมาทีหลัง) สร้าง SparkSession ตั้งชื่อว่า myspark from pyspark.sql import SparkSession myspark = SparkSession \ .builder \ .appName(“Python Spark SQL basic example”) \ .config(“spark.some.config.option”, “some-value”) \ .getOrCreate() ติดต่อ MySQL และสร้าง View ชื่อ myuser myuser=myspark.read.jdbc(url=”jdbc:mysql://mysql/mysql”,table=”user”, properties={ ‘user’: ‘user1’, ‘password’: ‘123456’} ) myuser.createOrReplaceTempView(name=”myuser”) จากนั้นก็จะสามารถ Query ข้อมูลที่เก็บไว้มาใช้งานใน Spark ได้ myspark.sql(sqlQuery=”select user,host from myuser where user=’user1′”).show() ซึ่งต่อจากนี้ จะสามารถใช้ความสามารถของ Spark ซึ่งทำงานด้าน Distributed Computing ได้ดี มาปรับปรุงความเร็วในการ Query ที่ซับซ้อน เช่นการ JOIN ได้ โดยจะกล่าวในบทความต่อๆไป

Read More »