DBInputFormat להעברת נתונים ממסד SQL למסד נתונים NoSQL



מטרת הבלוג היא ללמוד כיצד להעביר נתונים ממאגרי SQL ל- HDFS, כיצד להעביר נתונים ממאגרי SQL למסדי נתונים NoSQL.

בבלוג זה נחקור את היכולות והאפשרויות של אחד המרכיבים החשובים ביותר בטכנולוגיית Hadoop כלומר MapReduce.

כיום חברות מאמצות את מסגרת Hadoop כבחירה הראשונה שלהן לאחסון נתונים בגלל יכולותיה לטפל בנתונים גדולים ביעילות. אך אנו יודעים גם שהנתונים הם רב תכליתיים וקיימים במבנים ופורמטים שונים. כדי לשלוט במגוון עצום כזה של נתונים ובפורמטים השונים שלהם צריך להיות מנגנון שיאפשר לכל הזנים ובכל זאת לייצר תוצאה יעילה ועקבית.





הרכיב החזק ביותר במסגרת Hadoop הוא MapReduce אשר יכול לספק את השליטה על הנתונים ומבנהם טוב יותר מעמיתיהם האחרים. למרות שזה דורש תקורה של עקומת הלמידה ומורכבות התכנות, אם אתה יכול להתמודד עם המורכבויות האלה אתה בוודאי יכול לטפל בכל סוג של נתונים באמצעות Hadoop.

מסגרת MapReduce מחלקת את כל משימות העיבוד שלה לשני שלבים: Map ו- Reduce.



הכנת הנתונים הגולמיים שלך לשלבים אלה מחייבת הבנה של כמה כיתות וממשקים בסיסיים. מעמד העל לעיבוד מחדש זה הוא פורמט הכנסה.

ה פורמט הכנסה class הוא אחד ממחלקות הליבה ב- API של Hadoop MapReduce. כיתה זו אחראית להגדרת שני דברים עיקריים:

  • פיצולי נתונים
  • קורא שיאים

פיצול נתונים הוא מושג בסיסי במסגרת Hadoop MapReduce המגדיר הן את גודל משימות המפה הבודדות והן את שרת הביצוע הפוטנציאלי שלה. ה הקלטת קורא אחראי על קריאת רשומות בפועל מקובץ הקלט והגשתם (כצמדי מפתח / ערך) לממפה.



מספר המפות נקבע על סמך מספר הפיצולים. תפקידו של InputFormat ליצור את הפיצולים. לרוב גודל הפיצול שווה ערך לגודל הבלוק אך לא תמיד ייווצרו פיצולים על בסיס גודל הבלוק HDFS. זה תלוי לחלוטין כיצד נעקלה שיטת getSplits () של InputFormat שלך.

יש הבדל מהותי בין פיצול MR ובלוק HDFS. בלוק הוא נתח פיזי של נתונים ואילו פיצול הוא רק נתח הגיוני אשר ממפה קורא. פיצול אינו מכיל את נתוני הקלט, אלא פשוט מכיל הפניה או כתובת של הנתונים. לפיצול יש בעצם שני דברים: אורך בתים וקבוצת מיקומי אחסון, שהם רק מחרוזות.

כדי להבין זאת טוב יותר, ניקח דוגמה אחת: עיבוד נתונים המאוחסנים ב- MySQL באמצעות MR. מאחר ואין מושג של בלוקים במקרה זה, התיאוריה: 'פיצולים נוצרים תמיד על בסיס גוש HDFS',נכשל. אפשרות אחת היא ליצור פיצולים על בסיס טווחי שורות בטבלת MySQL שלך (וזה מה ש- DBInputFormat עושה, פורמט קלט לקריאת נתונים ממאגרי מידע יחסיים). ייתכן שיש לנו מספר k של פיצולים המורכב מ- n שורות.

רק עבור InputFormats המבוסס על FileInputFormat (InputFormat לטיפול בנתונים המאוחסנים בקבצים) נוצרים הפיצולים על בסיס הגודל הכולל, בתים, של קבצי הקלט. עם זאת, גודל הקובץ של קובץ הקלט מטופל כגבול עליון לפיצולי קלט. אם יש לך קובץ קטן מגודל החסימה של HDFS, תקבל מיפוי אחד בלבד עבור אותו קובץ. אם אתה רוצה להתנהג אחרת, תוכל להשתמש במפה.מינ.ספליט.גודל. אבל זה שוב תלוי אך ורק ב- getSplits () של InputFormat שלך.

