HBase สร้างตารางด้วย Java ตัวอย่าง API และเชลล์

⚡ สรุปอย่างชาญฉลาด

HBase จัดเก็บข้อมูลในตาราง และคุณสามารถสร้างและจัดการตารางเหล่านั้นได้สองวิธี: ผ่านทาง Java API ที่ใช้ HTableDescriptหรือ HBaseAdmin หรือโดยตรงใน HBase shell โดยใช้คำสั่ง create

  • Java ไฟ: สร้างตารางด้วยโค้ดโดยใช้ HTableDescriptหรือ คอลัมน์ HDescriptหรือ และ HBaseAdmin
  • 🐚 เชลล์จะสร้าง: คำสั่ง create จะสร้างตารางจากชื่อและกลุ่มคอลัมน์อย่างน้อยหนึ่งกลุ่ม
  • 🧬 กลุ่มคอลัมน์: ทุกตารางจำเป็นต้องมีอย่างน้อยหนึ่งกลุ่มคอลัมน์ ซึ่งกำหนดไว้เมื่อสร้างตาราง
  • 🔧 แก้ไขตาราง: คำสั่ง alter ใช้สำหรับเพิ่มกลุ่มคอลัมน์ ตั้งค่าเวอร์ชัน หรือเปลี่ยนแปลงคุณลักษณะระดับตาราง
  • 🗑️ วงจรชีวิตของตาราง: ปิดใช้งานตารางก่อนที่จะแก้ไขหรือลบตาราง จากนั้นเปิดใช้งานอีกครั้งเพื่อดำเนินการเขียนข้อมูลต่อ
  • 🤖 ระบบ AI ช่วย: ผู้ช่วย AI จะร่างคำสั่งสร้าง แก้ไข และลบ รวมถึงตรวจสอบการออกแบบกลุ่มคอลัมน์

สร้างตาราง HBase ด้วย Java ตัวอย่าง API และคำสั่งเชลล์

วิธีสร้างตารางใน HBase ด้วย Java API

ใน HBase สามารถสร้างตารางได้สองวิธี: ผ่านทาง Java API และผ่านทาง HBase shell ส่วนนี้จะกล่าวถึง... Java API ซึ่งช่วยให้แอปพลิเคชันสามารถสร้างตารางและโหลดข้อมูลโดยใช้โปรแกรมเป็นส่วนหนึ่งของงานขนาดใหญ่ได้

ตลอด Java API เราสามารถสร้างตารางใน HBase และยังโหลดข้อมูลลงในตารางโดยใช้ Java การเขียนโค้ด สิ่งที่เราตั้งค่าไว้ที่นี่คือ:

  • การสร้างการเชื่อมต่อกับ HBase ผ่าน Java API
  • การใช้ Eclipse สำหรับ Java การเขียนโค้ด การแก้ไขข้อผิดพลาด และการทดสอบ

ต่อไปนี้เป็นขั้นตอนในการสร้างตารางใน HBase Java API

ขั้นตอนที่ 1) สร้าง Java โครงการใน Eclipse

ในขั้นตอนนี้ เราจะมาสร้าง Java โครงการใน Eclipse สำหรับการเชื่อมต่อ HBase ที่ชื่อว่า “HbaseConnection”

ใหม่ Java หน้าต่างการตั้งค่าโปรเจ็กต์ด้านล่างแสดงขั้นตอนการตั้งค่าโปรเจ็กต์ “HbaseConnection”:

Eclipse ใหม่ Java หน้าต่างโต้ตอบโปรเจ็กต์เพื่อสร้างโปรเจ็กต์ HbaseConnection พร้อมกับ Javaสภาพแวดล้อม SE-1.7

