Apache Presto - คู่มือฉบับย่อ
การวิเคราะห์ข้อมูลเป็นกระบวนการวิเคราะห์ข้อมูลดิบเพื่อรวบรวมข้อมูลที่เกี่ยวข้องเพื่อการตัดสินใจที่ดีขึ้น ส่วนใหญ่จะใช้ในหลายองค์กรในการตัดสินใจทางธุรกิจ การวิเคราะห์ข้อมูลขนาดใหญ่เกี่ยวข้องกับข้อมูลจำนวนมากและกระบวนการนี้ค่อนข้างซับซ้อนดังนั้น บริษัท ต่างๆจึงใช้กลยุทธ์ที่แตกต่างกัน
ตัวอย่างเช่น Facebook เป็นหนึ่งใน บริษัท คลังข้อมูลชั้นนำที่ขับเคลื่อนด้วยข้อมูลและใหญ่ที่สุดในโลก ข้อมูลคลังสินค้าของ Facebook ถูกเก็บไว้ใน Hadoop สำหรับการคำนวณขนาดใหญ่ ต่อมาเมื่อข้อมูลในคลังสินค้าเพิ่มขึ้นเป็นเพตะไบต์พวกเขาจึงตัดสินใจพัฒนาระบบใหม่ที่มีเวลาแฝงต่ำ ในปี 2012 สมาชิกทีม Facebook ได้ออกแบบ“Presto” สำหรับการวิเคราะห์แบบสอบถามเชิงโต้ตอบที่ทำงานได้อย่างรวดเร็วแม้จะมีข้อมูลเพตะไบต์
Apache Presto คืออะไร?
Apache Presto เป็นเครื่องมือดำเนินการสืบค้นแบบขนานแบบกระจายซึ่งปรับให้เหมาะสมสำหรับเวลาแฝงต่ำและการวิเคราะห์แบบสอบถามเชิงโต้ตอบ Presto เรียกใช้แบบสอบถามได้อย่างง่ายดายและปรับขนาดได้โดยไม่ต้องเสียเวลาจากกิกะไบต์ไปจนถึงเพตะไบต์
แบบสอบถาม Presto เดียวสามารถประมวลผลข้อมูลจากหลายแหล่งเช่น HDFS, MySQL, Cassandra, Hive และแหล่งข้อมูลอื่น ๆ อีกมากมาย Presto สร้างขึ้นใน Java และง่ายต่อการรวมเข้ากับส่วนประกอบโครงสร้างพื้นฐานข้อมูลอื่น ๆ Presto มีประสิทธิภาพและ บริษัท ชั้นนำเช่น Airbnb, DropBox, Groupon, Netflix ก็นำมาใช้
Presto - คุณสมบัติ
Presto มีคุณสมบัติดังต่อไปนี้ -
- สถาปัตยกรรมที่เรียบง่ายและขยายได้
- ตัวเชื่อมต่อแบบเสียบได้ - Presto รองรับตัวเชื่อมต่อแบบเสียบได้เพื่อให้ข้อมูลเมตาและข้อมูลสำหรับการสืบค้น
- การดำเนินการตามท่อ - หลีกเลี่ยงค่าใช้จ่ายในการแฝง I / O ที่ไม่จำเป็น
- ฟังก์ชันที่ผู้ใช้กำหนดเอง - นักวิเคราะห์สามารถสร้างฟังก์ชันที่ผู้ใช้กำหนดเองเพื่อโยกย้ายได้อย่างง่ายดาย
- การประมวลผลคอลัมน์แบบ Vectorized
โอมเพี้ยง - ประโยชน์
นี่คือรายการสิทธิประโยชน์ที่ Apache Presto มอบให้ -
- การดำเนินการ SQL เฉพาะทาง
- ติดตั้งและแก้ไขข้อบกพร่องได้ง่าย
- สิ่งที่เป็นนามธรรมการจัดเก็บที่เรียบง่าย
- ปรับขนาดข้อมูลเพตาไบต์อย่างรวดเร็วด้วยเวลาแฝงต่ำ
Presto - แอปพลิเคชัน
Presto รองรับแอพพลิเคชั่นอุตสาหกรรมที่ดีที่สุดในปัจจุบัน มาดูแอพพลิเคชั่นเด่น ๆ กันดีกว่า
Facebook- Facebook สร้าง Presto สำหรับความต้องการในการวิเคราะห์ข้อมูล Presto ปรับขนาดข้อมูลขนาดใหญ่ได้อย่างง่ายดาย
Teradata- Teradata นำเสนอโซลูชันแบบ end-to-end ในการวิเคราะห์ข้อมูลขนาดใหญ่และคลังข้อมูล การมีส่วนร่วมของ Teradata ต่อ Presto ทำให้ บริษัท ต่างๆสามารถตอบสนองความต้องการด้านการวิเคราะห์ทั้งหมดได้ง่ายขึ้น
Airbnb- Presto เป็นส่วนหนึ่งของโครงสร้างพื้นฐานข้อมูล Airbnb พนักงานหลายร้อยคนกำลังดำเนินการสอบถามเกี่ยวกับเทคโนโลยีในแต่ละวัน
ทำไมต้องโอมเพี้ยง?
Presto รองรับ ANSI SQL มาตรฐานซึ่งทำให้ง่ายมากสำหรับนักวิเคราะห์และพัฒนาข้อมูล แม้ว่าจะสร้างใน Java แต่ก็หลีกเลี่ยงปัญหาทั่วไปของโค้ด Java ที่เกี่ยวข้องกับการจัดสรรหน่วยความจำและการรวบรวมขยะ Presto มีสถาปัตยกรรมตัวเชื่อมต่อที่เป็นมิตรกับ Hadoop ช่วยให้สามารถเสียบระบบไฟล์ได้อย่างง่ายดาย
Presto ทำงานบนการแจกแจง Hadoop หลายแบบ นอกจากนี้ Presto ยังสามารถเข้าถึงจากแพลตฟอร์ม Hadoop เพื่อสอบถาม Cassandra ฐานข้อมูลเชิงสัมพันธ์หรือที่เก็บข้อมูลอื่น ๆ ความสามารถในการวิเคราะห์ข้ามแพลตฟอร์มนี้ช่วยให้ผู้ใช้ Presto สามารถดึงมูลค่าทางธุรกิจสูงสุดจากกิกะไบต์ถึงเพตะไบต์ของข้อมูล
สถาปัตยกรรมของ Presto เกือบจะคล้ายกับสถาปัตยกรรม DBMS แบบคลาสสิก MPP (การประมวลผลแบบขนานจำนวนมาก) แผนภาพต่อไปนี้แสดงให้เห็นถึงสถาปัตยกรรมของ Presto
แผนภาพด้านบนประกอบด้วยส่วนประกอบต่างๆ ตารางต่อไปนี้อธิบายส่วนประกอบแต่ละส่วนโดยละเอียด
ส. เลขที่ | ส่วนประกอบและคำอธิบาย |
---|---|
1. | Client ไคลเอนต์ (Presto CLI) ส่งคำสั่ง SQL ไปยังผู้ประสานงานเพื่อรับผลลัพธ์ |
2. | Coordinator ผู้ประสานงานเป็นภูตต้นแบบ ในขั้นต้นผู้ประสานงานจะแยกวิเคราะห์การสืบค้น SQL จากนั้นวิเคราะห์และวางแผนสำหรับการดำเนินการสืบค้น ตัวกำหนดตารางเวลาดำเนินการไปป์ไลน์มอบหมายงานให้กับโหนดที่ใกล้ที่สุดและติดตามความคืบหน้า |
3. | Connector ปลั๊กอินหน่วยเก็บข้อมูลเรียกว่าเป็นตัวเชื่อมต่อ Hive, HBase, MySQL, Cassandra และอีกมากมายทำหน้าที่เป็นตัวเชื่อมต่อ มิฉะนั้นคุณสามารถใช้แบบกำหนดเองได้ เครื่องมือเชื่อมต่อให้ข้อมูลเมตาและข้อมูลสำหรับการสืบค้น ผู้ประสานงานใช้เครื่องมือเชื่อมต่อเพื่อรับข้อมูลเมตาสำหรับสร้างแผนการสืบค้น |
4. | Worker ผู้ประสานงานมอบหมายงานให้กับโหนดของผู้ปฏิบัติงาน คนงานได้รับข้อมูลจริงจากตัวเชื่อมต่อ สุดท้ายโหนดผู้ปฏิบัติงานจะส่งผลลัพธ์ไปยังไคลเอนต์ |
Presto - เวิร์กโฟลว์
Presto เป็นระบบแบบกระจายที่รันบนคลัสเตอร์ของโหนด เครื่องมือสืบค้นแบบกระจายของ Presto ได้รับการปรับให้เหมาะสมสำหรับการวิเคราะห์เชิงโต้ตอบและรองรับ ANSI SQL มาตรฐานรวมถึงการสืบค้นที่ซับซ้อนการรวมการรวมและฟังก์ชันหน้าต่าง สถาปัตยกรรม Presto นั้นเรียบง่ายและขยายได้ ไคลเอ็นต์ Presto (CLI) ส่งคำสั่ง SQL ไปยังผู้ประสานงานหลัก daemon
ตัวกำหนดตารางเวลาเชื่อมต่อผ่านไปป์ไลน์การดำเนินการ ตัวกำหนดตารางเวลากำหนดงานให้กับโหนดที่ใกล้เคียงที่สุดกับข้อมูลและตรวจสอบความคืบหน้า ผู้ประสานงานมอบหมายงานให้กับโหนดผู้ปฏิบัติงานหลายโหนดและสุดท้ายโหนดผู้ปฏิบัติงานจะส่งผลลัพธ์กลับไปยังไคลเอ็นต์ ไคลเอนต์ดึงข้อมูลจากกระบวนการเอาต์พุต ความสามารถในการขยายคือการออกแบบที่สำคัญ ตัวเชื่อมต่อแบบเสียบได้เช่น Hive, HBase, MySQL เป็นต้นให้ข้อมูลเมตาและข้อมูลสำหรับการสืบค้น Presto ได้รับการออกแบบด้วย "นามธรรมที่เก็บข้อมูลแบบง่าย" ซึ่งทำให้ง่ายต่อการจัดหาความสามารถในการสืบค้น SQL เทียบกับแหล่งข้อมูลประเภทต่างๆ
รูปแบบการดำเนินการ
Presto รองรับคิวรีแบบกำหนดเองและเอ็นจินการดำเนินการกับตัวดำเนินการที่ออกแบบมาเพื่อรองรับความหมายของ SQL นอกเหนือจากการตั้งเวลาที่ดีขึ้นแล้วการประมวลผลทั้งหมดยังอยู่ในหน่วยความจำและวางท่อข้ามเครือข่ายระหว่างขั้นตอนต่างๆ สิ่งนี้จะหลีกเลี่ยงค่าใช้จ่ายในการตอบสนอง I / O ที่ไม่จำเป็น
บทนี้จะอธิบายวิธีการติดตั้ง Presto บนเครื่องของคุณ มาดูข้อกำหนดพื้นฐานของ Presto กัน
- Linux หรือ Mac OS
- Java เวอร์ชัน 8
ตอนนี้ให้ทำตามขั้นตอนต่อไปนี้เพื่อติดตั้ง Presto บนเครื่องของคุณ
ตรวจสอบการติดตั้ง Java
หวังว่าคุณได้ติดตั้ง Java เวอร์ชัน 8 บนเครื่องของคุณแล้วดังนั้นคุณเพียงแค่ยืนยันโดยใช้คำสั่งต่อไปนี้
$ java -version
หากติดตั้ง Java บนเครื่องของคุณสำเร็จคุณจะเห็นเวอร์ชันของ Java ที่ติดตั้ง หากไม่ได้ติดตั้ง Java ให้ทำตามขั้นตอนต่อไปเพื่อติดตั้ง Java 8 บนเครื่องของคุณ
ดาวน์โหลด JDK ดาวน์โหลด JDK เวอร์ชันล่าสุดโดยไปที่ลิงค์ต่อไปนี้
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
เวอร์ชันล่าสุดคือ JDK 8u 92 และไฟล์คือ“ jdk-8u92-linux-x64.tar.gz” โปรดดาวน์โหลดไฟล์บนเครื่องของคุณ
หลังจากนั้นให้แตกไฟล์และย้ายไปยังไดเร็กทอรีเฉพาะ
จากนั้นตั้งค่าทางเลือก Java ในที่สุด Java จะถูกติดตั้งบนเครื่องของคุณ
การติดตั้ง Apache Presto
ดาวน์โหลด Presto เวอร์ชันล่าสุดโดยไปที่ลิงค์ต่อไปนี้
https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.149/
ตอนนี้ "presto-server-0.149.tar.gz" เวอร์ชันล่าสุดจะถูกดาวน์โหลดลงในเครื่องของคุณ
แตกไฟล์ tar
แตกไฟล์ tar ไฟล์โดยใช้คำสั่งต่อไปนี้ -
$ tar -zxf presto-server-0.149.tar.gz
$ cd presto-server-0.149
การตั้งค่าการกำหนดค่า
สร้างไดเร็กทอรี "data"
สร้างไดเร็กทอรีข้อมูลนอกไดเร็กทอรีการติดตั้งซึ่งจะใช้สำหรับการจัดเก็บบันทึกข้อมูลเมตา ฯลฯ เพื่อให้สามารถเก็บรักษาไว้ได้อย่างง่ายดายเมื่ออัปเกรด Presto กำหนดโดยใช้รหัสต่อไปนี้ -
$ cd
$ mkdir data
หากต้องการดูเส้นทางที่อยู่ให้ใช้คำสั่ง“ pwd” ตำแหน่งนี้จะถูกกำหนดในไฟล์ node.properties ถัดไป
สร้างไดเร็กทอรี“ etc”
สร้างไดเร็กทอรี etc ภายในไดเร็กทอรีการติดตั้ง Presto โดยใช้รหัสต่อไปนี้ -
$ cd presto-server-0.149
$ mkdir etc
ไดเร็กทอรีนี้จะเก็บไฟล์คอนฟิกูเรชัน มาสร้างทีละไฟล์
คุณสมบัติโหนด
ไฟล์คุณสมบัติโหนด Presto มีคอนฟิกูเรชันด้านสิ่งแวดล้อมเฉพาะสำหรับแต่ละโหนด มันถูกสร้างขึ้นภายในไดเร็กทอรี etc (etc / node.properties) โดยใช้โค้ดต่อไปนี้ -
$ cd etc
$ vi node.properties
node.environment = production
node.id = ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir = /Users/../workspace/Presto
หลังจากทำการเปลี่ยนแปลงทั้งหมดแล้วให้บันทึกไฟล์และออกจากเทอร์มินัล ที่นี่node.data คือเส้นทางตำแหน่งของไดเร็กทอรีข้อมูลที่สร้างขึ้นด้านบน node.id แสดงถึงตัวระบุเฉพาะสำหรับแต่ละโหนด
การกำหนดค่า JVM
สร้างไฟล์“ jvm.config” ภายในไดเร็กทอรี etc (etc / jvm.config) ไฟล์นี้มีรายการตัวเลือกบรรทัดคำสั่งที่ใช้สำหรับเรียกใช้ Java Virtual Machine
$ cd etc
$ vi jvm.config
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize = 32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError = kill -9 %p
หลังจากทำการเปลี่ยนแปลงทั้งหมดแล้วให้บันทึกไฟล์และออกจากเทอร์มินัล
คุณสมบัติการกำหนดค่า
สร้างไฟล์“ config.properties” ภายในไดเร็กทอรี etc (etc / config.properties) ไฟล์นี้มีการกำหนดค่าของเซิร์ฟเวอร์ Presto หากคุณกำลังตั้งค่าเครื่องเดียวสำหรับการทดสอบเซิร์ฟเวอร์ Presto สามารถทำงานเป็นกระบวนการประสานงานตามที่กำหนดโดยใช้รหัสต่อไปนี้ -
$ cd etc
$ vi config.properties
coordinator = true
node-scheduler.include-coordinator = true
http-server.http.port = 8080
query.max-memory = 5GB
query.max-memory-per-node = 1GB
discovery-server.enabled = true
discovery.uri = http://localhost:8080
ที่นี่
coordinator - โหนดหลัก
node-scheduler.include-coordinator - อนุญาตให้จัดตารางการทำงานกับผู้ประสานงาน
http-server.http.port - ระบุพอร์ตสำหรับเซิร์ฟเวอร์ HTTP
query.max-memory=5GB - จำนวนหน่วยความจำแบบกระจายสูงสุด
query.max-memory-per-node=1GB - จำนวนหน่วยความจำสูงสุดต่อโหนด
discovery-server.enabled - Presto ใช้บริการ Discovery เพื่อค้นหาโหนดทั้งหมดในคลัสเตอร์
discovery.uri - เขา URI ไปยังเซิร์ฟเวอร์ Discovery
หากคุณกำลังตั้งค่าเซิร์ฟเวอร์ Presto หลายเครื่อง Presto จะทำหน้าที่เป็นทั้งกระบวนการประสานงานและกระบวนการของผู้ปฏิบัติงาน ใช้การตั้งค่าการกำหนดค่านี้เพื่อทดสอบเซิร์ฟเวอร์ Presto บนเครื่องหลายเครื่อง
การกำหนดค่าสำหรับผู้ประสานงาน
$ cd etc
$ vi config.properties
coordinator = true
node-scheduler.include-coordinator = false
http-server.http.port = 8080
query.max-memory = 50GB
query.max-memory-per-node = 1GB
discovery-server.enabled = true
discovery.uri = http://localhost:8080
การกำหนดค่าสำหรับคนงาน
$ cd etc
$ vi config.properties
coordinator = false
http-server.http.port = 8080
query.max-memory = 50GB
query.max-memory-per-node = 1GB
discovery.uri = http://localhost:8080
คุณสมบัติบันทึก
สร้างไฟล์“ log.properties” ภายในไดเร็กทอรี etc (etc / log.properties) ไฟล์นี้มีระดับการบันทึกขั้นต่ำสำหรับลำดับชั้นของคนตัดไม้ที่มีชื่อ กำหนดโดยใช้รหัสต่อไปนี้ -
$ cd etc
$ vi log.properties
com.facebook.presto = INFO
บันทึกไฟล์และออกจากเทอร์มินัล ในที่นี้จะใช้ระดับการบันทึกสี่ระดับเช่น DEBUG, INFO, WARN และ ERROR ระดับการบันทึกเริ่มต้นคือ INFO
คุณสมบัติแค็ตตาล็อก
สร้างไดเร็กทอรี "catalogue" ภายในไดเร็กทอรี etc (etc / catalogue) สิ่งนี้จะใช้สำหรับการติดตั้งข้อมูล ตัวอย่างเช่นสร้างetc/catalog/jmx.properties ด้วยเนื้อหาต่อไปนี้เพื่อติดตั้งไฟล์ jmx connector เป็นแคตตาล็อก jmx -
$ cd etc
$ mkdir catalog $ cd catalog
$ vi jmx.properties
connector.name = jmx
เริ่ม Presto
Presto สามารถเริ่มต้นได้โดยใช้คำสั่งต่อไปนี้
$ bin/launcher start
จากนั้นคุณจะเห็นคำตอบที่คล้ายกับสิ่งนี้
Started as 840
เรียกใช้ Presto
ในการเปิดเซิร์ฟเวอร์ Presto ให้ใช้คำสั่งต่อไปนี้ -
$ bin/launcher run
หลังจากเปิดเซิร์ฟเวอร์ Presto สำเร็จแล้วคุณจะพบไฟล์บันทึกในไดเร็กทอรี“ var / log”
launcher.log - บันทึกนี้สร้างโดยตัวเรียกใช้งานและเชื่อมต่อกับสตรีม stdout และ stderr ของเซิร์ฟเวอร์
server.log - นี่คือไฟล์บันทึกหลักที่ Presto ใช้
http-request.log - คำขอ HTTP ที่เซิร์ฟเวอร์ได้รับ
ณ ตอนนี้คุณได้ติดตั้งการตั้งค่า Presto บนเครื่องของคุณเรียบร้อยแล้ว มาทำตามขั้นตอนต่อไปเพื่อติดตั้ง Presto CLI
ติดตั้ง Presto CLI
Presto CLI จัดเตรียมเชลล์แบบโต้ตอบที่ใช้เทอร์มินัลสำหรับการรันคิวรี
ดาวน์โหลด Presto CLI โดยไปที่ลิงค์ต่อไปนี้
https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.149/
ตอนนี้“ presto-cli-0.149-executable.jar” จะถูกติดตั้งบนเครื่องของคุณ
เรียกใช้ CLI
หลังจากดาวน์โหลด presto-cli แล้วให้คัดลอกไปยังตำแหน่งที่คุณต้องการเรียกใช้ ตำแหน่งนี้อาจเป็นโหนดใดก็ได้ที่มีการเข้าถึงเครือข่ายไปยังผู้ประสานงาน ขั้นแรกให้เปลี่ยนชื่อไฟล์ Jar เป็น Presto จากนั้นให้ใช้งานได้ด้วยchmod + x คำสั่งโดยใช้รหัสต่อไปนี้ -
$ mv presto-cli-0.149-executable.jar presto
$ chmod +x presto
ตอนนี้ดำเนินการ CLI โดยใช้คำสั่งต่อไปนี้
./presto --server localhost:8080 --catalog jmx --schema default
Here jmx(Java Management Extension) refers to catalog and default referes to schema.
คุณจะเห็นคำตอบต่อไปนี้
presto:default>
ตอนนี้พิมพ์คำสั่ง“ jps” บนเทอร์มินัลของคุณแล้วคุณจะเห็น daemons ที่กำลังทำงานอยู่
หยุด Presto
หลังจากดำเนินการทั้งหมดแล้วคุณสามารถหยุดเซิร์ฟเวอร์ presto ได้โดยใช้คำสั่งต่อไปนี้ -
$ bin/launcher stop
บทนี้จะกล่าวถึงการตั้งค่าคอนฟิกสำหรับ Presto
Presto Verifier
Presto Verifier สามารถใช้เพื่อทดสอบ Presto กับฐานข้อมูลอื่น (เช่น MySQL) หรือทดสอบสองคลัสเตอร์ Presto ต่อกัน
สร้างฐานข้อมูลใน MySQL
เปิดเซิร์ฟเวอร์ MySQL และสร้างฐานข้อมูลโดยใช้คำสั่งต่อไปนี้
create database test
ตอนนี้คุณได้สร้างฐานข้อมูล“ ทดสอบ” ในเซิร์ฟเวอร์แล้ว สร้างตารางและโหลดด้วยแบบสอบถามต่อไปนี้
CREATE TABLE verifier_queries(
id INT NOT NULL AUTO_INCREMENT,
suite VARCHAR(256) NOT NULL,
name VARCHAR(256),
test_catalog VARCHAR(256) NOT NULL,
test_schema VARCHAR(256) NOT NULL,
test_prequeries TEXT,
test_query TEXT NOT NULL,
test_postqueries TEXT,
test_username VARCHAR(256) NOT NULL default 'verifier-test',
test_password VARCHAR(256),
control_catalog VARCHAR(256) NOT NULL,
control_schema VARCHAR(256) NOT NULL,
control_prequeries TEXT,
control_query TEXT NOT NULL,
control_postqueries TEXT,
control_username VARCHAR(256) NOT NULL default 'verifier-test',
control_password VARCHAR(256),
session_properties_json TEXT,
PRIMARY KEY (id)
);
เพิ่ม Config Settings
สร้างไฟล์คุณสมบัติเพื่อกำหนดค่าตัวตรวจสอบ -
$ vi config.properties
suite = mysuite
query-database = jdbc:mysql://localhost:3306/tutorials?user=root&password=pwd
control.gateway = jdbc:presto://localhost:8080
test.gateway = jdbc:presto://localhost:8080
thread-count = 1
ที่นี่ใน query-database ป้อนรายละเอียดต่อไปนี้ - ชื่อฐานข้อมูล mysql ชื่อผู้ใช้และรหัสผ่าน
ดาวน์โหลดไฟล์ JAR
ดาวน์โหลดไฟล์ jar Presto-verifier โดยไปที่ลิงค์ต่อไปนี้
https://repo1.maven.org/maven2/com/facebook/presto/presto-verifier/0.149/
ตอนนี้รุ่น “presto-verifier-0.149-executable.jar” ถูกดาวน์โหลดบนเครื่องของคุณ
ดำเนินการ JAR
เรียกใช้ไฟล์ JAR โดยใช้คำสั่งต่อไปนี้
$ mv presto-verifier-0.149-executable.jar verifier
$ chmod+x verifier
เรียกใช้ Verifier
เรียกใช้ตัวยืนยันโดยใช้คำสั่งต่อไปนี้
$ ./verifier config.properties
สร้างตาราง
มาสร้างตารางง่ายๆกัน “test” ฐานข้อมูลโดยใช้แบบสอบถามต่อไปนี้
create table product(id int not null, name varchar(50))
แทรกตาราง
หลังจากสร้างตารางแล้วให้แทรกสองระเบียนโดยใช้แบบสอบถามต่อไปนี้
insert into product values(1,’Phone')
insert into product values(2,’Television’)
เรียกใช้ Verifier Query
ดำเนินการค้นหาตัวอย่างต่อไปนี้ในเทอร์มินัลตัวตรวจสอบ (./verifier config.propeties) เพื่อตรวจสอบผลการตรวจสอบ
แบบสอบถามตัวอย่าง
insert into verifier_queries (suite, test_catalog, test_schema, test_query,
control_catalog, control_schema, control_query) values
('mysuite', 'mysql', 'default', 'select * from mysql.test.product',
'mysql', 'default', 'select * from mysql.test.product');
ที่นี่ select * from mysql.test.product แบบสอบถามหมายถึงแคตตาล็อก mysql test คือชื่อฐานข้อมูลและ productคือชื่อตาราง ด้วยวิธีนี้คุณสามารถเข้าถึงตัวเชื่อมต่อ mysql โดยใช้เซิร์ฟเวอร์ Presto
ที่นี่จะมีการทดสอบคำค้นหาแบบเลือกสองรายการที่เหมือนกันเพื่อดูประสิทธิภาพ ในทำนองเดียวกันคุณสามารถเรียกใช้แบบสอบถามอื่น ๆ เพื่อทดสอบผลการทำงานได้ คุณยังสามารถเชื่อมต่อคลัสเตอร์ Presto สองคลัสเตอร์เพื่อตรวจสอบผลการทำงาน
ในบทนี้เราจะพูดถึงเครื่องมือการดูแลระบบที่ใช้ใน Presto เริ่มต้นด้วย Web Interface ของ Presto
เว็บอินเตอร์เฟส
Presto มีเว็บอินเตอร์เฟสสำหรับการตรวจสอบและจัดการการสืบค้น สามารถเข้าถึงได้จากหมายเลขพอร์ตที่ระบุใน Config Properties ผู้ประสานงาน
เริ่มเซิร์ฟเวอร์ Presto และ Presto CLI จากนั้นคุณสามารถเข้าถึงเว็บอินเตอร์เฟสจาก url ต่อไปนี้ -http://localhost:8080/
ผลลัพธ์จะคล้ายกับหน้าจอด้านบน
ที่นี่หน้าหลักจะมีรายการข้อความค้นหาพร้อมด้วยข้อมูลเช่นรหัสข้อความค้นหาที่ไม่ซ้ำกันข้อความค้นหาสถานะการสืบค้นเปอร์เซ็นต์ที่เสร็จสมบูรณ์ชื่อผู้ใช้และแหล่งที่มาของการสืบค้นนี้ ข้อความค้นหาล่าสุดกำลังทำงานก่อนจากนั้นข้อความค้นหาที่เสร็จสมบูรณ์หรือไม่เสร็จสมบูรณ์จะแสดงที่ด้านล่าง
การปรับแต่งประสิทธิภาพของ Presto
หาก Presto คลัสเตอร์กำลังมีปัญหาเกี่ยวกับประสิทธิภาพให้เปลี่ยนการตั้งค่าการกำหนดค่าเริ่มต้นของคุณเป็นการตั้งค่าต่อไปนี้
คุณสมบัติการกำหนดค่า
task. info -refresh-max-wait - ลดภาระงานของผู้ประสานงาน
task.max-worker-threads - แยกกระบวนการและกำหนดให้กับแต่ละโหนดของผู้ปฏิบัติงาน
distributed-joins-enabled - การรวมแบบกระจายตามแฮช
node-scheduler.network-topology - ตั้งค่าโทโพโลยีเครือข่ายเป็นตัวกำหนดตารางเวลา
การตั้งค่า JVM
เปลี่ยนการตั้งค่า JVM เริ่มต้นของคุณเป็นการตั้งค่าต่อไปนี้ ซึ่งจะเป็นประโยชน์ในการวินิจฉัยปัญหาการเก็บขยะ
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCCause
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-XX:+PrintReferenceGC
-XX:+PrintClassHistogramAfterFullGC
-XX:+PrintClassHistogramBeforeFullGC
-XX:PrintFLSStatistics = 2
-XX:+PrintAdaptiveSizePolicy
-XX:+PrintSafepointStatistics
-XX:PrintSafepointStatisticsCount = 1
ในบทนี้เราจะพูดถึงวิธีการสร้างและดำเนินการสืบค้นบน Presto ให้เราผ่านประเภทข้อมูลพื้นฐานที่รองรับ Presto
ประเภทข้อมูลพื้นฐาน
ตารางต่อไปนี้อธิบายประเภทข้อมูลพื้นฐานของ Presto
ส. เลขที่ | ประเภทข้อมูลและคำอธิบาย |
---|---|
1. | VARCHAR ข้อมูลอักขระความยาวตัวแปร |
2. | BIGINT จำนวนเต็ม 64 บิตที่ลงชื่อ |
3. | DOUBLE ค่าความแม่นยำสองเท่าของทศนิยม 64 บิต |
4. | DECIMAL ตัวเลขทศนิยมที่มีความแม่นยำคงที่ ตัวอย่างเช่น DECIMAL (10,3) - 10 คือค่าความเที่ยงเช่นจำนวนหลักทั้งหมดและ 3 คือค่ามาตราส่วนที่แสดงเป็นจุดเศษส่วน มาตราส่วนเป็นทางเลือกและค่าเริ่มต้นคือ 0 |
5. | BOOLEAN ค่าบูลีนเป็นจริงและเท็จ |
6. | VARBINARY ข้อมูลไบนารีความยาวตัวแปร |
7. | JSON ข้อมูล JSON |
8. | DATE ชนิดข้อมูลวันที่แสดงเป็นปี - เดือน - วัน |
9. | TIME, TIMESTAMP, TIMESTAMP with TIME ZONE TIME - เวลาของวัน (ชั่วโมงนาทีวินาที - มิลลิวินาที) TIMESTAMP - วันที่และเวลาของวัน TIMESTAMP with TIME ZONE - วันที่และเวลาของวันพร้อมเขตเวลาจากค่า |
10. | INTERVAL ยืดหรือขยายประเภทข้อมูลวันที่และเวลา |
11. | ARRAY อาร์เรย์ของประเภทส่วนประกอบที่กำหนด ตัวอย่างเช่น ARRAY [5,7] |
12. | MAP แมประหว่างประเภทส่วนประกอบที่กำหนด ตัวอย่างเช่น MAP (ARRAY ['one', 'two'], ARRAY [5,7]) |
13. | ROW โครงสร้างแถวประกอบด้วยเขตข้อมูลที่มีชื่อ |
Presto - ตัวดำเนินการ
ตัวดำเนินการ Presto แสดงอยู่ในตารางต่อไปนี้
ส. เลขที่ | ตัวดำเนินการและคำอธิบาย |
---|---|
1. | ตัวดำเนินการเลขคณิต Presto รองรับตัวดำเนินการเลขคณิตเช่น +, -, *, /,% |
2. | ตัวดำเนินการเชิงสัมพันธ์ <,>, <=,> =, =, <> |
3. | ตัวดำเนินการทางตรรกะ และหรือไม่ |
4. | ตัวดำเนินการช่วง ตัวดำเนินการช่วงใช้เพื่อทดสอบค่าในช่วงเฉพาะ Presto รองรับระหว่างนั้นเป็นโมฆะไม่ใช่โมฆะยิ่งใหญ่ที่สุดและน้อยที่สุด |
5. | ตัวดำเนินการทศนิยม ตัวดำเนินการทศนิยมเลขคณิตไบนารีดำเนินการเลขคณิตไบนารีสำหรับประเภททศนิยมตัวดำเนินการทศนิยม Unary - The - operator ดำเนินการปฏิเสธ |
6. | ตัวดำเนินการสตริง ‘||’ operator ดำเนินการต่อสายอักขระ |
7. | ตัวดำเนินการวันที่และเวลา ดำเนินการบวกและลบเลขคณิตในชนิดข้อมูลวันที่และเวลา |
8. | ตัวดำเนินการอาร์เรย์ Subscript operator [] - เข้าถึงองค์ประกอบของอาร์เรย์ ตัวดำเนินการเชื่อมต่อ || - เชื่อมอาร์เรย์กับอาร์เรย์หรือองค์ประกอบประเภทเดียวกัน |
9. | ตัวดำเนินการแผนที่ Map subscript operator [] - ดึงค่าที่ตรงกับคีย์ที่กำหนดจากแผนที่ |
ณ ตอนนี้เรากำลังพูดถึงการเรียกใช้แบบสอบถามพื้นฐานง่ายๆบน Presto บทนี้จะกล่าวถึงฟังก์ชัน SQL ที่สำคัญ
ฟังก์ชันคณิตศาสตร์
ฟังก์ชันทางคณิตศาสตร์ทำงานกับสูตรทางคณิตศาสตร์ ตารางต่อไปนี้อธิบายรายการฟังก์ชันโดยละเอียด
ส. | ฟังก์ชั่นและคำอธิบาย |
---|---|
1. | เอบีเอส (x) ส่งกลับค่าสัมบูรณ์ของ x |
2. | cbrt (x) ส่งคืนคิวบ์รูทของ x |
3. | เพดาน (x) ส่งกลับไฟล์ x ค่าที่ปัดเศษขึ้นเป็นจำนวนเต็มที่ใกล้เคียงที่สุด |
4. | ceil(x) นามแฝงสำหรับเพดาน (x) |
5. | องศา (x) ส่งกลับค่าองศาสำหรับ x |
6. | e (x) ส่งคืนค่าสองเท่าสำหรับหมายเลขของออยเลอร์ |
7. | exp(x) ส่งคืนค่าเลขชี้กำลังสำหรับหมายเลขของออยเลอร์ |
8. | ชั้น (x) ผลตอบแทน x ปัดลงเป็นจำนวนเต็มที่ใกล้ที่สุด |
9. | from_base(string,radix) ส่งคืนค่าของสตริงที่ตีความเป็นเลขฐาน - รัศมี |
10. | ln(x) ส่งคืนลอการิทึมธรรมชาติของ x |
11. | log2 (x) ส่งคืนลอการิทึมฐาน 2 ของ x |
12. | log10(x) ส่งกลับค่าลอการิทึมฐาน 10 ของ x |
13. | log(x,y) ส่งคืนฐาน y ลอการิทึมของ x |
14. | สมัย (n, m) ส่งคืนโมดูลัส (ส่วนที่เหลือ) ของ n หารด้วย m |
15. | pi() ส่งคืนค่า pi ผลลัพธ์จะถูกส่งกลับเป็นค่าสองเท่า |
16. | กำลัง (x, p) ส่งคืนพลังแห่งคุณค่า ‘p’ ไปที่ x มูลค่า |
17. | pow(x,p) นามแฝงสำหรับอำนาจ (x, p) |
18. | เรเดียน (x) แปลงมุม x เป็นองศาเรเดียน |
19. | rand() นามแฝงสำหรับเรเดียน () |
20. | สุ่ม () ส่งคืนค่าสุ่มหลอก |
21. | rand(n) นามแฝงสำหรับการสุ่ม () |
22. | รอบ (x) ส่งกลับค่าปัดเศษสำหรับ x |
23. | round(x,d) x ค่าที่ปัดเศษสำหรับ ‘d’ ตำแหน่งทศนิยม |
24. | sign(x) ส่งกลับฟังก์ชัน signum ของ x กล่าวคือ 0 ถ้าอาร์กิวเมนต์เป็น 0 1 ถ้าอาร์กิวเมนต์มีค่ามากกว่า 0 -1 ถ้าอาร์กิวเมนต์น้อยกว่า 0 สำหรับอาร์กิวเมนต์คู่ฟังก์ชันจะส่งคืน - NaN ถ้าอาร์กิวเมนต์เป็น NaN 1 ถ้าอาร์กิวเมนต์เป็น + Infinity -1 ถ้าอาร์กิวเมนต์เป็น -Infinity |
25. | sqrt (x) ส่งคืนค่ารากที่สองของ x |
26. | to_base (x, radix) ประเภทผลตอบแทนคือธนู ผลลัพธ์จะถูกส่งกลับเป็นเลขฐานสำหรับx |
27. | ตัดทอน (x) ตัดทอนค่าสำหรับ x |
28. | width_bucket (x, bound1, bound2, n) ส่งคืนหมายเลข bin ของ x ระบุขอบเขต bound1 และ bound2 และ n จำนวนที่เก็บข้อมูล |
29. | width_bucket (x, ถังขยะ) ส่งคืนหมายเลข bin ของ x ตามถังขยะที่ระบุโดยถังขยะอาร์เรย์ |
ฟังก์ชันตรีโกณมิติ
อาร์กิวเมนต์ของฟังก์ชันตรีโกณมิติแสดงเป็นเรเดียน () ตารางต่อไปนี้แสดงรายการฟังก์ชันต่างๆ
ส. เลขที่ | ฟังก์ชั่นและคำอธิบาย |
---|---|
1. | acos (x) ส่งกลับค่าโคไซน์ผกผัน (x) |
2. | asin(x) ส่งกลับค่าไซน์ผกผัน (x) |
3. | atan(x) ส่งกลับค่าแทนเจนต์ผกผัน (x) |
4. | atan2 (y, x) ส่งกลับค่าแทนเจนต์ผกผัน (y / x) |
5. | cos(x) ส่งกลับค่าโคไซน์ (x) |
6. | cosh (x) ส่งกลับค่าไฮเพอร์โบลิกโคไซน์ (x) |
7. | บาป (x) ส่งกลับค่าไซน์ (x) |
8. | tan(x) ส่งกลับค่าแทนเจนต์ (x) |
9. | tanh(x) ส่งกลับค่าไฮเปอร์โบลิกแทนเจนต์ (x) |
ฟังก์ชัน Bitwise
ตารางต่อไปนี้แสดงรายการฟังก์ชัน Bitwise
ส. เลขที่ | ฟังก์ชั่นและคำอธิบาย |
---|---|
1. | bit_count (x, บิต) นับจำนวนบิต |
2. | bitwise_and (x, y) ดำเนินการในระดับบิต AND สำหรับสองบิต x และ y |
3. | bitwise_or (x, y) Bitwise OR ดำเนินการระหว่างสองบิต x, y |
4. | bitwise_not (x) Bitwise ไม่ทำงานสำหรับบิต x |
5. | bitwise_xor (x, y) การดำเนินการ XOR สำหรับบิต x, y |
ฟังก์ชันสตริง
ตารางต่อไปนี้แสดงรายการฟังก์ชัน String
ส. เลขที่ | ฟังก์ชั่นและคำอธิบาย |
---|---|
1. | concat (string1, ... , stringN) เชื่อมต่อสตริงที่กำหนด |
2. | ความยาว (สตริง) ส่งกลับความยาวของสตริงที่กำหนด |
3. | ต่ำกว่า (สตริง) ส่งคืนรูปแบบตัวพิมพ์เล็กสำหรับสตริง |
4. | บน (สตริง) ส่งคืนรูปแบบตัวพิมพ์ใหญ่สำหรับสตริงที่กำหนด |
5. | lpad (สตริงขนาดแพดสตริง) ช่องว่างด้านซ้ายสำหรับสตริงที่กำหนด |
6. | ltrim (สตริง) ลบช่องว่างนำหน้าออกจากสตริง |
7. | แทนที่ (สตริงค้นหาแทนที่) แทนที่ค่าสตริง |
8. | ย้อนกลับ (สตริง) ย้อนกลับการดำเนินการสำหรับสตริง |
9. | rpad (สตริงขนาดแพดสตริง) ช่องว่างด้านขวาสำหรับสตริงที่กำหนด |
10. | rtrim (สตริง) ลบช่องว่างต่อท้ายออกจากสตริง |
11. | แยก (สตริงตัวคั่น) แยกสตริงบนตัวคั่นและส่งคืนอาร์เรย์ขนาดที่ จำกัด มากที่สุด |
12. | Split_part (สตริงตัวคั่นดัชนี) แยกสตริงบนตัวคั่นและส่งกลับดัชนีฟิลด์ |
13. | strpos (สตริงสตริงย่อย) ส่งคืนตำแหน่งเริ่มต้นของสตริงย่อยในสตริง |
14. | substr (สตริงเริ่มต้น) ส่งคืนสตริงย่อยสำหรับสตริงที่กำหนด |
15. | substr (สตริงเริ่มต้นความยาว) ส่งคืนสตริงย่อยสำหรับสตริงที่กำหนดโดยมีความยาวเฉพาะ |
16. | ตัดแต่ง (สตริง) ลบช่องว่างนำหน้าและต่อท้ายออกจากสตริง |
ฟังก์ชันวันที่และเวลา
ตารางต่อไปนี้แสดงฟังก์ชันวันที่และเวลา
ส. เลขที่ | ฟังก์ชั่นและคำอธิบาย |
---|---|
1. | วันที่ปัจจุบัน ส่งคืนวันที่ปัจจุบัน |
2. | current_time ส่งกลับเวลาปัจจุบัน |
3. | current_timestamp ส่งคืนการประทับเวลาปัจจุบัน |
4. | current_timezone () ส่งกลับเขตเวลาปัจจุบัน |
5. | ตอนนี้ () ส่งกลับวันที่ปัจจุบันการประทับเวลาพร้อมเขตเวลา |
6. | เวลาท้องถิ่น ส่งคืนเวลาท้องถิ่น |
7. | localtimestamp ส่งคืนการประทับเวลาท้องถิ่น |
ฟังก์ชันนิพจน์ทั่วไป
ตารางต่อไปนี้แสดงรายการฟังก์ชันนิพจน์ทั่วไป
ส. เลขที่ | ฟังก์ชั่นและคำอธิบาย |
---|---|
1. | regexp_extract_all (สตริงรูปแบบ) ส่งคืนสตริงที่ตรงกับนิพจน์ทั่วไปสำหรับรูปแบบ |
2. | regexp_extract_all (สตริงรูปแบบกลุ่ม) ส่งคืนสตริงที่ตรงกับนิพจน์ทั่วไปสำหรับรูปแบบและกลุ่ม |
3. | regexp_extract (สตริงรูปแบบ) ส่งคืนสตริงย่อยแรกที่ตรงกับนิพจน์ทั่วไปสำหรับรูปแบบ |
4. | regexp_extract (สตริงรูปแบบกลุ่ม) ส่งคืนสตริงย่อยแรกที่ตรงกับนิพจน์ทั่วไปสำหรับรูปแบบและกลุ่ม |
5. | regexp_like (สตริงรูปแบบ) ส่งคืนสตริงที่ตรงกันสำหรับรูปแบบ หากสตริงถูกส่งกลับค่าจะเป็นจริงหรือเท็จ |
6. | regexp_replace (สตริงรูปแบบ) แทนที่อินสแตนซ์ของสตริงที่ตรงกับนิพจน์ด้วยรูปแบบ |
7. | regexp_replace (สตริงรูปแบบการแทนที่) แทนที่อินสแตนซ์ของสตริงที่ตรงกับนิพจน์ด้วยรูปแบบและการแทนที่ |
8. | regexp_split (สตริงรูปแบบ) แยกนิพจน์ทั่วไปสำหรับรูปแบบที่กำหนด |
ฟังก์ชัน JSON
ตารางต่อไปนี้แสดงรายการฟังก์ชัน JSON
ส. เลขที่ | ฟังก์ชั่นและคำอธิบาย |
---|---|
1. | json_array_contains (json, ค่า) ตรวจสอบค่าที่มีอยู่ในอาร์เรย์ json หากค่ามีอยู่จะส่งคืนจริงมิฉะนั้นเป็นเท็จ |
2. | json_array_get (json_array ดัชนี) รับองค์ประกอบสำหรับดัชนีในอาร์เรย์ json |
3. | json_array_length (json) ส่งกลับความยาวในอาร์เรย์ json |
4. | json_format (json) ส่งคืนรูปแบบโครงสร้าง json |
5. | json_parse (สตริง) แยกวิเคราะห์สตริงเป็น json |
6. | json_size (json, json_path) ส่งคืนขนาดของค่า |
ฟังก์ชั่น URL
ตารางต่อไปนี้แสดงรายการฟังก์ชัน URL
ส. เลขที่ | ฟังก์ชั่นและคำอธิบาย |
---|---|
1. | url_extract_host (url) ส่งคืนโฮสต์ของ URL |
2. | url_extract_path (url) ส่งกลับเส้นทางของ URL |
3. | url_extract_port (url) ส่งคืนพอร์ตของ URL |
4. | url_extract_protocol (url) ส่งคืนโปรโตคอลของ URL |
5. | url_extract_query (url) ส่งคืนสตริงการสืบค้นของ URL |
ฟังก์ชันรวม
ตารางต่อไปนี้แสดงรายการฟังก์ชัน Aggregate
ส. เลขที่ | ฟังก์ชั่นและคำอธิบาย |
---|---|
1. | avg(x) ส่งคืนค่าเฉลี่ยสำหรับค่าที่ระบุ |
2. | นาที (x, n) ส่งคืนค่าต่ำสุดจากสองค่า |
3. | สูงสุด (x, n) ส่งคืนค่าสูงสุดจากสองค่า |
4. | ผลรวม (x) ส่งคืนผลรวมของมูลค่า |
5. | นับ(*) ส่งคืนจำนวนแถวอินพุต |
6. | นับ (x) ส่งคืนจำนวนค่าอินพุต |
7. | การตรวจสอบ (x) ส่งคืนการตรวจสอบสำหรับ x |
8. | พล (x) ส่งกลับค่าตามอำเภอใจสำหรับ x |
ฟังก์ชั่นสี
ตารางต่อไปนี้แสดงฟังก์ชันสี
ส. เลขที่ | ฟังก์ชั่นและคำอธิบาย |
---|---|
1. | บาร์ (x, กว้าง) แสดงผลแถบเดียวโดยใช้ rgb low_color และ high_color |
2. | แถบ (x, กว้าง, สีต่ำ, สีสูง) แสดงผลแถบเดียวสำหรับความกว้างที่ระบุ |
3. | สี (สตริง) ส่งคืนค่าสีสำหรับสตริงที่ป้อน |
4. | การแสดงผล (x, สี) แสดงค่า x โดยใช้สีเฉพาะโดยใช้รหัสสี ANSI |
5. | แสดงผล (b) ยอมรับค่าบูลีน b และแสดงผลเป็นสีเขียวจริงหรือเท็จสีแดงโดยใช้รหัสสี ANSI |
6. | rgb(red, green, blue) ส่งคืนค่าสีที่จับค่า RGB ของค่าสีของส่วนประกอบสามค่าที่ให้มาเป็นพารามิเตอร์ int ตั้งแต่ 0 ถึง 255 |
ฟังก์ชันอาร์เรย์
ตารางต่อไปนี้แสดงรายการฟังก์ชัน Array
ส. เลขที่ | ฟังก์ชั่นและคำอธิบาย |
---|---|
1. | array_max (x) ค้นหาองค์ประกอบสูงสุดในอาร์เรย์ |
2. | array_min (x) ค้นหาองค์ประกอบขั้นต่ำในอาร์เรย์ |
3. | array_sort (x) จัดเรียงองค์ประกอบในอาร์เรย์ |
4. | array_remove (x, องค์ประกอบ) ลบองค์ประกอบเฉพาะออกจากอาร์เรย์ |
5. | concat (x, y) เชื่อมสองอาร์เรย์ |
6. | contains(x,element) Finds the given elements in an array. True will be returned if it is present, otherwise false |
7. | array_position(x,element) Find the position of the given element in an array |
8. | array_intersect(x,y) Performs an intersection between two arrays |
9. | element_at(array,index) Returns the array element position |
10. | slice(x,start,length) Slices the array elements with the specific length |
Teradata Functions
The following table lists out Teradata functions.
S.No | Functions & Description |
---|---|
1. | index(string,substring) Returns the index of the string with the given substring |
2. | substring(string,start) Returns the substring of the given string. You can specify the start index here |
3. | substring(string,start,length) Returns the substring of the given string for the specific start index and length of the string |
The MySQL connector is used to query an external MySQL database.
Prerequisites
MySQL server installation.
Configuration Settings
Hopefully you have installed mysql server on your machine. To enable mysql properties on Presto server, you must create a file “mysql.properties” in “etc/catalog” directory. Issue the following command to create a mysql.properties file.
$ cd etc $ cd catalog
$ vi mysql.properties
connector.name = mysql
connection-url = jdbc:mysql://localhost:3306
connection-user = root
connection-password = pwd
Save the file and quit the terminal. In the above file, you must enter your mysql password in connection-password field.
Create Database in MySQL Server
Open MySQL server and create a database using the following command.
create database tutorials
Now you have created “tutorials” database in the server. To enable database type, use the command “use tutorials” in the query window.
Create Table
Let’s create a simple table on “tutorials” database.
create table author(auth_id int not null, auth_name varchar(50),topic varchar(100))
Insert Table
After creating a table, insert three records using the following query.
insert into author values(1,'Doug Cutting','Hadoop')
insert into author values(2,’James Gosling','java')
insert into author values(3,'Dennis Ritchie’,'C')
Select Records
To retrieve all the records, type the following query.
Query
select * from author
Result
auth_id auth_name topic
1 Doug Cutting Hadoop
2 James Gosling java
3 Dennis Ritchie C
As of now, you have queried data using MySQL server. Let’s connect Mysql storage plugin to Presto server.
Connect Presto CLI
Type the following command to connect MySql plugin on Presto CLI.
./presto --server localhost:8080 --catalog mysql --schema tutorials
You will receive the following response.
presto:tutorials>
Here “tutorials” refers to schema in mysql server.
List Schemas
To list out all the schemas in mysql, type the following query in Presto server.
Query
presto:tutorials> show schemas from mysql;
Result
Schema
--------------------
information_schema
performance_schema
sys
tutorials
From this result, we can conclude the first three schemas as predefined and the last one as created by yourself.
List Tables from Schema
Following query lists out all the tables in tutorials schema.
Query
presto:tutorials> show tables from mysql.tutorials;
Result
Table
--------
author
We have created only one table in this schema. If you have created multiple tables, it will list out all the tables.
Describe Table
To describe the table fields, type the following query.
Query
presto:tutorials> describe mysql.tutorials.author;
Result
Column | Type | Comment
-----------+--------------+---------
auth_id | integer |
auth_name | varchar(50) |
topic | varchar(100) |
Show Columns from Table
Query
presto:tutorials> show columns from mysql.tutorials.author;
Result
Column | Type | Comment
-----------+--------------+---------
auth_id | integer |
auth_name | varchar(50) |
topic | varchar(100) |
Access Table Records
To fetch all the records from mysql table, issue the following query.
Query
presto:tutorials> select * from mysql.tutorials.author;
Result
auth_id | auth_name | topic
---------+----------------+--------
1 | Doug Cutting | Hadoop
2 | James Gosling | java
3 | Dennis Ritchie | C
From this result, you can retrieve mysql server records in Presto.
Create Table Using as Command
Mysql connector doesn’t support create table query but you can create a table using as command.
Query
presto:tutorials> create table mysql.tutorials.sample as
select * from mysql.tutorials.author;
Result
CREATE TABLE: 3 rows
You can’t insert rows directly because this connector has some limitations. It cannot support the following queries −
- create
- insert
- update
- delete
- drop
To view the records in the newly created table, type the following query.
Query
presto:tutorials> select * from mysql.tutorials.sample;
Result
auth_id | auth_name | topic
---------+----------------+--------
1 | Doug Cutting | Hadoop
2 | James Gosling | java
3 | Dennis Ritchie | C
Java Management Extensions (JMX) gives information about the Java Virtual Machine and software running inside JVM. The JMX connector is used to query JMX information in Presto server.
As we have already enabled “jmx.properties” file under “etc/catalog” directory. Now connect Prest CLI to enable JMX plugin.
Presto CLI
Query
$ ./presto --server localhost:8080 --catalog jmx --schema jmx
Result
You will receive the following response.
presto:jmx>
JMX Schema
To list out all the schemas in “jmx”, type the following query.
Query
presto:jmx> show schemas from jmx;
Result
Schema
--------------------
information_schema
current
Show Tables
To view the tables in the “current” schema, use the following command.
Query 1
presto:jmx> show tables from jmx.current;
Result
Table
------------------------------------------------------------------------------
com.facebook.presto.execution.scheduler:name = nodescheduler
com.facebook.presto.execution:name = queryexecution
com.facebook.presto.execution:name = querymanager
com.facebook.presto.execution:name = remotetaskfactory
com.facebook.presto.execution:name = taskexecutor
com.facebook.presto.execution:name = taskmanager
com.facebook.presto.execution:type = queryqueue,name = global,expansion = global
………………
……………….
Query 2
presto:jmx> select * from jmx.current.”java.lang:type = compilation";
Result
node | compilationtimemonitoringsupported | name | objectname | totalcompilationti
--------------------------------------+------------------------------------+--------------------------------+----------------------------+-------------------
ffffffff-ffff-ffff-ffff-ffffffffffff | true | HotSpot 64-Bit Tiered Compilers | java.lang:type=Compilation | 1276
Query 3
presto:jmx> select * from jmx.current."com.facebook.presto.server:name = taskresource";
Result
node | readfromoutputbuffertime.alltime.count
| readfromoutputbuffertime.alltime.max | readfromoutputbuffertime.alltime.maxer
--------------------------------------+---------------------------------------+--------------------------------------+---------------------------------------
ffffffff-ffff-ffff-ffff-ffffffffffff | 92.0 | 1.009106149 |
The Hive connector allows querying data stored in a Hive data warehouse.
Prerequisites
- Hadoop
- Hive
Hopefully you have installed Hadoop and Hive on your machine. Start all the services one by one in the new terminal. Then, start hive metastore using the following command,
hive --service metastore
Presto uses Hive metastore service to get the hive table’s details.
Configuration Settings
Create a file “hive.properties” under “etc/catalog” directory. Use the following command.
$ cd etc $ cd catalog
$ vi hive.properties
connector.name = hive-cdh4
hive.metastore.uri = thrift://localhost:9083
After making all the changes, save the file and quit the terminal.
Create Database
Create a database in Hive using the following query −
Query
hive> CREATE SCHEMA tutorials;
After the database is created, you can verify it using the “show databases” command.
Create Table
Create Table is a statement used to create a table in Hive. For example, use the following query.
hive> create table author(auth_id int, auth_name varchar(50),
topic varchar(100) STORED AS SEQUENCEFILE;
Insert Table
Following query is used to insert records in hive’s table.
hive> insert into table author values (1,’ Doug Cutting’,Hadoop),
(2,’ James Gosling’,java),(3,’ Dennis Ritchie’,C);
Start Presto CLI
You can start Presto CLI to connect Hive storage plugin using the following command.
$ ./presto --server localhost:8080 --catalog hive —schema tutorials;
You will receive the following response.
presto:tutorials >
List Schemas
To list out all the schemas in Hive connector, type the following command.
Query
presto:tutorials > show schemas from hive;
Result
default
tutorials
List Tables
To list out all the tables in “tutorials” schema, use the following query.
Query
presto:tutorials > show tables from hive.tutorials;
Result
author
Fetch Table
Following query is used to fetch all the records from hive’s table.
Query
presto:tutorials > select * from hive.tutorials.author;
Result
auth_id | auth_name | topic
---------+----------------+--------
1 | Doug Cutting | Hadoop
2 | James Gosling | java
3 | Dennis Ritchie | C
The Kafka Connector for Presto allows to access data from Apache Kafka using Presto.
Prerequisites
Download and install the latest version of the following Apache projects.
- Apache ZooKeeper
- Apache Kafka
Start ZooKeeper
Start ZooKeeper server using the following command.
$ bin/zookeeper-server-start.sh config/zookeeper.properties
Now, ZooKeeper starts port on 2181.
Start Kafka
Start Kafka in another terminal using the following command.
$ bin/kafka-server-start.sh config/server.properties
After kafka starts, it uses the port number 9092.
TPCH Data
Download tpch-kafka
$ curl -o kafka-tpch
https://repo1.maven.org/maven2/de/softwareforge/kafka_tpch_0811/1.0/kafka_tpch_
0811-1.0.sh
Now you have downloaded the loader from Maven central using the above command. You will get a similar response as the following.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
5 21.6M 5 1279k 0 0 83898 0 0:04:30 0:00:15 0:04:15 129k
6 21.6M 6 1407k 0 0 86656 0 0:04:21 0:00:16 0:04:05 131k
24 21.6M 24 5439k 0 0 124k 0 0:02:57 0:00:43 0:02:14 175k
24 21.6M 24 5439k 0 0 124k 0 0:02:58 0:00:43 0:02:15 160k
25 21.6M 25 5736k 0 0 128k 0 0:02:52 0:00:44 0:02:08 181k
………………………..
Then, make it executable using the following command,
$ chmod 755 kafka-tpch
Run tpch-kafka
Run the kafka-tpch program to preload a number of topics with tpch data using the following command.
Query
$ ./kafka-tpch load --brokers localhost:9092 --prefix tpch. --tpch-type tiny
ผลลัพธ์
2016-07-13T16:15:52.083+0530 INFO main io.airlift.log.Logging Logging
to stderr
2016-07-13T16:15:52.124+0530 INFO main de.softwareforge.kafka.LoadCommand
Processing tables: [customer, orders, lineitem, part, partsupp, supplier,
nation, region]
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-1
de.softwareforge.kafka.LoadCommand Loading table 'customer' into topic 'tpch.customer'...
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-2
de.softwareforge.kafka.LoadCommand Loading table 'orders' into topic 'tpch.orders'...
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-3
de.softwareforge.kafka.LoadCommand Loading table 'lineitem' into topic 'tpch.lineitem'...
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-4
de.softwareforge.kafka.LoadCommand Loading table 'part' into topic 'tpch.part'...
………………………
……………………….
ตอนนี้ลูกค้าตารางคาฟคาคำสั่งซัพพลายเออร์ ฯลฯ ถูกโหลดโดยใช้ tpch
เพิ่ม Config Settings
เพิ่มการตั้งค่าคอนฟิกคอนฟิกตัวเชื่อมต่อ Kafka ต่อไปนี้บนเซิร์ฟเวอร์ Presto
connector.name = kafka
kafka.nodes = localhost:9092
kafka.table-names = tpch.customer,tpch.orders,tpch.lineitem,tpch.part,tpch.partsupp,
tpch.supplier,tpch.nation,tpch.region
kafka.hide-internal-columns = false
ในการกำหนดค่าข้างต้นตาราง Kafka จะโหลดโดยใช้โปรแกรม Kafka-tpch
เริ่ม Presto CLI
เริ่ม Presto CLI โดยใช้คำสั่งต่อไปนี้
$ ./presto --server localhost:8080 --catalog kafka —schema tpch;
ที่นี่ “tpch" เป็นสคีมาสำหรับตัวเชื่อมต่อ Kafka และคุณจะได้รับคำตอบดังต่อไปนี้
presto:tpch>
รายการตาราง
แบบสอบถามต่อไปนี้แสดงรายการตารางทั้งหมดใน “tpch” สคีมา
แบบสอบถาม
presto:tpch> show tables;
ผลลัพธ์
Table
----------
customer
lineitem
nation
orders
part
partsupp
region
supplier
อธิบายตารางลูกค้า
แบบสอบถามต่อไปนี้อธิบาย “customer” ตาราง.
แบบสอบถาม
presto:tpch> describe customer;
ผลลัพธ์
Column | Type | Comment
-------------------+---------+---------------------------------------------
_partition_id | bigint | Partition Id
_partition_offset | bigint | Offset for the message within the partition
_segment_start | bigint | Segment start offset
_segment_end | bigint | Segment end offset
_segment_count | bigint | Running message count per segment
_key | varchar | Key text
_key_corrupt | boolean | Key data is corrupt
_key_length | bigint | Total number of key bytes
_message | varchar | Message text
_message_corrupt | boolean | Message data is corrupt
_message_length | bigint | Total number of message bytes
อินเตอร์เฟส JDBC ของ Presto ใช้เพื่อเข้าถึงแอปพลิเคชัน Java
ข้อกำหนดเบื้องต้น
ติดตั้ง presto-jdbc-0.150.jar
คุณสามารถดาวน์โหลดไฟล์ JDBC jar ได้โดยไปที่ลิงค์ต่อไปนี้
https://repo1.maven.org/maven2/com/facebook/presto/presto-jdbc/0.150/
หลังจากดาวน์โหลดไฟล์ jar แล้วให้เพิ่มลงในคลาสพา ธ ของแอปพลิเคชัน Java ของคุณ
สร้างแอปพลิเคชันง่ายๆ
มาสร้างแอปพลิเคชัน java อย่างง่ายโดยใช้อินเตอร์เฟส JDBC
การเข้ารหัส - PrestoJdbcSample.java
import java.sql.*;
import com.facebook.presto.jdbc.PrestoDriver;
//import presto jdbc driver packages here.
public class PrestoJdbcSample {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
try {
Class.forName("com.facebook.presto.jdbc.PrestoDriver");
connection = DriverManager.getConnection(
"jdbc:presto://localhost:8080/mysql/tutorials", "tutorials", “");
//connect mysql server tutorials database here
statement = connection.createStatement();
String sql;
sql = "select auth_id, auth_name from mysql.tutorials.author”;
//select mysql table author table two columns
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
int id = resultSet.getInt("auth_id");
String name = resultSet.getString(“auth_name");
System.out.print("ID: " + id + ";\nName: " + name + "\n");
}
resultSet.close();
statement.close();
connection.close();
}catch(SQLException sqlException){
sqlException.printStackTrace();
}catch(Exception exception){
exception.printStackTrace();
}
}
}
บันทึกไฟล์และออกจากแอปพลิเคชัน ตอนนี้เริ่มเซิร์ฟเวอร์ Presto ในเทอร์มินัลเดียวและเปิดเทอร์มินัลใหม่เพื่อรวบรวมและดำเนินการผลลัพธ์ ต่อไปนี้เป็นขั้นตอน -
การรวบรวม
~/Workspace/presto/presto-jdbc $ javac -cp presto-jdbc-0.149.jar PrestoJdbcSample.java
การดำเนินการ
~/Workspace/presto/presto-jdbc $ java -cp .:presto-jdbc-0.149.jar PrestoJdbcSample
เอาต์พุต
INFO: Logging initialized @146ms
ID: 1;
Name: Doug Cutting
ID: 2;
Name: James Gosling
ID: 3;
Name: Dennis Ritchie
สร้างโครงการ Maven เพื่อพัฒนาฟังก์ชันแบบกำหนดเองของ Presto
SimpleFunctionsFactory.java
สร้างคลาส SimpleFunctionsFactory เพื่อใช้อินเทอร์เฟซ FunctionFactory
package com.tutorialspoint.simple.functions;
import com.facebook.presto.metadata.FunctionFactory;
import com.facebook.presto.metadata.FunctionListBuilder;
import com.facebook.presto.metadata.SqlFunction;
import com.facebook.presto.spi.type.TypeManager;
import java.util.List;
public class SimpleFunctionFactory implements FunctionFactory {
private final TypeManager typeManager;
public SimpleFunctionFactory(TypeManager typeManager) {
this.typeManager = typeManager;
}
@Override
public List<SqlFunction> listFunctions() {
return new FunctionListBuilder(typeManager)
.scalar(SimpleFunctions.class)
.getFunctions();
}
}
SimpleFunctionsPlugin.java
สร้างคลาส SimpleFunctionsPlugin เพื่อใช้อินเทอร์เฟซปลั๊กอิน
package com.tutorialspoint.simple.functions;
import com.facebook.presto.metadata.FunctionFactory;
import com.facebook.presto.spi.Plugin;
import com.facebook.presto.spi.type.TypeManager;
import com.google.common.collect.ImmutableList;
import javax.inject.Inject;
import java.util.List;
import static java.util.Objects.requireNonNull;
public class SimpleFunctionsPlugin implements Plugin {
private TypeManager typeManager;
@Inject
public void setTypeManager(TypeManager typeManager) {
this.typeManager = requireNonNull(typeManager, "typeManager is null”);
//Inject TypeManager class here
}
@Override
public <T> List<T> getServices(Class<T> type){
if (type == FunctionFactory.class) {
return ImmutableList.of(type.cast(new SimpleFunctionFactory(typeManager)));
}
return ImmutableList.of();
}
}
เพิ่มไฟล์ทรัพยากร
สร้างไฟล์ทรัพยากรที่ระบุไว้ในแพ็คเกจการใช้งาน
(com.tutorialspoint.simple.functions.SimpleFunctionsPlugin)
ตอนนี้ย้ายไปที่ตำแหน่งไฟล์ทรัพยากร @ / path / to / resource /
จากนั้นเพิ่มการเปลี่ยนแปลง
com.facebook.presto.spi.Plugin
pom.xml
เพิ่มการอ้างอิงต่อไปนี้ในไฟล์ pom.xml
<?xml version = "1.0"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tutorialspoint.simple.functions</groupId>
<artifactId>presto-simple-functions</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>presto-simple-functions</name>
<description>Simple test functions for Presto</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-spi</artifactId>
<version>0.149</version>
</dependency>
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-main</artifactId>
<version>0.149</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
</dependencies>
<build>
<finalName>presto-simple-functions</finalName>
<plugins>
<!-- Make this jar executable -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
</build>
</project>
SimpleFunctions.java
สร้างคลาส SimpleFunctions โดยใช้แอตทริบิวต์ Presto
package com.tutorialspoint.simple.functions;
import com.facebook.presto.operator.Description;
import com.facebook.presto.operator.scalar.ScalarFunction;
import com.facebook.presto.operator.scalar.StringFunctions;
import com.facebook.presto.spi.type.StandardTypes;
import com.facebook.presto.type.LiteralParameters;
import com.facebook.presto.type.SqlType;
public final class SimpleFunctions {
private SimpleFunctions() {
}
@Description("Returns summation of two numbers")
@ScalarFunction(“mysum")
//function name
@SqlType(StandardTypes.BIGINT)
public static long sum(@SqlType(StandardTypes.BIGINT) long num1,
@SqlType(StandardTypes.BIGINT) long num2) {
return num1 + num2;
}
}
หลังจากสร้างแอปพลิเคชันแล้วให้คอมไพล์และรันแอปพลิเคชัน มันจะสร้างไฟล์ JAR คัดลอกไฟล์และย้ายไฟล์ JAR ไปยังไดเร็กทอรีปลั๊กอินเซิร์ฟเวอร์ Presto เป้าหมาย
การรวบรวม
mvn compile
การดำเนินการ
mvn package
ตอนนี้รีสตาร์ทเซิร์ฟเวอร์ Presto และเชื่อมต่อไคลเอนต์ Presto จากนั้นเรียกใช้แอปพลิเคชันฟังก์ชันที่กำหนดเองตามที่อธิบายด้านล่าง
$ ./presto --catalog mysql --schema default
แบบสอบถาม
presto:default> select mysum(10,10);
ผลลัพธ์
_col0
-------
20