יש לנו כל כך הרבה פורמטים של קלט קיימים זמינים תחת החבילה org.apache.hadoop.mapreduce.lib.input.

CombineFileInputFormat.html

CombineFileRecordReader.html

CombineFileRecordReaderWrapper.html

CombineFileSplit.html

CombineSequenceFileInputFormat.html

CombineTextInputFormat.html

FileInputFormat.html

FileInputFormatCounter.html

FileSplit.html

FixedLengthInputFormat.html

InvalidInputException.html

KeyValueLineRecordReader.html

KeyValueTextInputFormat.html

MultipleInputs.html

NLineInputFormat.html

SequenceFileAsBinaryInputFormat.html

php להפוך מחרוזת למערך

SequenceFileAsTextInputFormat.html

SequenceFileAsTextRecordReader.html

SequenceFileInputFilter.html

SequenceFileInputFormat.html

SequenceFileRecordReader.html

TextInputFormat.html

ברירת המחדל היא TextInputFormat.

באופן דומה, יש לנו כל כך הרבה פורמטי פלט שקוראים את הנתונים ממפחית ומאחסנים אותם ב- HDFS:

FileOutputCommitter.html

FileOutputFormat.html

FileOutputFormatCounter.html

FilterOutputFormat.html

LazyOutputFormat.html

MapFileOutputFormat.html

MultipleOutputs.html

NullOutputFormat.html

PartialFileOutputCommitter.html

PartialOutputCommitter.html

SequenceFileAsBinaryOutputFormat.html

SequenceFileOutputFormat.html

TextOutputFormat.html

ברירת המחדל היא TextOutputFormat.

כשסיימת לקרוא את הבלוג הזה היית לומד:

  • כיצד לכתוב תוכנית להפחתת מפה
  • אודות סוגים שונים של InputFormats הזמינים ב- Mapreduce
  • מה הצורך של InputFormats
  • כיצד לכתוב InputFormats מותאמים אישית
  • כיצד להעביר נתונים ממאגרי SQL ל- HDFS
  • כיצד להעביר נתונים ממסדי נתונים של SQL (כאן MySQL) למסדי נתונים של NoSQL (כאן Hbase)
  • כיצד להעביר נתונים ממסדי נתונים של SQL אחד לטבלה אחרת במאגרי SQL (אולי זה לא יכול להיות כל כך חשוב אם נעשה זאת באותו מסד נתונים של SQL. עם זאת, אין שום דבר רע בידיעה על אותו דבר. אתה אף פעם לא יודע איך זה יכול להיכנס לשימוש)

תְנַאִי מוּקדָם:

  • Hadoop הותקן מראש
  • SQL מותקן מראש
  • Hbase מותקן מראש
  • הבנה בסיסית של Java
  • MapReduce ידע
  • Hadoop מסגרת ידע בסיסי

בואו להבין את הצהרת הבעיה שאנו הולכים לפתור כאן:

יש לנו טבלת עובדים ב- MySQL DB במאגר המידע היחסי שלנו אדוריקה. כעת בהתאם לדרישה העסקית עלינו להעביר את כל הנתונים הזמינים ב- DB יחסיים למערכת קבצים Hadoop כלומר HDFS, NoSQL DB המכונה Hbase.

יש לנו אפשרויות רבות לבצע משימה זו:

  • סקוופ
  • מִתעָל
  • MapReduce

כעת אינך מעוניין להתקין ולהגדיר שום כלי אחר לפעולה זו. נשארת לכם אפשרות אחת בלבד שהיא מסגרת העיבוד של Hadoop MapReduce. מסגרת MapReduce תעניק לך שליטה מלאה על הנתונים בזמן ההעברה. אתה יכול לתפעל את העמודות ולהציב אותן ישירות בכל אחד משני מיקומי היעד.

הערה:

  • עלינו להוריד ולשים את מחבר MySQL בכיתה של Hadoop כדי להביא טבלאות מטבלת MySQL. לשם כך הורד את המחבר com.mysql.jdbc_5.1.5.jar ושמור אותו תחת ספריית Hadoop_home / share / Hadoop / MaPreduce / lib.
הורדות cp / com.mysql.jdbc_5.1.5.jar $ HADOOP_HOME / share / hadoop / mapreduce / lib /
  • כמו כן, שים את כל צנצנות Hbase תחת מסלול הכיתה של Hadoop על מנת להפוך את תוכנית MR שלך לגישה ל- Hbase. לשם כך, בצע את הפקודה הבאה :
