เมื่อเราต้องการใช้ SQL บน Big Data Platform ตอนที่ 2

Softnix
Softnix
Published in
4 min readDec 11, 2017
ภาพจากเว็บไซต์ https://www.dwh4u.com/2017/01/21/hadoop-sql-engines/

เพื่อให้เห็น 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 %p
vi 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 ขึ้นมาดูครับ

http://192.168.30.196:8090

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 ด้วยครับ

--

--