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 »

ELK #6 วิธีการติดตั้ง ELK และ Geoserver แบบ Docker ให้ทำงานร่วมกัน

จาก ELK #5 การประยุกต์ใช้ ELK ในงานด้าน GIS และ การสร้าง Web Map Service (WMS) บน Geoserver ก็จะเห็นถึงการนำไปใช้เบื้องต้น >> ขอบคุณ คุณนพัส กังวานตระกูล สถานวิจัยสารสนเทศภูมิศาสตร์ทรัพยากรธรรมชาติและสิ่งแวดล้อม ศูนย์ภูมิภาคเทคโนโลยีอวกาศและภูมิสารสนเทศ (ภาคใต้) สำหรับความรู้มากมายครับ <<   ต่อไปนี้ จะเป็นขั้นตอนการติดตั้ง ELK และ Geoserver แบบ Docker โดยผมได้สร้าง Github Repository เอาไว้ ซึ่งได้แก้ไขให้ระบบสามารถเก็บข้อมูลไว้ภายนอก Prerequisite ถ้าเป็น Windows ก็ต้องติดตั้ง Docker Toolbox หรือ Docker for Windows ให้เรียบร้อย ถ้าเป็น Linux ก็ติดตั้ง docker-ce ให้เรียบร้อย (เรียนรู้เกี่ยวกับ Docker ได้จาก ติดตั้ง docker 17.06.0 CE บน Ubuntu) ขั้นตอนการติดตั้ง สร้าง Folder ชื่อ Docker เอาไว้ในเครื่อง เช่นใน Documents หรือ จะเป็น D:\ หรืออะไรก็แล้วแต่ เปิด Terminal หรือ Docker Quickstart Terminal จากนั้นให้ cd เข้าไปมา Folder “Docker” ที่สร้างไว้ ดึง ELK ลงมา ด้วยคำสั่ง git clone https://github.com/deviantony/docker-elk.git ดึง Geoserver ลงมา ด้วยคำสั่ง (อันนี้ผมทำต่อยอดเค้าอีกทีหนึ่ง ต้นฉบับคือ https://hub.docker.com/r/fiware/gisdataprovider/) git clone https://github.com/nagarindkx/geoserver.git เนื่องจาก ไม่อยากจะไปแก้ไข Git ของต้นฉบับ เราจึงต้องปรับแต่งนิดหน่อยเอง ให้แก้ไขไฟล์ docker-elk/docker-compose.yml โดยจะเพิ่ม Volume  “data” เพื่อไป mount ส่วนของ data directory ของ Elasticsearch ออกมาจาก Containerแก้ไขจาก elasticsearch: build: elasticsearch/ volumes: – ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml เป็น elasticsearch: build: elasticsearch/ volumes: – ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml – ./elasticsearch/data:/usr/share/elasticsearch/data สร้าง docker-elk/elasticsearch/data mkdir docker-elk/elasticsearch/data แก้ไขไฟล์ docker-elk/logstash/pipeline/logstash.conf ตามต้องการ เช่น ใส่ filter filter { csv { separator => “,” columns => [ “cid”,”name”,”lname”,”pid”,”house”,”road”,”diagcode”,”latitude”,”longitude”,”village”,”tambon”,”ampur”,”changwat” ] } if [cid] == “CID” { drop { } } else { # continue processing data mutate { remove_field => [ “message” ] } mutate { convert => { “longitude” => “float” } convert => { “latitude” => “float” } } mutate { rename =>

Read More »

ELK #5 การประยุกต์ใช้ ELK ในงานด้าน GIS