cp $ HBASE_HOME / lib / * $ HADOOP_HOME / share / hadoop / mapreduce / lib /

גרסאות התוכנה בהן השתמשתי לביצוע משימה זו הן:

  • Hadooop-2.3.0
  • HBase 0.98.9-Hadoop2
  • ליקוי חמה

על מנת להימנע מהתוכנית בכל נושא תאימות, אני ממליץ לקוראי להפעיל את הפקודה בסביבה דומה.

DBInputWritable מותאם אישית:

חבילה com.inputFormat.copy יבוא java.io.DataInput יבוא java.io.DataOutput ייבא java.io.IOException יבוא java.sql.ResultSet ייבוא ​​java.sql.PreparedStatement ייבא java.sql.SQLException יבוא org.apache.hadoop.io ייבוא ​​לכתיבה org.apache.hadoop.mapreduce.lib.db.DB מחלקה ציבורית כתובה DBInputWritable מיישמת Writable, DBWritable {private int id private שם מחרוזת, מחלקת public void readFields (DataInput in) זורק IOException {} public void readFields (ResultSet rs) זורק SQLException // אובייקט תוצאות מייצג את הנתונים שהוחזרו מהצהרת SQL {id = rs.getInt (1) name = rs.getString (2) dept = rs.getString (3)} public public void write (DataOutput out) זורק IOException { } כתיבה ריקה ציבורית (PreparedStatement ps) זורקת SQLException {ps.setInt (1, id) ps.setString (2, name) ps.setString (3, dept)} public int getId () {return id} public String getName () {return name} מחרוזת ציבורית getDept () {return dept}}

DBOutput מותאם אישית כתוב:

חבילה com.inputFormat.copy יבוא java.io.DataInput יבוא java.io.DataOutput ייבא java.io.IOException יבוא java.sql.ResultSet ייבוא ​​java.sql.PreparedStatement ייבא java.sql.SQLException יבוא org.apache.hadoop.io ייבוא ​​לכתיבה org.apache.hadoop.mapreduce.lib.db.DB מחלקה ציבורית כתיבה DBOutputWritable מיישמת Writable, DBWritable {private String name private int id private String dept public DBOutputWritable (String name, int id, String dept) {this.name = שם this.id = id this.dept = dept} readFields חלל ציבורי (DataInput in) זורק IOException {} public void readFields (ResultSet rs) זורק SQLException {} public public ריק (DataOutput out) זורק IOException {} public public ריק (PreparedStatement ps) זורק SQLException {ps.setString (1, שם) ps.setInt (2, id) ps.setString (3, dept)}}

טבלת קלט:

ליצור edureka מסד נתונים
צור טבלת אמפ (empid int not null, name varchar (30), dept varchar (20), key primary (empid))
הכנס לערכי אמפ (1, 'אבהיי', 'התפתחות'), (2, 'ברונדש', 'מבחן')
בחר * מ- emp

מקרה 1: העברה מ- MySQL ל- HDFS

חבילה com.inputFormat.copy יבוא java.net.URI ייבוא ​​org.apache.hadoop.conf.Configuration ייבוא ​​org.apache.hadoop.fs.FileSystem ייבוא ​​org.apache.hadoop.fs.Path יבוא org.apache.hadoop.mapreduce .Job ייבוא ​​org.apache.hadoop.mapreduce.lib.db.DBC תצורה ייבוא ​​org.apache.hadoop.mapreduce.lib.db.DBInputFormat ייבוא ​​org.apache.hadoop.mapreduce.lib.output.FileOutputFormat ייבוא ​​org.apache.hadoop .io.Text יבוא org.apache.hadoop.io.IntWritable מחלקה ציבורית MainDbtohdfs {main public static void (String [] args) זורק חריג {Configuration conf = New Configuration () DBConfiguration.configureDB (conf, 'com.mysql.jdbc .Driver ', // כיתת הנהג' jdbc: mysql: // localhost: 3306 / edureka ', // db url' root ', // שם משתמש' root ') // סיסמה Job job = Job (conf) job חדש .setJarByClass (MainDbtohdfs.class) job.setMapperClass (Map.class) job.setMapOutputKeyClass (Text.class) job.setMapOutputValueClass (IntWritable.class) job.setInputFormatClass (DBInputFormat.classPatformat. נתיב חדש (args [0])) DBInputFormat.setInput (עבודה, DBInputWritable.class, 'emp', // שם טבלת קלט null, null, מחרוזת חדשה [] {'empid', 'name', 'dept'} / / עמודות טבלה) נתיב p = נתיב חדש (args [0]) FileSystem fs = FileSystem.get (URI חדש (args [0]), conf) fs.delete (p) System.exit (job.waitForCompletion (true)? 0: 1)}}

פיסת קוד זו מאפשרת לנו להכין או להגדיר את פורמט הקלט לגישה למקור ה- SQL DB שלנו. הפרמטר כולל את מחלקת הנהגים, כתובת ה- URL כוללת את כתובת מסד הנתונים של SQL, את שם המשתמש והסיסמה.

DBConfiguration.configureDB (conf, 'com.mysql.jdbc.Driver', // class driver 'jdbc: mysql: // localhost: 3306 / edureka', // db url 'root', // שם משתמש 'root') //סיסמה

פיסת קוד זו מאפשרת לנו להעביר את פרטי הטבלאות במסד הנתונים ולהגדיר אותם באובייקט העבודה. הפרמטרים כוללים כמובן את מופע העבודה, המחלקה הניתנת לכתיבה המותאמת אישית אשר חייבת ליישם ממשק DBWritable, שם טבלת המקור, התנאי אם כל null אחר, כל פרמטרי מיון אחרים null, רשימת עמודות הטבלה בהתאמה.

DBInputFormat.setInput (עבודה, DBInputWritable.class, 'emp', // שם טבלת קלט null, null, מחרוזת חדשה [] {'empid', 'name', 'dept'} // עמודות טבלה)

ממפה

חבילה com.inputFormat.copy ייבא java.io.IOException ייבוא ​​org.apache.hadoop.mapreduce.Mapper ייבוא ​​org.apache.hadoop.io.LongWritable ייבוא ​​org.apache.hadoop.io.Text ייבוא ​​org.apache.hadoop.io . מפה בכיתה ציבורית IntWritable מרחיבה את Mapper {
מפת ריק מוגנת (LongWritable key, DBInputWritable value, Context ctx) {try {String name = value.getName () IntWritable id = new IntWritable (value.getId ()) String dept = value.getDept ()
ctx.write (טקסט חדש (שם + '' + מזהה + '' + מחלקה), מזהה)
} לתפוס (IOException e) {e.printStackTrace ()} לתפוס (InterruptedException e) {e.printStackTrace ()}}}

מפחית: מפחית זהויות בשימוש

פקודה לרוץ:

צנצנת hadoop dbhdfs.jar com.inputFormat.copy.MainDbtohdfs / dbtohdfs

פלט: טבלת MySQL הועברה ל- HDFS

hadoop dfs -ls / dbtohdfs / *

מקרה 2: העברה משולחן אחד ב- MySQL לשני ב- MySQL

יצירת טבלת פלט ב- MySQL

צור טבלה עובד 1 (שם varchar (20), id int, dept varchar (20))

חבילה com.inputFormat.copy ייבוא ​​org.apache.hadoop.conf.Configuration ייבוא ​​org.apache.hadoop.mapreduce.Job ייבוא ​​org.apache.hadoop.mapreduce.lib.db.DBConfiguration ייבוא ​​org.apache.hadoop.mapreduce.lib .db.DBInputFormat יבוא org.apache.hadoop.mapreduce.lib.db.DBOutputFormat ייבוא ​​org.apache.hadoop.io.Text ייבוא ​​org.apache.hadoop.io.IntWritable ייבוא ​​org.apache.hadoop.io. NullWritable ברמה ציבורית Mainonetable_to_other_table {main static public void (String [] args) זורק Exception {Configuration conf = new Configuration () DBConfiguration.configureDB (conf, 'com.mysql.jdbc.Driver', // class driver 'jdbc: mysql: // localhost : 3306 / edureka ', // db url' root ', // שם משתמש' root ') // סיסמת Job Job = Job חדש (conf) job.setJarByClass (Mainonetable_to_other_table.class) משימה job.setMapperClass (Map.class) .setReducerClass (Reduce.class) job.setMapOutputKeyClass (Text.class) job.setMapOutputValueClass (IntWritable.class) job.setOutputKeyClass (DBOutputWritable.class) job.setOutputValueClass (Nul lWritable.class) job.setInputFormatClass (DBInputFormat.class) job.setOutputFormatClass (DBOutputFormat.class) DBInputFormat.setInput (job, DBInputWritable.class, 'emp', // שם טבלת הקלט null, null, new String [] {'empid ',' שם ',' מחלקה '} // עמודות טבלה) DBOutputFormat.setOutput (עבודה,' עובד 1 ', // שם טבלת פלט חדש מחרוזת [] {' שם ',' מזהה ',' מחלקה '} // טבלה עמודות) System.exit (job.waitForCompletion (נכון)? 0: 1)}}

פיסת קוד זו מאפשרת לנו להגדיר את שם טבלת הפלט ב- SQL DB. הפרמטרים הם מופע העבודה, שם טבלת הפלט ושמות עמודות הפלט בהתאמה.

DBOutputFormat.setOutput (משימה, 'עובד 1', // שם טבלת פלט מחרוזת חדשה]] 'עמודות', 'מזהה', 'מחלקה'} // טבלה)

Mapper: זהה למקרה 1

מפחית:

חבילה com.inputFormat.copy יבוא java.io.IOException ייבא org.apache.hadoop.mapreduce.Reducer ייבוא ​​org.apache.hadoop.io.Text ייבוא ​​org.apache.hadoop.io.IntWritable ייבוא ​​org.apache.hadoop.io מחלקה ציבורית NullWritable צמצום מרחיב צמצום {מוגן ריק לצמצם (מפתח טקסט, ערכים ניתנים לשינוי, הקשר ctx) {int סכום = 0 קו מחרוזת [] = key.toString (). פיצול ('') נסה {ctx.write (DBOutputWritable חדש (שורה [0] .toString (), Integer.parseInt (שורה [1] .toString ()), שורה [2] .toString ()), NullWritable.get ())} לתפוס (IOException e) {e.printStackTrace ()} לתפוס (InterruptedException e) {e.printStackTrace ()}}}

פקודה לרוץ:

צנצנת hadoop dbhdfs.jar com.inputFormat.copy.Mainonetable_to_other_table

פלט: נתונים שהועברו מטבלת EMP ב- MySQL לעובד אחר בטבלה 1 ב- MySQL

מקרה 3: העברה משולחן ב- MySQL לטבלת NoSQL (Hbase)

יצירת טבלת Hbase להתאמה לפלט מטבלת SQL:

צור 'עובד', 'official_info'

מחלקת נהגים:

חבילה Dbtohbase ייבוא ​​org.apache.hadoop.conf.Configuration ייבוא ​​org.apache.hadoop.mapreduce.Job ייבוא ​​org.apache.hadoop.mapreduce.lib.db.DBConfiguration ייבוא ​​org.apache.hadoop.mapreduce.lib.db.DBInputFormat יבוא org.apache.hadoop.hbase.mapreduce.TableOutputFormat ייבוא ​​org.apache.hadoop.hbase.HBaseConfiguration ייבוא ​​org.apache.hadoop.hbase.client.HTable ייבוא ​​org.apache.hadoop.hbase.client.HTableInterface ייבוא ​​org.apache .hadoop.hbase.io.ImmutableBytesWritable ייבוא ​​org.apache.hadoop.hbase.mapreduce.TableMapReduce עד יבוא org.apache.hadoop.io.Text מחלקה ציבורית MainDbToHbase {ציבורי ריק סטטי ריק (מחרוזת [] טענות) זורק חריג {תצורה conf = HBaseConfiguration.create () HTableInterface mytable = חדש HTable (conf, 'emp') DBConfiguration.configureDB (conf, 'com.mysql.jdbc.Driver', // כיתת הנהג 'jdbc: mysql: // localhost: 3306 / edureka' , // db url 'root', // שם משתמש 'root') // סיסמת Job job = Job (new, conf, 'dbtohbase') job.setJarByClass (MainDbToHbase.class) job.s etMapperClass (Map.class) job.setMapOutputKeyClass (ImmutableBytesWritable.class) job.setMapOutputValueClass (Text.class) TableMapReduceUtil.initTableReducerJob ('עובד', Reduce.class, job) job.setInputFormatCatformatClassFormatClassFormatClassFormatClassFormatClassFormatClassFormatClassFormatClass. class) DBInputFormat.setInput (עבודה, DBInputWritable.class, 'emp', // שם טבלת קלט null, null, מחרוזת חדשה [] {'empid', 'name', 'dept'} // עמודות טבלה) System.exit (job.waitForCompletion (נכון)? 0: 1)}}

פיסת קוד זו מאפשרת לך להגדיר את מחלקת מפתח הפלט שבמקרה של hbase היא ImmutableBytesWritable

job.setMapOutputKeyClass (ImmutableBytesWritable.class) job.setMapOutputValueClass (Text.class)

כאן אנו מעבירים את שם טבלת hbase ואת המפחית לפעול על השולחן.

TableMapReduceUtil.initTableReducerJob ('עובד', Reduce.class, עבודה)

ממפה:

חבילה Dbtohbase יבוא java.io.IOException יבוא org.apache.hadoop.mapreduce.Mapper יבוא org.apache.hadoop.hbase.io.ImmutableBytesWritable ייבוא ​​org.apache.hadoop.hbase.util.Bytes ייבוא ​​org.apache.hadoop.io .LongWritable ייבוא ​​org.apache.hadoop.io.Text ייבוא ​​org.apache.hadoop.io.IntWritable מחלקה ציבורית מפה מרחיבה Mapper {פרטי IntWritable אחד = חדש IntWritable (1) המפה הריקה מוגנת (LongWritable id, DBInputWritable ערך, הקשר הקשר) {נסה {String line = value.getName () String cd = value.getId () + 'String dept = value.getDept () context.write (new ImmutableBytesWritable (Bytes.toBytes (cd)), טקסט חדש (שורה + ' '+ מחלקה))} לתפוס (IOException e) {e.printStackTrace ()} לתפוס (InterruptedException e) {e.printStackTrace ()}}}

בפיסת הקוד הזו אנו לוקחים ערכים מהמחלקים של המחלקה DBinputwritable ואז מעבירים אותם פנימה
ImmutableBytes ניתן לכתוב, כך שהם יגיעו למפחית בצורה הניתנת לביצועים שהבייס מבין.

קו מחרוזת = value.getName () מחרוזת cd = value.getId () + 'מחרוזת dept = value.getDept () context.write (חדש ImmutableBytesWritable (Bytes.toBytes (cd)), טקסט חדש (קו +' + מחלקה )))

מפחית:

חבילה Dbtohbase יבוא java.io.IOException ייבא org.apache.hadoop.hbase.client.Put יבוא org.apache.hadoop.hbase.io.ImmutableBytesWritable ייבוא ​​org.apache.hadoop.hbase.mapreduce.TableReducer ייבוא ​​org.apache.hadoop .hbase.util.Bytes מייבא org.apache.hadoop.io.Txt ציבורי בכיתה צמצום מרחיב TableReducer {צמצום חלל ציבורי (מפתח ImmutableBytesWritable, ערכים ניתנים לשינוי, הקשר הקשר) זורק IOException, InterruptedException {String [] סיבה = null // ערכי לולאה עבור (טקסט val: ערכים) {סיבה = val.toString (). split ('')} // שים ל- HBase שים put = חדש Put (key.get ()) put.add (Bytes.toBytes ('official_info') ), Bytes.toBytes ('שם'), Bytes.toBytes (סיבה [0])) put.add (Bytes.toBytes ('official_info'), Bytes.toBytes ('מחלקה'), Bytes.toBytes (גורם [1 ])) context.write (מפתח, לשים)}}

פיסת קוד זו מאפשרת לנו להחליט את השורה המדויקת ואת העמודה בה נשמור ערכים מהמפחית. כאן אנו מאחסנים כל אמפיד בשורה נפרדת כאשר עשינו אמפיד כמפתח שורה שיהיה ייחודי. בכל שורה אנו שומרים את המידע הרשמי של העובדים תחת משפחת העמודות 'official_info' תחת העמודות 'שם' ו'מחלקה 'בהתאמה.

Put put = new Put (key.get ()) put.add (Bytes.toBytes ('official_info'), Bytes.toBytes ('שם'), Bytes.toBytes (גורם [0])) put.add (Bytes. toBytes ('official_info'), Bytes.toBytes ('מחלקה'), Bytes.toBytes (סיבה [1])) context.write (key, put)

נתונים שהועברו ב- Hbase:

לסרוק עובד

כפי שאנו רואים הצלחנו להשלים את משימת העברת הנתונים העסקיים שלנו מ- DB DB יחסי ל- DB NoSQL בהצלחה.

בבלוג הבא נלמד כיצד לכתוב ולהפעיל קודים עבור פורמטי קלט ופלט אחרים.

המשך לפרסם את הערותיך, שאלותיך או כל משוב. אשמח לשמוע ממך.

יש לך שאלה עבורנו? אנא הזכיר זאת בסעיף ההערות ונחזור אליך.

פוסטים קשורים: