การใช้งาน Google Datalab Notebook บน Dataproc เพื่อสร้าง Machine Learning Model เบื้องต้น

ต่อจาก สร้าง Hadoop และ Spark Cluster เพื่องานด้าน Data Science ด้วย Google Cloud Dataproc + Datalab จาก Google Cloud Datalab คลิก Notebookแล้ว ตั้งชื่อ Demo01 เลือได้ว่า จะใช้ Python2 หรือ Python3 ในที่นี้จะเลือก Python3 ตรวจสอบรุ่นของ Spark ที่ใช้งานด้วยคำสั่ง spark.version แล้วกดปุ่ม Shift+Enter เพื่อ Run สามารถใช้คำสั่งไปย้ง Shell ซึ่งเป็น Linux ได้ โดยใช้เครื่องหมาย ! นำหน้า ในที่นี้ จะ Download iris dataset จาก https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data มาไว้ในเครื่อง mycluster-m ด้วย คำสั่ง ! wget https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data แล้ว เอาไปใส่ใน HDFS ด้วยคำสั่ง ! hdfs dfs -put iris.data / จะได้ผลประมาณนี้ จาก Machine Learning #01 – Python with iris dataset ซึ่งเดิมใช้ sklearn จะเปลี่ยนเป็น Spark MLlib เพื่อใช้ความสามารถของ Spark Cluster ได้ เริ่มต้นจาก Import Library ที่จำเป็นดังนี้ # Import Libaries from pyspark.ml import Pipeline from pyspark.ml.evaluation import MulticlassClassificationEvaluator from pyspark.ml.classification import LogisticRegression from pyspark.ml.tuning import ParamGridBuilder, CrossValidator from pyspark.ml.feature import VectorAssembler from pyspark.sql.types import * จากนั้น สร้าง Spark Dataframe (Concept จะคล้ายกับ Pandas แต่มีรายละเอียดที่มากกว่า) # get into DataFrame csvFile = spark.read.csv(‘/iris.data’, inferSchema=True) diz = {“Iris-setosa”:”1″, “Iris-versicolor”:”2″, “Iris-virginica”:”3″ } df = csvFile.na.replace(diz,1,”_c4″) df2 = df.withColumn(“label”,df[“_c4”].cast(IntegerType())) \ .withColumnRenamed(“_c0″,”sepal_length”) \ .withColumnRenamed(“_c1″,”sepal_width”) \ .withColumnRenamed(“_c2″,”petal_length”) \ .withColumnRenamed(“_c3″,”petal_width”) train,test = df2.randomSplit([0.75,0.25]) เริ่มจาก ให้ spark session (spark) อ่านไฟล์ CSV จาก HDFS /iris.data โดยระบุว่า ให้กำหนด Data Type อัตโนมัติ (inforSchema=True) และไฟล์นี้ไม่มี Header Dataset นี้ ประกอบด้วย 5 columns เมื่อ Spark อ่านข้อมูลเข้ามา จะตั้งชื่อ column เป็น _c0, _c1, _c2, _c3, _c4 โดย _c4 จะเป็น label ของชนิดของดอก iris ซึ่งกำหนดเป็น String => Iris-setosa, Iris-vesicolor,

Read More »

สร้าง Hadoop และ Spark Cluster เพื่องานด้าน Data Science ด้วย Google Cloud Dataproc + Datalab

จาก Ambari #01: ติดตั้ง Ambari Server , Ambari #02 ติดตั้ง Ambari Agent , Ambari #04 การสร้าง Hadoop ด้วย Ambari บน AWS และ GCP #01 วิธีการสร้าง Virtual Machine บน Google Cloud Platform จะเห็นได้ว่า ก็ยังมีความยุ่งยากอยู่ อีกทั้ง หากต้องการใช้ PySpark ก็ต้องตามติดตั้ง Python Packages ต้องปรับค่ามากมาย และหากต้องการขยายระบบ ก็มีงานต้องทำอีกเยอะ ในบทความนี้ จะแนะนำอีกวิธีหนึ่ง คือ การใช้งาน Google Cloud Dataproc ซึ่งจะทำให้เราได้ใช้ Hadoop + Spark Cluster ซึ่งได้รับการทดสอบเป็นอย่างดี อีกทั้งยังสามารถเลือกใช้ Spark รุ่นต่างๆได้อย่างง่ายได้ ทำให้สามารถโฟกัสไปยัง Data และ กระบวนทำ Machine Learning ได้เต็มที่ ไปที่ Google Cloud Console เพื่อเลือก Project ที่จะทำงานด้วย และเปิดช้งาน Cloud Dataproc และ Compute Engine APIs และ ในที่นี้ จะมี project-id คือ kx-dataproc-01 (สามารถสร้างในชื่อที่ต้องการเองได้) https://console.cloud.google.com/ เปิดใช้งาน Google Cloud Dataproc https://console.cloud.google.com/dataproc/ เปิด GCLOUD COMMAND ในที่นี้ จะสร้าง Cluster ชื่อ mycluster ใน project-id ชื่อ kx-dataproc-01 แล้วให้ copy คำสั่งต่อไปนี้ลงไปใน gcloud command แล้วกดปุ่ม Enter gcloud dataproc clusters create mycluster –project kx-dataproc-01 –initialization-actions gs://dataproc-initialization-actions/datalab/datalab.sh ใช้เวลาประมาณ 5 นาที ก็จะได้ Hadoop + Spark Cluster ที่มี 1 Master และ 2 Workers ซึ่ง Master จะชื่อว่า mycluster-m และ Workers จะชื่อ mycluster-w-0 และ mycluster-w-1 ต่อไป ทำ SSH Tunnel จาก Master คือ mycluster-m Port 8080 ออกมา โดยพิมพ์คำสั่งต่อไปนี้ gcloud compute ssh mycluster-m –project kx-dataproc-01 –zone=asia-southeast1-a — -4 -N -L 8080:mycluster-m:8080 โดย –project ไว้สำหรับระบุชื่อ project-id –zone ไว้ระบุ Zone ที่ Cluster อยู่ — ไว้เป็นตัวคั่น (separator) ว่าหลังจากนี้เป็นคำสั่งของ ssh -4 บอกว่า ติดต่อด้วย IPv4 -N บอกว่า ไม่ต้องเปิด Shell ของเครื่อง Master -L บอกว่า จะ Forward Port 8080 ไปยังเครื่อง mycluster-m ที่ port 8080 จากนั้น เปิด Web Preview