คราวนี้ มาดูการประยุกต์ใช้ ELK ในงานด้าน GIS ต่อจาก ELK #01 > ELK #02 > ELK #03 > ELK #04 ซึ่งเป็นการติดตั้งทั้งหมด คราวนี้มาดูการประยุกต์ใช้งานกันบ้าง โจทย์มีอยู่ว่า มีการไปเก็บข้อมูลในภาคสนาม แล้วมีการบันทึก พิกัดด้วย GPS เป็น Latitude กับ Longitude พร้อมกับค่าบางอย่าง ทั้งหมดถูกเก็บไว้ในฐานข้อมูล MySQL การนำข้อมูลเข้า ELK ก็เลย Export ข้อมูลจาก MySQL มาเป็น CSV File ประกอบด้วย id,LATITUDE,LONGITUDE,something ตัวอย่างข้อมูล มีดังนี้ id,LATITUDE,LONGITUDE,something 1,6.97585,100.448963,100 2,6.975627,100.450841,19 3,6.973472,100.449196,65 4,6.973468,100.449104,53 5,6.973455,100.449135,33 6,6.973252,100.44888,13 7,6.985862,100.45292,85 8,6.993386,100.416214,90 9,7.005465,100.447984,1 นำข้อมูลเข้า ELK ผ่านทาง Logstash ใน  ELK #2 ได้อธิบายขั้นตอนการติดตั้ง Logstash ไว้แล้วนั้น ต่อไปเป็นการนำข้อมูลชนิด CSV เข้าไปใส่ใน Elasticsearch Logstash จะอ่าน “กระบวนการทำงาน” หรือเรียกว่า Pipeline จากไฟล์ Configuration ซึ่งประกอบด้วย 3 ส่วนหลักๆ คือ Input, Filter และ Output input {    stdin { } } ในส่วน input นี้ จะเป็นการอ่าน STDIN หรือ ทาง Terminal filter { csv { separator => “,” columns => [ “id”,”latitude”,”longitude”,”something” ] } if [id] == “id” { drop { } } else { # continue processing data mutate { remove_field => [ “message” ] } mutate { convert => { “something” => “integer” } convert => { “longitude” => “float” } convert => { “latitude” => “float” } } mutate { rename => { “longitude” => “[geoip][location][lon]” “latitude” => “[geoip][location][lat]” } } } } ในส่วนของ filter นี้ เริ่มจาก เลือกใช้ Filter Plugin ชื่อ “csv” เพื่อจัดการไฟล์ CSV โดยกำหนด “separator” เป็น “,” แล้วกำหนดว่ามีชื่อ Column เป็น “id”,”latitude”,”longitude”,”something” จากนั้น ก็ตรวจสอบว่า ถ้าข้อมูลที่อ่านเข้ามา ใน Column “id” มีค่าเป็น “id” (ซึ่งก็คือบรรทัดหัวตารางของไฟล์ csv นั่นเอง) ก้ให้ “drop” ไป แต่หากไม่ใช่ ก็ให้ทำดังนี้ (mutate คือการแก้ไข)

Read More »

Ambari #02 ติดตั้ง Ambari Agent

ต่อจาก Ambari #01: ติดตั้ง Ambari Server ในบทความนี้ จะขอนำเสนอการติดตั้ง Ambari version 2.5.1 จาก HortonWorks ซึ่งจะทำงานกับ Hortonworks Data Platform (HDP)  2.6 โดยติดตั้งบน Ubuntu 16.04 ในส่วนของ “Ambari Agent” [2] ติดตั้ง Ubuntu 16.04 Server 64bit สิ่งที่สำคัญมากคือ FQDN หรือการอ้างชื่อเต็มของ host ดังนั้น ในไฟล์ /etc/hosts บรรทัดแรกต้องเป็น Fully Qualified Domain Name เช่น (ห้ามเป็น localhost เด็ดขาด) และถ้าจะให้ดี ควรมี DNS Record บน Name Server ด้วย 127.0.0.1   ambari02.example.com ambari02 192.168.1.122   ambari02.example.com ambari02 ต้องทดสอบใช้คำสั่ง hostname -f แล้วได้ชื่อ FQDN ถึงจะใช้งานได้ ตั้งค่า Ambari Public Repository sudo su wget -O /etc/apt/sources.list.d/ambari.list http://public-repo-1.hortonworks.com/ambari/ubuntu16/2.x/updates/2.5.1.0/ambari.list apt-key adv –recv-keys –keyserver keyserver.ubuntu.com B9733A7A07513CAD apt-get update -y sudo dpkg –configure -a echo never > /sys/kernel/mm/transparent_hugepage/enabled apt-cache showpkg ambari-server ติดตั้ง Ambari Agent apt-get install -y ambari-agent แก้ไขไฟล์ /etc/ambari-agent/conf/ambari-agent.ini ให้ระบบ hostname ไปยัง ambari server ในที่นี้คือ ambari01.example.com hostname=ambari01.example.com … run_as_user=ambari เนื่องจากเป็นการติดตั้งแบบ non-root จึงต้องทำการแก้ไข visudo ด้วย โดยเพิ่มบรรทัดต่อไปนี้เข้าไป # Ambari Customizable Users ambari ALL=(ALL) NOPASSWD:SETENV: /bin/su hdfs *,/bin/su ambari-qa *,/bin/su ranger *,/bin/su zookeeper *,/bin/su knox *,/bin/su falcon *,/bin/su ams *, /bin/su flume *,/bin/su hbase *,/bin/su spark *,/bin/su accumulo *,/bin/su hive *,/bin/su hcat *,/bin/su kafka *,/bin/su mapred *,/bin/su oozie *,/bin/su sqoop *,/bin/su storm *,/bin/su tez *,/bin/su atlas *,/bin/su yarn *,/bin/su kms *,/bin/su activity_analyzer *,/bin/su livy *,/bin/su zeppelin *,/bin/su infra-solr *,/bin/su logsearch * Start Ambari Agent ambari-agent start

