เมื่อเราต้องการใช้ SQL บน Big Data Platform ตอนที่ 2
เพื่อให้เห็น Concept การทำงาน เขาว่ากันว่า การอ่านจะทำให้รู้ แต่การลงมือทำจะทำให้เข้าใจ ดังนั้นเราต้องลงมือติดตั้ง
ติดตั้ง Presto
ในที่นี้ผมทดสอบติดตั้งบน Cloudera Manager เลยนะครับ เพราะต้องการจะเชื่อมต่อกับ Hadoop โดยเฉพาะ
ดาวน์โหลด Presto
จากเว็บไซต์ www.prestodb.io ไปที่เมนู DOCS
ไปที่เมนู Installation และก็ Deploying Presto
ทำการ copy URL download Presto ดังภาพด้านล่าง
บน Command Shell เครื่อง Cloudera Manager ทำการดาวน์โหลดด้วยคำสั่ง wget ดังนี้
wget https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.190/presto-server-0.190.tar.gz
ทำการขยายไฟล์ออกมาด้วยคำสั่ง
tar xvfz presto-server-0.190.tar.gz
cd presto-server-0.190
สร้าง Folder etc ขึ้นเองแบบ Manual ดังนี้
mkdir etc
cd etc
สร้างไฟล์ดังนี้
vi config.propertiescoordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8090
query.max-memory=5GB
query.max-memory-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://192.168.30.196:8090
หมายเหตุ
เครื่อง Cloudera Manager ผม IP 192.168.30.196 แก้ตรงนี้ตามของตนเองนะครับ การ config ในไฟล์ config.properties มีคำแนะนำเพิ่มเติม ดูได้ในนี้นะครับ https://prestodb.io/docs/current/installation/deployment.html
vi jvm.config-server
-Xmx8G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %pvi log.propertiescom.facebook.presto=INFOvi node.propertiesnode.environment=development
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/home/cloudera/presto/data
หมายเหตุ
node.environment คือชื่อ Cluster ครับ เช่น Production แต่ในที่นี้ ผมระบุเป็น Development ส่วน node.id คือชื่อ node ต้องไม่ซ้ำกัน ผมทดลองเครื่องเดียวก็ระบุมั่วๆไปก่อนครับ แต่ทำจริงมีหลายเครื่องก็ระบุให้ต่างกันนะครับ
mkdir catalogcd catalogvi jmx.propertiesconnector.name=jmx
สร้างไฟล์ Connector เชื่อม Data Source ที่ต้องการ ในที่นี้ผมจะทดลองเชื่อมกับ Hive รายละเอียด Connector ต่างๆสามารถเข้าไปดูได้ที่
ใน folder catalog สร้างไฟล์ ชื่อ hive.properties ดังนี้
vi hive.propertiesconnector.name=hive-hadoop2
hive.metastore.uri=thrift://127.0.0.1:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml
ดูภาพ screenshot ผมอีกที ประมาณนี้นะครับ
สรุป ใน folder catalog จะมี 2 ไฟล์ ดังนี้ ถ้าเราจะทำ connector อะไรเชื่อม data source อะไร ก็ทำเพิ่มในนี้ครับ
ติดตั้ง Presto CLI
Presto CLI เป็น Client ของ Presto ที่ใช้สำหรับ Remote เข้าไปใน Presto Server เพื่อใช้ Command Line ในการจัดการ เราติดตั้งได้ง่ายๆ ดังนี้
ไปที่เมนู Command Line Interface ดังรูป
Copy link download ดังภาพ
บน folder ติดตั้ง จะมี folder ย่อยชื่อ bin ให้ cd เข้าไปใน folder bin แล้วรันคำสั่ง Download Presto CLI ดังนี้
cd binwget https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.190/presto-cli-0.190-executable.jarmv presto-cli-0.190-executable.jar prestochmod +x presto
การ Start Presto
Presto รองรับ Java version 8 เท่านั้นนะครับ ในกรณีผม ผมติดตั้ง Presto บนเครื่องเดียวกับ Cloudera Manager ซึ่งก็มี Java ติดตั้งอยู่แล้ว และผมไม่แน่ใจว่าหากอับเดท Java เป็น version 8 จะส่งผลยังไงกับ Cloudera หรือไม่ ดังนั้นจึงไม่เสี่ยง จึงหาทางระบุ Java Path เฉพาะ Presto เท่านั้น
ติดตั้ง Java v8
เข้าไปที่เว็บไซต์ http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
ดาวน์โหลด jdk8 ในที่นี้ผมดาวน์โหลด jdk-8u151-linux-x64.tar.gz
นำมาไว้ที่ Folder เดียวกับ Presto ทำการแตกไฟล์ ด้วยคำสั่ง
tar xvfz jdk-8u151-linux-x64.tar.gz
ทำแค่นี้ครับ ตอนรัน Presto ค่อยระบุ Path มาอีกครั้ง ในกรณีของผม ผมวางไว้ที่
/home/cloudera/installer/presto-server-0.190/jdk1.8.0_151
ทำการ Start Presto ด้วยคำสั่ง
PATH=/home/cloudera/installer/presto-server-0.190/jdk1.8.0_151/bin:$PATH ./bin/launcher start
ดู screenshot ของผมอีกทีครับ จะประมาณนี้
ถ้าไม่มีปัญหาอะไร ลองเรียก Cluster Overview ของ Presto ขึ้นมาดูครับ
ใช้ Presto CLI เชื่อมเข้าไปใช้งานดูครับ ดังนี้
PATH=/home/cloudera/installer/presto-server-0.190/jdk1.8.0_151/bin:$PATH ./presto — server localhost:8090 — catalog hive
ดู Screenshot ผมอีกทีครับ
จากคำสั่ง อธิบายได้คือ เชื่อม server localhost:8090 และ catalog ชื่อ hive ที่สร้าง connector ไว้ใน folder catalog นั้นเอง
ลองโชว์ tables ใน Hive จาก Schema default ด้วยคำสั่ง
show tables from default;
จากภาพผมมี table ชื่อ names และ names_text ที่ผมสร้างไว้ใน Hive เพื่อทดสอบกับ Presto
ทดสอบ Query ข้อมูล
ลองเล่น SQL Command ต่างๆดู เพื่อทดสอบดูว่าใช้งานเหมือน SQL ปกติได้หรือไม่
Distinct ก็ได้ คล้าย SQL ปกติ
ทดสอบ INSERT
ใน Cluster Overview จะบอกประวัติการ Query ของเราครับ ประมาณนี้
ดู Performance ได้ละเอียดดีครับ
Live Plan ในแต่ละ stage
ดู Data Pipeline ใน Stage
Presto UDF
เรื่องนี้ฟังมาจาก Startup หลายนึงระดับโลกพูดให้ฟังจากที่ไปสัมนามา ก็ยังไม่เคียร์เท่าไหร่ แต่พอมาติดตั้งและทดสอบดู ใช่จริงด้วย ตัว CLI Client ของ Presto สามารถเชื่อมกับ Presto Server ได้เลยโดยไม่ต้องมีการกำหนดสิทธิ์ใดๆ ดังนั้น ถ้าใครนำไปติดตั้งบน Production ต้องระวังด้วยนะครับ แนวทางง่ายๆคือกำหนดให้รัน Port Presto เฉพาะ localhost (กำหนดได้ที่ไฟล์ config.properties ) แต่อีกทาง มีคนพัฒนา UDF เพิ่มเข้ามาให้ครับ คือ https://github.com/qubole/presto-udfs ทำให้ Presto สามารถ Authen ได้กับ OAuth จึงไปใช้ user อยู่บน Google account ได้ครับ
สรุป
Presto ติดตั้งไม่ยากครับ ใช้ง่าย คล้ายๆ SQL ปกติ รองรับการทำ Data Pipeline และหากเราติดตั้งในแบบ Cluster คือติดหลายๆเครื่อง กำหนดชื่อ node.environment ตรงกัน มันจะ discovery หากันครับ เวลารันทำงานก็จะ Query Distribution ได้เลย คราวหน้าไว้จะลอง Connect กับ Data source ชนิดอื่นดูครับ ที่ใช้งานหลักๆ เช่น MongoDB , Cassandra เป็นต้น
ก่อนจบ หากผมเขียนผิดตรงไหนหรือลองทำตามผมแล้วติด inbox มาสอบถามได้ที่ facebook inbox นะครับที่เพจ www.facebook.com/softnixtech ฝาก Link ฝาก Share ด้วยครับ