Read More »

วิธีติดตั้งระบบ Cyrus IMAP Cluster (Cyrus Murder)

ต่อจาก Mail Clustering with Cyrus Murder และ How Cyrus Murder (Mail Clustering) work? คราวนี้ มาลง รายละเอียดทีละขั้นตอน ระบบ Cyrus IMAP Cluster หรือ Cyrus Murder นี้ ประกอบด้วยเครื่องคอมพิวเตอร์ ขั้นต่ำ 3 เครื่อง คือ frontend, backend, mupdate ต่อไปนี้ จะเป็นวิธีการทำ แต่ละเครื่อง   Prerequisite ทั้งหมดเป็น Ubuntu 16.04 Server, ทำการ update และ upgrade แล้ว และ เข้า SSH ด้วย user ที่สามารถ sudo ได้ และรุ่นของ cyrus-imapd, cyrus-murder ที่ใช้เป็น 2.4.18 ทุกเครื่อง มี user ชื่อ ‘cyrus’ และ ทำการตั้งรหัสผ่านไว้เรียบร้อย เฉพาะเครื่องที่เป็น Backend จะต้องมี uesr ชื่อ ‘mailproxy’ และทำการตั้งรหัสผ่านไว้เรียบร้อย ด้วยอีก 1 คน ในที่นี้ จะใช้ pam-ldap ติดตั้งใน Backend ทุกเครื่อง MUPDATE ( mupdate1.example.com ) ติดตั้ง cyrus-murder ด้วยคำสั่ง sudo apt install cyrus-murder cyrus-common sasl2-bin ระบบจะติดตั้งตั้งโปรแกรมที่เกี่ยวข้อง รวมถึง postfix ด้วย ให้เลือกเป็น No configuration ไป แก้ไขไฟล์ /etc/cyrus.conf ใน Section “SERVICES” ประมาณบรรทัดที่ 62 ให้ uncomment เพื่อได้บรรทัดนี้ mupdate       cmd=”mupdate -m” listen=3905 prefork=1 จุดสำคัญคือ mupdate -m คือ ตัวที่จะบอกว่า ทำหน้าที่เป็น MUPDATE Master แก้ไขไฟล์ /etc/imapd.conf เพื่อกำหนด admins ในที่นี้ให้ใช้ชื่อ cyrus โดยการ uncomment ประมาณบรรทัดที่ 55 และแก้ sasl_pwcheck_method เป็น saslauthd sasl_pwcheck_method: saslauthd sasl_mech_list: PLAIN admins: cyrus จากนั้น start ระบบขึ้นมา จะพบว่ามีการเปิด port 3905 รออยู่ sudo /etc/init.d/cyrus-imapd start netstat -nl | grep 3905 แก้ไขไฟล์ /etc/default/saslauthd บรรทัดที่ 7 START=yes แล้ว start saslauthd sudo /etc/init.d/saslauthd start BACKEND ( backend01.example.com) ติดตั้ง sudo apt install cyrus-imapd cyrus-common cyrus-clients sasl2-bin แก้ไขไฟล์ /etc/imapd.conf โดยเพิ่มบรรทัดต่อไปนี้ไว้ท้ายไฟล์ #SASL sasl_pwcheck_method: saslauthd sasl_mech_list: PLAIN # MUPDATE servername: backend01.example.com admins: cyrus    proxyservers:

Read More »

GCP #01 วิธีการสร้าง Virtual Machine บน Google Cloud Platform

ขั้นตอน มี Google Account ไปที่ https://console.cloud.google.com/start สำหรับคนที่ใช้ครั้งแรก ควรจะใช้สิทธิ์ Free Trial 300 USD / 12 Month ในการใช้งาน จะต้องมี Billing Account โดยต้องกรอกข้อมูล บัตร Credit/Debit ซึ่งต้องเป็น VISA/MasterCard เท่านั้น และต้องไม่ใช่ Prepaid ด้วย https://cloud.google.com/billing/docs/how-to/payment-methods#add_a_payment_method เมื่อเสร็จแล้วจะได้ Credit อย่างนี้ ต่อไป สร้าง Virtual Machine กัน ไปที่ เมนู > Cloud Launcher จะเห็นได้ว่า ตอนนี้ระบบจะสร้าง “My First Project” ไว้ให้ ซึ่งเราสามารถ สร้าง Project ใหม่ก็ได้ แต่ตอนนี้ใช้อย่างนี้ไปก่อน ต่อไป จะลองสร้าง Ubuntu Server ขึ้นมาใช้งาน ในที่นี้จะสร้าง Ubuntu 14.04 พิมพ์ Ubuntu ในช่องค้นหา แล้ว เลือก Ubuntu 14.04 จากนั้น คลิก Launch on Compute Engine ตั้งชื่อตามต้องการ (ถ้าต้องการ) สามารถเลือก Zone และ Machine Type ได้ตามความเหมาะสม ซึ่งจะมีราคาแตกต่างกัน ค่าเริ่มต้น Machine Type: n1-standard-1 จะให้ 1 vCPU, 3.75 GB RAM และ 10 GB standard persistent disk หากต้องการ Disk เพิ่ม สามารถคลิก Change เพื่อเพิ่มได้​ (standard persistent disk จะราคาถูกกว่า ssd มาก) ต่อไป กำหนดเรื่องเของ Firewall ถ้าให้บริการ HTTP/HTTPS ก็คลิกเลือกได้เลย ในกรณีที่ต้องการกำหนดค่าอื่นๆ เช่น Disk, Network, SSH Key ให้คลิก “Management, disks, networking, SSH keys” เสร็จแล้วกดปุ่ม Create รอสักครู่ ก็จะได้ VM มาใช้งานแล้ว ในที่นี้ จะได้ External IP ซึ่งใช้ในการติดต่อจาก Internet มา แต่หากมีการ Restart/Stop IP address นี้ก็จะเปลี่ยนไป (การ Fix มีค่าใช้จ่ายนิดหน่อย) และ การติดต่อไปยัง VM ก็สามารถทำได้ โดยการคลิก SSH ซึ่งสามารถเข้าถึงได้จาก Console นี้ หากต้องการใช้งานจาก Client อื่นก็ทำได้ แต่ต้องกำหนด SSH Key กันนิดหน่อย ซึ่งจะกล่าวในภายหลัง เพิ่มเติม ในกรณีต้องการเปิด Port เพิ่มที่ไม่ใช่ HTTP/HTTPS ให้คลิกที่ Menu > Network Services > Firewall Rules แล้วกำหนดค่าตามต้องการ โดยการ Create Firewall Rule หวังว่าจะเป็นประโยชน์ครับ

Read More »

Ambari #08 ปรับแต่ง pyspark ให้สามารถใช้งาน spark.ml ได้ ด้วย conda package management

เราสามารถใช้งาน Spark ในด้าน Machine Learning ด้วย pyspark แต่ปัญหาอยู่ที่ว่า python ที่ติดตั้งบน Ubuntu 14.04 นั้น ไม่มี package ที่จำเป็นต้องใช้ ได้แก่ numpy, scipy, scikit-learn, matplotlib ซึ่งขั้นตอนการติดตั้ง ก็จะยุ่งยาก เพราะต้อง compile code เองด้วย แต่ปัจจุบัน มีเครื่องมือที่เรียกว่า “conda” ทำหน้าที่ติดตั้ง package ที่ต้องการได้สะดวก ในที่นี้ จะเลือกใช้ python 2.7 และ จะติดตั้งลงไปใน /opt/conda ขั้นตอนการติดตั้ง conda ไปเลือก setup script จาก https://conda.io/miniconda.html ในการนี้ ขอให้ทำในสิทธิ์ของ root sudo su cd Download script wget https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh จากนั้น ใช้คำสั่งต่อไปนี้ เพื่อติดตั้ง conda ลงไปใน /opt/conda และ เลือกใช้ค่า default bash Miniconda2-latest-Linux-x86_64.sh -p /opt/conda -b ติดตั้ง scikit-learn package ซึ่งจะติดตั้ง package อื่นๆที่จำเป็นสำหรับ spark.ml เข้ามาด้วย /opt/conda/bin/conda install scikit-learn -y ทำขั้นตอน 3-6 กับ “ทุกๆ node” ใน Hadoop Cluster ต่อไปตั้งค่า Zeppelin ให้สามารถใช้งาน conda แทน python เดิม เปิด Zeppelin ขึ้นมา คลิก Interpreter > ค้นหา spark แล้วคลิก edit จากนั้น หาเลื่อนหาค่า pyspark.python แล้วแก้ไขเป็น /opt/conda/bin/python แล้วคลิก save จากนั้นก็จะสามารถใช้งาน spark.ml ได้แล้ว

Read More »