Read More »

Ambari #01: ติดตั้ง Ambari Server

Apache Ambari เป็นเครื่องมือที่ทำให้การจัดการ Hadoop ง่ายขึ้น [1] แต่การติดตั้ง Apache Ambari เองนั้น (จาก Apache Project) ก็มีความยุ่งยากเล็กน้อย เพราะต้อง Build Source เอง จึงมีบริษัท HortonWorks เค้าไปทำตัว Binary มาให้ download และติดตั้งได้ง่ายกว่า Ambari ประกอบด้วย Ambari Server และ Ambari Agent ซึ่ง Server จะเป็นตัวสั่งการให้ติดตั้ง Hadoop Component ต่างๆลงไปบน Agent ในบทความนี้ จะขอนำเสนอการติดตั้ง Ambari version 2.5.1 จาก HortonWorks ซึ่งจะทำงานกับ Hortonworks Data Platform (HDP)  2.6 โดยติดตั้งบน Ubuntu 16.04 ในส่วนของ “Ambari Server” [2] ติดตั้ง Ubuntu 16.04 Server 64bit สิ่งที่สำคัญมากคือ FQDN หรือการอ้างชื่อเต็มของ host ดังนั้น ในไฟล์ /etc/hosts บรรทัดแรกต้องเป็น Fully Qualified Domain Name เช่น (ห้ามเป็น localhost เด็ดขาด) และถ้าจะให้ดี ควรมี DNS Record บน Name Server ด้วย 192.168.1.121   ambari01.example.com ambari01 ต้องทดสอบใช้คำสั่ง hostname -f แล้วได้ชื่อ FQDN ถึงจะใช้งานได้ UPDATE: ในการระบบทดสอบ ซึ่งประกอบด้วยเครื่องไม่เกิน 5 เครื่อง อาจจะใช้ /etc/hosts บันทึก IP Address และ FQDN ของทุกเครื่องใน Cluster และต้องสร้าง /etc/hosts ให้เหมือนกันทุกเครื่องด้วยเช่นกัน แต่หากต้องทำระบบขนาดใหญ่ แนะนำให้ใช้ DNS ซึ่งต้องทำ Reverse DNS ด้วย กล่าวคือ ต้อง nslookup 192.168.1.2 แล้วกลับมาเป็น ambari01.example.com ได้ แต่หากไม่สามารถจัดการ DNS หลักขององค์กรได้ ก็พอจะใช้งาน dnsmasq ช่วยได้ โดยวิธีการติดตั้งและใช้งานมีดังนี้ apt install dnsmasq แก้ไขไฟล์ /etc/dnsmasq.conf เพิ่มบรรทัดต่อไปนี้ interface=eth0 address=/ambari01.example.com/192.168.1.121 ptr-record=121.1.168.192.in-addr.arpa,ambari01.example.com address=/ambari02.example.com/192.168.1.122 ptr-record=122.1.168.192.in-addr.arpa,ambari02.example.com …. address=/ambari99.example.com/192.168.1.219 ptr-record=219.1.168.192.in-addr.arpa,ambari99.example.com จากนั้น ให้แก้ไขไฟล์ /etc/network/interfaces ของทุกเครื่อง ให้ชี้มาที่ IP ของ Ambari Server ในที่นี้คือ 192.168.1.121 ก็จะใช้งานได้อย่างราบรื่น ตั้งค่า Ambari Public Repository sudo su wget -O /etc/apt/sources.list.d/ambari.list http://public-repo-1.hortonworks.com/ambari/ubuntu16/2.x/updates/2.5.1.0/ambari.list apt-key adv –recv-keys –keyserver keyserver.ubuntu.com B9733A7A07513CAD apt-get update -y sudo dpkg –configure -a echo never > /sys/kernel/mm/transparent_hugepage/enabled apt install -y ntp apt-cache showpkg ambari-server ติดตั้ง Ambari Server apt-get install

Read More »