مثال على استعلام HBase: أوامر put() و get() و scan()
⚡ ملخص ذكي
تُعد أوامر HBase put و get و scan الأوامر الأساسية لكتابة البيانات وقراءتها، مما يسمح لك بتخزين قيمة خلية حسب الصف والعمود، أو جلب صف واحد، أو استعراض العديد من الصفوف من سطر الأوامر أو Java API.

كتابة البيانات إلى جدول HBase: Shell
تفترض هذه الأمثلة أن HBase هو تم التثبيت والتشغيل، واجهة HBase مفتوحة، و جدول باسم guru99 موجود بالفعل ضمن برامج التعليم والمشاريع الخاصة بعائلات الأعمدة.
يُستخدم الأمر put لتخزين البيانات في جدول.
Syntax: put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>
يُستخدم هذا الأمر للأمور التالية:
- سيتم وضع "قيمة" خلية في جدول أو صف أو عمود محدد أو محدد.
- سيقوم البرنامج، بشكل اختياري، بتنسيق الطابع الزمني.
على سبيل المثال، هنا نقوم بوضع القيم في الجدول "guru99" تحت الصف r1 والعمود c1:
hbase> put 'guru99', 'r1', 'c1', 'value', 10
لقد وضعنا ثلاث قيم، 10 و 15 و 30، في الجدول "guru99"، كما هو موضح في لقطة الشاشة أدناه.
لنفترض أن الجدول "guru99" يحتوي على مرجع جدول، مثل g. يمكنك أيضًا تشغيل الأمر على مرجع الجدول، كما يلي:
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
يظهر الناتج كما هو موضح في لقطة الشاشة أعلاه بعد وضع القيم في "guru99".
قراءة البيانات من جدول HBase: Shell
في هذا القسم، نتحقق مما يلي في قذيفة HBase:
- القيم التي يتم إدخالها في جدول HBase "guru99".
- أسماء الأعمدة التي تحتوي على القيم الموجودة في جدول HBase guru99.
يعرض ناتج المسح أدناه كل قيمة تم إدخالها في "guru99"، بالإضافة إلى أسماء الصفوف والأعمدة الخاصة بها:
من لقطة الشاشة أعلاه، يمكننا استنتاج ما يلي:
- إذا قمنا بتشغيل الأمر "scan" في واجهة HBase، فسيتم عرض القيم المُدخلة في "guru99" على النحو التالي.
- في واجهة HBase، ستعرض القيم التي أدخلها الكود الخاص بنا، مع أسماء الأعمدة والصفوف.
- هنا يمكننا أن نرى أن أسماء الأعمدة المدرجة هي "التعليم" و "المشاريع".
- القيم التي تم إدخالها هي "BigData" و "HBase Tutorials" في الأعمدة المذكورة.
يمكنك أيضًا استخدام أمر get لقراءة البيانات من جدول.
Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}
تتضمن المعلمات الإضافية هنا: نطاق الوقت، والطابع الزمني، والإصدارات، والفلاتر. باستخدام هذا الأمر، يمكنك الحصول على صف أو محتوى خلية موجودة في الجدول. يمكنك إضافة معلمات أخرى، مثل الطابع الزمني، ونطاق الوقت، والإصدارات، والفلاتر، لجلب صف أو محتوى خلية معينة. يلخص الجدول أدناه هذه المعلمات:
| معامل | الهدف |
|---|---|
| النطاق الزمني | يُعيد الخلايا التي يقع طابعها الزمني ضمن وقت بداية ونهاية محددين. |
| الطابع الزمني | يُعيد فقط إصدار الخلية المخزنة في طابع زمني محدد. |
| VERSIONS | يحدد عدد نسخ الخلية التي سيتم إرجاعها (القيمة الافتراضية هي 1). |
| فلتر | يطبق عامل تصفية لتقييد الصفوف أو الأعمدة التي يتم إرجاعها. |
| عمود | يقتصر على نتائج محددة لعائلات الأعمدة أو المؤهلات. |
فيما يلي بعض الأمثلة العملية لأمر get:
hbase> get 'guru99', 'r1', {COLUMN => 'c1'}
بالنسبة للجدول "guru99"، سيتم عرض قيم الصف r1 والعمود c1 باستخدام هذا الأمر، كما هو موضح في لقطة الشاشة أدناه.
hbase> get 'guru99', 'r1'
بالنسبة للجدول "guru99"، سيتم عرض قيم الصف r1 باستخدام هذا الأمر.
hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}
بالنسبة للجدول "guru99"، سيتم عرض قيم الصف r1 في النطاق الزمني من ts1 إلى ts2 باستخدام هذا الأمر.
hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
بالنسبة للجدول "guru99"، سيتم عرض قيم الصف r1 وعائلات الأعمدة c1 و c2 و c3 باستخدام هذا الأمر.
كتابة البيانات إلى جدول HBase: JAVA API
في هذه الخطوة، سنقوم بكتابة البيانات في جدول HBase "guru99".
أولًا، علينا كتابة كود لإدراج واسترجاع القيم من HBase، باستخدام برنامج HBaseLoading.java. لإنشاء وإدراج القيم في جدول على مستوى الأعمدة، اكتب الكود كما هو موضح أدناه.
تُظهر لقطة الشاشة أدناه Java الكود الذي يقوم بإنشاء تكوين HBase وإدخال القيم في "guru99":
من لقطة الشاشة أعلاه:
- عندما نقوم بإنشاء تكوين HBase، فإنه يشير إلى أي تكوينات قمنا بتعيينها في ملفي hbase-site.xml و hbase-default.xml أثناء تثبيت HBase.
- إنشاء جدول "guru99" باستخدام طريقة HTable.
- إضافة الصف الأول إلى الجدول "guru99".
- تحديد اسمي العمودين "التعليم" و"المشاريع" وإدخال القيم في اسمي العمودين في الصف الأول (row1) الخاص بكل منهما. القيم المُدخلة هنا هي: BigData و"HBaseTutorials".
قراءة البيانات من جدول HBase: Java API
أيًا كانت القيم التي وضعناها في جدول HBase في القسم أعلاه، سنقوم هنا بجلب وعرض تلك القيم.
يُظهر ناتج وحدة التحكم أدناه البيانات التي تتم قراءتها من جدول HBase "guru99":
لاسترجاع النتائج المخزنة في "guru99":
- سنقوم هنا بجلب القيم المخزنة في عائلات الأعمدة، أي "التعليم" و "المشاريع".
- باستخدام الأمر "get"، سنقوم بجلب القيم المخزنة في جدول HBase.
- يتم عرض نتائج المسح باستخدام الأمر "scan". ستظهر القيم المخزنة في الصف الأول على وحدة التحكم.
بمجرد كتابة الكود، تقوم بتشغيله Java استمارتنا مثله:
انقر بزر الماوس الأيمن على HBaseLoading.java -> تشغيل كـ -> Java تطبيق.
بعد تشغيل "HBaseLoading.java"، يتم إدخال القيم في "guru99" في كل عمود في HBase، ويمكن للبرنامج نفسه استرداد القيم أيضًا.
ها هو الكود الكامل:
import java.io.IOException; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; public class HBaseLoading { public static void main(String[] args) throws IOException { /* When you create a HBaseConfiguration, it reads in whatever you've set into your hbase-site.xml and in hbase-default.xml, as long as these can be found on the CLASSPATH*/ org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create(); /*This instantiates an HTable object that connects you to the "test" table*/ HTable table = new HTable(config, "guru99"); /* To add to a row, use Put. A Put constructor takes the name of the row you want to insert into as a byte array.*/ Put p = new Put(Bytes.toBytes("row1")); /*To set the value you'd like to update in the row 'row1', specify the column family, column qualifier, and value of the table cell you'd like to update. The column family must already exist in your table schema. The qualifier can be anything.*/ p.add(Bytes.toBytes("education"), Bytes.toBytes("col1"),Bytes.toBytes("BigData")); p.add(Bytes.toBytes("projects"),Bytes.toBytes("col2"),Bytes.toBytes("HBaseTutorials")); // Once you've adorned your Put instance with all the updates you want to make, to commit it do the following table.put(p); // Now, to retrieve the data we just wrote. Get g = new Get(Bytes.toBytes("row1")); Result r = table.get(g); byte [] value = r.getValue(Bytes.toBytes("education"),Bytes.toBytes("col1")); byte [] value1 = r.getValue(Bytes.toBytes("projects"),Bytes.toBytes("col2")); String valueStr = Bytes.toString(value); String valueStr1 = Bytes.toString(value1); System.out.println("GET: " +"education: "+ valueStr+"projects: "+valueStr1); Scan s = new Scan(); s.addColumn(Bytes.toBytes("education"), Bytes.toBytes("col1")); s.addColumn(Bytes.toBytes("projects"), Bytes.toBytes("col2")); ResultScanner scanner = table.getScanner(s); try { for (Result rr = scanner.next(); rr != null; rr = scanner.next()) { System.out.println("Found row : " + rr); } } finally { // Make sure you close your scanners when you are done! scanner.close(); } } }
ملاحظة حول إصدارات واجهة برمجة التطبيقات (API): يستخدم المثال أعلاه فئة HTable ودالة add() الخاصة بها، والتي تعكس واجهة برمجة تطبيقات عميل HBase القديمة. منذ إصدار HBase 1.0، أصبحت HTable مهملة. يحصل الكود الحديث على جدول من خلال ConnectionFactory.createConnection(…).getTable(…) وينشئ عملية Put باستخدام addColumn() بدلاً من add(). يبقى منطق عمليات put وget وscan كما هو.