หากเราพิจารณาภาพหน้าจอข้างต้น:

  • ระบุชื่อโปรเจ็กต์ในช่องนี้ ในกรณีของเรา ชื่อโปรเจ็กต์คือ “HbaseConnection”
  • ทำเครื่องหมายในช่องนี้เพื่อกำหนดตำแหน่งเริ่มต้นในการบันทึก ในที่นี้คือ /home/hduser/work/HbaseConnection
  • ทำเครื่องหมายในช่องสำหรับ Java สภาพแวดล้อมที่นี่ ในกรณีนี้ JavaSE-1.7 คือ Java รุ่นที่
  • เลือกตัวเลือกสำหรับตำแหน่งที่คุณต้องการบันทึกไฟล์ ในกรณีของเรา เราเลือกตัวเลือกที่สอง “สร้างโฟลเดอร์แยกต่างหากสำหรับไฟล์ต้นฉบับและไฟล์คลาส”
  • คลิกปุ่ม "เสร็จสิ้น" ซึ่งจะสร้างโปรเจ็กต์ "HbaseConnection" ขึ้นมา Eclipse และเปิดออก Eclipse หน้าแรก

ขั้นตอนที่ 2) กำหนดค่า Build Path ใน Eclipse

เกี่ยวกับ Eclipse หน้าแรก ให้ทำตามขั้นตอนเหล่านี้เพื่อเปิดการกำหนดค่าเส้นทางการสร้าง:

Right click on project -> Select Build Path -> Configure build path

ภาพหน้าจอด้านล่างแสดงเมนูคลิกขวาที่ใช้ในการเปิดการกำหนดค่าเส้นทางการสร้าง:

Eclipse คลิกขวาที่เมนูของโปรเจ็กต์ เลือก Build Path จากนั้นเลือก Configure Build Path

จากภาพหน้าจอข้างต้น:

  • คลิกขวาที่โปรเจ็กต์
  • เลือก Build Path
  • เลือก กำหนดค่าเส้นทางการสร้าง (Configure Build Path)

หลังจากคลิก Configure Build Path แล้ว จะเปิดหน้าต่างอีกหน้าต่างหนึ่งขึ้นมา ดังแสดงในภาพหน้าจอด้านล่าง แท็บ Libraries คือที่ที่ไฟล์ JAR ของ HBase และ Hadoop จะถูกเพิ่มเข้าไปในโปรเจ็กต์:

Eclipse Java แท็บ Build Path Libraries เพิ่มไฟล์ JAR ภายนอกของ HBase และ Hadoop

ในขั้นตอนนี้ เราจะเพิ่มไฟล์ JAR ของ HBase ที่เกี่ยวข้องเข้าไป Java โปรเจ็กต์ตามที่แสดงในภาพหน้าจอ

  • ไฟล์ JAR สำคัญที่ต้องเพิ่ม: hbase-0.94.8.jar และ hadoop-core-1.1.2.jar
  • เข้ามาที่แท็บ "ห้องสมุด"
  • กดตัวเลือก "เพิ่มไฟล์ JAR ภายนอก"
  • เลือกไฟล์ JAR ที่สำคัญตามต้องการ
  • กดปุ่มเสร็จสิ้นเพื่อเพิ่มไฟล์เหล่านี้ลงในโฟลเดอร์ “src” ของ Java โครงการภายใต้การดูแลของห้องสมุด

หลังจากเพิ่มไฟล์ JAR แล้ว ไฟล์เหล่านั้นจะปรากฏอยู่ในตำแหน่ง "src" ของโปรเจ็กต์ ดังแสดงในภาพด้านล่าง:

Eclipse โปรแกรมสำรวจโครงการแสดงไฟล์ JAR ของ HBase และ Hadoop ที่เพิ่มเข้ามาภายใต้ซอร์สโค้ดของโครงการ

ไฟล์ JAR ทั้งหมดที่เกี่ยวข้องกับโครงการนี้พร้อมใช้งานกับระบบนิเวศของ Hadoop แล้ว

ขั้นตอนที่ 3) สร้างการเชื่อมต่อ HBase

ในขั้นตอนนี้ เราจะสร้างการเชื่อมต่อกับ HBase โดยใช้ไฟล์ HBaseConnection.java Java การเข้ารหัส

เกี่ยวกับ Eclipse เมนูหลัก เรียกใช้งาน Java โปรแกรมมีขั้นตอนดังนี้: เรียกใช้ -> เรียกใช้ในฐานะ -> Java แอปพลิเคชัน เมนูข้างล่างแสดงโปรแกรมที่กำลังเปิดใช้งาน:

Eclipse เรียกใช้เป็น Java เมนูแอปพลิเคชันสำหรับเรียกใช้โปรแกรม HBaseConnection

  • เลือก Run
  • เลือก "เรียกใช้เป็น" Java ใบสมัคร
  • โค้ดนี้สร้างการเชื่อมต่อกับ HBase ผ่านทาง Java API
  • หลังจากรันโค้ดนี้แล้ว ตาราง “guru99” จะถูกสร้างขึ้นใน HBase โดยมีสองคอลัมน์แฟมิลีชื่อ “education” และ “projects” ในขณะนี้ มีการสร้างเพียงสคีมาว่างเปล่าใน HBase เท่านั้น

โค้ดตัวอย่างด้านล่างนี้แสดงให้เห็นถึงการใช้งาน HTableDescriptหรือเรียกใช้ addFamily เพื่อสร้างโครงสร้างตาราง:

Java โค้ดที่ใช้ HTableDescriptหรือใช้ addFamily เพื่อกำหนดตาราง guru99 ด้วยคอลัมน์กลุ่มการศึกษาและโครงการ

จากภาพหน้าจอข้างต้น เรากำลังดำเนินการฟังก์ชันต่อไปนี้:

  • การใช้ HTableDescriptหรือเราสามารถสร้างตาราง “guru99” ใน HBase ได้
  • โดยใช้เมธอด addFamily เราจะเพิ่ม "education" และ "projects" เป็นคอลัมน์แฟมิลีให้กับตาราง "guru99"

โค้ดด้านล่างนี้จะสร้างการเชื่อมต่อกับ HBase และสร้างตาราง “guru99” โดยมีสองคอลัมน์แฟมิลี โปรดวางโค้ดนี้ไว้ใต้เอกสาร HBaseConnection.java:

// Place this code inside Hbase connection
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
Import org.apache.hadoop.hbase.client.HBaseAdmin;

public class HBaseConnection
{
    public static void main(String[] args) throws IOException
    {
	HBaseConfigurationhc = new HBaseConfiguration(new Configuration());
	HTableDescriptorht = new HTableDescriptor("guru99");

	ht.addFamily( new HColumnDescriptor("education"));
	ht.addFamily( new HColumnDescriptor("projects"));
	System.out.println( "connecting" );
	HBaseAdminhba = new HBaseAdmin( hc );

	System.out.println( "Creating Table" );
	hba.createTable( ht );
	System.out.println("Done......");
    }
}

นี่คือโค้ดที่จำเป็นที่คุณต้องใส่ไว้ในไฟล์ HBaseConnection.java ก่อนที่จะรันโปรแกรม Java โครงการ

หลังจากรันโปรแกรมนี้แล้ว โปรแกรมจะสร้างการเชื่อมต่อกับ HBase และสร้างตารางที่มีชื่อคอลัมน์ขึ้นมา

  • ชื่อตารางคือ “guru99”
  • กลุ่มคอลัมน์ประกอบด้วย “การศึกษา” และ “โครงการ”

ขั้นตอนที่ 4) ตรวจสอบตารางที่สร้างใน HBase

เราสามารถตรวจสอบได้ว่าตาราง “guru99” ถูกสร้างขึ้นด้วยสองคอลัมน์แฟมิลีใน HBase หรือไม่ โดยใช้โหมดเชลล์ของ HBase ด้วยคำสั่ง “list” คำสั่ง “list” จะให้ข้อมูลเกี่ยวกับตารางทั้งหมดที่สร้างขึ้นใน HBase

การเรียกใช้คำสั่ง list ใน HBase shell จะยืนยันตารางใหม่ ดังแสดงด้านล่าง:

ผลลัพธ์จากคำสั่ง `hBase shell list` แสดงให้เห็นว่าตาราง `guru99` ถูกสร้างขึ้นแล้ว

  • Code ตรวจสอบใน HBase shell โดยการเรียกใช้คำสั่ง “list”
  • ถ้าเรารันคำสั่ง “list” มันจะแสดงตารางที่สร้างขึ้นใน HBase ในกรณีของเรา เราจะเห็นว่าตาราง “guru99” ถูกสร้างขึ้นแล้ว

HBase สร้างตารางด้วยเชลล์

นอกจากนี้ Java ด้วย API คุณสามารถสร้างตารางได้โดยตรงจาก HBase shell ซึ่งเป็นวิธีที่เร็วที่สุดในการตั้งค่าตารางสำหรับการทดสอบอย่างรวดเร็ว ไวยากรณ์ในการสร้างตารางใน HBase โดยใช้ shell มีดังนี้:

Syntax: create <tablename>, <columnfamilyname>

ตัวอย่าง:-

hbase(main):001:0> create 'education' ,'guru99'
0 rows(s) in 0.312 seconds
=>Hbase::Table – education

ตัวอย่างข้างต้นอธิบายวิธีการสร้างตารางใน HBase โดยใช้ชื่อที่ระบุตามข้อกำหนดสำหรับแต่ละตระกูลคอลัมน์ นอกจากนี้ เรายังสามารถส่งแอตทริบิวต์ระดับตารางบางอย่างเข้าไปได้อีกด้วย

create 'guru99', {NAME=>'Edu', VERSIONS=>213423443}

ในที่นี้ บล็อก {NAME=>'Edu', VERSIONS=>…} กำหนดกลุ่มคอลัมน์ชื่อ “Edu” และจำนวนเวอร์ชันของเซลล์ที่จะเก็บไว้ ตัวเลขจำนวนมากที่แสดงเป็นเพียงตัวอย่าง ในทางปฏิบัติ VERSIONS จะมีค่าเล็กน้อย เช่น 3 หรือ 5

แสดงรายการ อธิบาย และตรวจสอบตาราง HBase

การสร้างตารางเป็นเพียงส่วนแรกของการจัดการตารางใน HBase เท่านั้น เมื่อตาราง “guru99” มีอยู่แล้ว คำสั่งทั่วไปบางคำสั่งจะช่วยให้คุณตรวจสอบและยืนยันสถานะของตารางก่อนที่จะอ่าน เขียน หรือแก้ไขข้อมูล คุณสามารถเรียกใช้คำสั่งทั้งหมดได้จาก... เปลือก HBase.

คำสั่ง list จะแสดงรายการตารางผู้ใช้ทั้งหมดใน HBase:

hbase> list

คำสั่ง describe จะแสดงโครงสร้างของตาราง รวมถึงตระกูลคอลัมน์ และสถานะการเปิดใช้งานในปัจจุบัน:

hbase> describe 'guru99'

คำสั่ง exists ตรวจสอบว่ามีตารางอยู่หรือไม่ และคำสั่ง is_enabled รายงานว่าตารางนั้นสามารถรับการเขียนได้หรือไม่:

hbase> exists 'guru99'
hbase> is_enabled 'guru99'

การตรวจสอบแบบอ่านอย่างเดียวเหล่านี้ปลอดภัยที่จะเรียกใช้ได้ทุกเมื่อ เป็นวิธีที่รวดเร็วที่สุดในการยืนยันว่ามีการสร้างตารางอย่างถูกต้อง และตรวจสอบกลุ่มคอลัมน์ก่อนที่จะโหลดข้อมูล

แก้ไขตาราง HBase

โครงสร้างตารางใน HBase จะไม่คงที่หลังจากสร้างเสร็จแล้ว คำสั่ง alter จะเปลี่ยนตระกูลคอลัมน์และแอตทริบิวต์ขอบเขตตารางโดยไม่ต้องสร้างตารางใหม่ ทั้งนี้ขึ้นอยู่กับเวอร์ชัน HBase ของคุณ คุณอาจต้องปิดใช้งานตารางก่อน จากนั้นจึงเรียกใช้คำสั่ง alter และเปิดใช้งานอีกครั้ง

วิธีการเพิ่มกลุ่มคอลัมน์ใหม่ลงในตาราง “guru99”:

hbase> alter 'guru99', {NAME => 'contact'}

วิธีตั้งค่าจำนวนเวอร์ชันที่ชุดคอลัมน์จะเก็บไว้:

hbase> alter 'guru99', NAME => 'education', VERSIONS => 5

วิธีการลบกลุ่มคอลัมน์ออกจากตาราง:

hbase> alter 'guru99', {NAME => 'contact', METHOD => 'delete'}

นอกจากนี้ คุณยังสามารถเปลี่ยนแปลงคุณสมบัติขอบเขตของตารางได้ ตัวอย่างเช่น กำหนดให้ตารางเป็นแบบอ่านอย่างเดียว หรือตั้งค่าขนาดไฟล์สูงสุดของภูมิภาคเป็น 128 MB:

hbase> alter 'guru99', READONLY
hbase> alter 'guru99', MAX_FILESIZE => '134217728'

เนื่องจากคำสั่ง alter จะเขียนทับโครงสร้างข้อมูล ดังนั้นควรวางแผนการเปลี่ยนแปลงอย่างระมัดระวังบนตารางที่ใช้งานจริง และยืนยันผลลัพธ์อีกครั้งด้วยคำสั่ง describe

ปิดใช้งาน เปิดใช้งาน และลบตาราง HBase

ในการลบตารางหรือทำการเปลี่ยนแปลงบางอย่าง HBase จำเป็นต้องปิดใช้งานตารางนั้นก่อน การปิดใช้งานจะทำให้ตารางนั้นออฟไลน์ ทำให้ไม่มีไคลเอนต์ใดสามารถอ่านหรือเขียนข้อมูลลงไปได้ ซึ่งทำให้การเปลี่ยนแปลงโครงสร้างมีความปลอดภัย

ปิดใช้งานตาราง และตรวจสอบสถานะด้วย is_disabled:

hbase> disable 'guru99'
hbase> is_disabled 'guru99'

เปิดใช้งานตารางอีกครั้งเพื่อดำเนินการอ่านและเขียนข้อมูลต่อ:

hbase> enable 'guru99'

ต้องปิดใช้งานตารางก่อนจึงจะสามารถลบได้ ลบping คำสั่งนี้จะลบตารางและข้อมูลทั้งหมดในตารางอย่างถาวร ดังนั้นโปรดใช้ด้วยความระมัดระวัง:

hbase> disable 'guru99'
hbase> drop 'guru99'

หากต้องการลบหลายตารางพร้อมกัน คำสั่ง drop_all จะลบทุกตารางที่มีชื่อตรงกับนิพจน์ปกติ คำสั่ง create, alter, disable, enable และ drop ครอบคลุมวงจรชีวิตทั้งหมดของตาราง การจัดการข้อมูล ในตาราง HBase

คำถามที่พบบ่อย

แนวทางปฏิบัติที่ดีที่สุดคือการรักษากลุ่มคอลัมน์ให้มีจำนวนน้อย โดยควรมีเพียงหนึ่งถึงสามกลุ่มเท่านั้น HBase จะทำการฟลัชและบีบอัดกลุ่มคอลัมน์ทั้งหมดในพื้นที่เดียวกัน ดังนั้นกลุ่มคอลัมน์ที่มากเกินไปจะกระจายข้อมูลไปยังไฟล์หลายไฟล์ ทำให้การอ่านและการเขียนช้าลง ควรจัดกลุ่มคอลัมน์ที่เกี่ยวข้องกันไว้ในกลุ่มเดียวกันเมื่อเป็นไปได้

ไม่ครับ ในขั้นตอนการสร้างตาราง คุณเพียงแค่กำหนดกลุ่มคอลัมน์เท่านั้น ตัวกำหนดคุณสมบัติของคอลัมน์นั้นเป็นแบบไดนามิก และสามารถเพิ่มลงในแถวใดก็ได้เมื่อคุณเขียนข้อมูล การออกแบบที่ยืดหยุ่นต่อโครงสร้างตารางนี้ช่วยให้แต่ละแถวมีคอลัมน์ที่แตกต่างกันได้โดยไม่ต้องแก้ไขตารางก่อน

ใช้คำสั่ง `truncate 'guru99'` ซึ่งจะปิดใช้งานตาราง ลบตาราง และสร้างตารางใหม่โดยใช้ตระกูลคอลัมน์เดิม โครงสร้างตารางจะยังคงอยู่เหมือนเดิมในขณะที่ลบทุกแถว วิธีนี้เร็วกว่าและสะอาดกว่าการลบแถวทีละแถว

ตัวอย่างนี้ใช้ HBaseAdmin และ HTableDescriptหรือทั้งสองอย่างถูกยกเลิกการใช้งานตั้งแต่ HBase 1.0 แล้ว โค้ดสมัยใหม่จะดึงอ็อบเจ็กต์ Admin จาก Connection ผ่าน ConnectionFactory และสร้างสคีมาด้วย TableDescriptหรือผู้สร้างและตระกูลคอลัมน์Descriptหรือ Builder. ตรรกะการสร้างตารางยังคงเหมือนเดิม

VERSIONS กำหนดจำนวนเวอร์ชันที่มีการประทับเวลาของแต่ละเซลล์ที่กลุ่มคอลัมน์เก็บไว้ ค่าเริ่มต้นคือ 1 การขอเวอร์ชันเก่ากว่าด้วยคำสั่ง get หรือ scan จะส่งคืนเวอร์ชันเหล่านั้นจนกว่าจำนวนที่เก็บไว้จะเกินจำนวนที่กำหนด หลังจากนั้นการบีบอัดจะลบเซลล์ที่เก่าที่สุดออก

HBase เหมาะสำหรับชุดข้อมูลขนาดใหญ่และกระจัดกระจายที่ต้องการการอ่านและเขียนแบบสุ่มที่รวดเร็วบน Hadoop และ HDFS การใช้งานทั่วไป ได้แก่ ข้อมูลอนุกรมเวลา การส่งข้อความ และการวิเคราะห์แบบเรียลไทม์ ซึ่งตารางอาจมีจำนวนแถวหลายพันล้านแถวกระจายอยู่บนโหนดจำนวนมาก

ผู้ช่วยเขียนโค้ด AI และโมเดลภาษาขนาดใหญ่สามารถร่างคำสั่งสร้าง แก้ไข และลบจากข้อความแจ้งที่เป็นภาษาธรรมดา อธิบายการออกแบบโครงสร้างคอลัมน์ และแจ้งเตือนการดำเนินการที่มีความเสี่ยง เช่น การลบping ตารางดังกล่าว การเรียนรู้ของเครื่องยังสามารถวิเคราะห์รูปแบบการเข้าถึงเพื่อแนะนำโครงสร้างคีย์แถวและโครงสร้างข้อมูลที่ดีขึ้นได้ แม้ว่าวิศวกรควรตรวจสอบข้อเสนอแนะแต่ละข้ออีกครั้งก็ตาม

ใช่. นักบิน GitHub สามารถสร้างคำสั่งเชลล์ HBase ได้ และ Java โค้ดไคลเอ็นต์สำหรับการสร้าง แก้ไข และลบping ตารางจากความคิดเห็นสั้นๆ Revตรวจสอบผลลัพธ์เพื่อให้แน่ใจว่าชื่อตารางถูกต้อง กลุ่มคอลัมน์ และ Admin API ปัจจุบัน ก่อนที่จะเรียกใช้งาน

สรุปโพสต์นี้ด้วย: