HBase рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ

рд╣рд╛рдп рд╕рд╛рдерд┐рдпреЛрдВ!
рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ HBase рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЕрд░реНрдерд╛рддреН рдмрд▓реНрдХ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ред рдпрд╣ рдПрдХ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд▓реЛрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐ рд╣реИред рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг (рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓реЗрдЦрди) рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдПрдХ рд░рд╛рдп рд╣реИ рдХрд┐ рдмрд▓реНрдХ рд▓реЛрдб рдХреА рдорджрдж рд╕реЗ рдЖрдк рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдмрд╣реБрдд рдЬрд▓реНрджреА рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реА рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗред рдереЛрдХ рднрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рддреАрди рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:





рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдореЗрдВ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА: рдЧрддрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЖрдХрд╛рд░ рдкрд░ рдХреИрд╕реЗ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпреЗ рд╕рдВрдЦреНрдпрд╛рдПрдВ рдмрд╛рд╣рд░реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рднреА рдирд┐рд░реНрднрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдмрд▓реНрдХ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдХреЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИрдВред

рд╕реНрд░реЛрдд рдбреЗрдЯрд╛:


Cloudera CDH4, HBase 0.94.6-cdh4.3.0 рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХреНрд▓рд╕реНрдЯрд░ред
CentOS / 4CPU / RAM 8GB / HDD 50GB рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рддреАрди рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ (рд╣рд╛рдЗрдкрд░рд╡рд┐рдЬрд░ рдкрд░)
рдЯреЗрд╕реНрдЯ рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ CSV рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдХреБрд▓ рдорд╛рддреНрд░рд╛ 2GB, 3.5GB, 7.1GB рдФрд░ 14.2GB рд╣реИ
рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ:

рдереЛрдХ рд▓реЛрдбрд┐рдВрдЧ


рджрд░:


рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЖрдХрд╛рд░ (рдкрдВрдХреНрддрд┐): 0.5Kb
MapReduce рдиреМрдХрд░реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдордп: 70 рд╕реЗрдХрдВрдб
рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ HDFS рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдордп рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:


рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:


рдбрд╛рдЙрдирд▓реЛрдб 8 рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде 2 рдореЗрдЬрдмрд╛рдиреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдореБрдХреБрдЯ рдкрд░ рд╢реБрд░реВ рд╣реБрдЖ рдЧреНрд░рд╛рд╣рдХ, рд╕реАрдкреАрдпреВ рд▓реЛрдб 40% рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдерд╛
рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рдПрдХ рд░рд┐рдХреЙрд░реНрдб (рдкрдВрдХреНрддрд┐) рдХрд╛ рдЖрдХрд╛рд░ 0.5Kb рдерд╛ред



рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реИ?




рдореИрдВрдиреЗ рдЕрд▓реНрдЯреНрд░рд╛-рдлрд╛рд╕реНрдЯ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд▓реНрдХ рд▓реЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреЗ рдорджреНрджреЗрдирдЬрд░ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рд╕реАрдкреАрдпреВ рдкрд░ рд▓реЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЬреИрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╡реИрд╕рд╛ рд╣реЛ, рдореБрдЭреЗ рдЧрддрд┐ рдореЗрдВ рд▓рд╛рдн рдирд╣реАрдВ рджрд┐рдЦрддрд╛ред рдЯреЗрд╕реНрдЯ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдмрд▓реНрдХ рд▓реЛрдб рдХреЗрд╡рд▓ 1.5 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдпрд╣ рдПрдо / рдЖрд░ рдХреА рдиреМрдХрд░реА рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдг рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗ рдмрд┐рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛ рдХреЛ рдПрдЪрдбреАрдПрдлрдПрд╕ рддрдХ рдкрд╣реБрдВрдЪрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдордп рднреА рд▓рдЧреЗрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд▓реНрдХ рд▓реЛрдб рдХреЛ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдПрдХ рдФрд░ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реИ, рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓реА рдЕрд▓рдЧ (рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ)ред

рдФрд░ рдЕрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП


рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХрдИ рддрдХрдиреАрдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред

//  Job job = new Job(configuration, JOB_NAME); job.setJarByClass(BulkLoadJob.class); job.setMapOutputKeyClass(ImmutableBytesWritable.class); job.setMapOutputValueClass(Put.class); job.setMapperClass(DataMapper.class); job.setNumReduceTasks(0); job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(HFileOutputFormat.class); FileInputFormat.setInputPaths(job, inputPath); HFileOutputFormat.setOutputPath(job, new Path(outputPath)); HTable dataTable = new HTable(jobConfiguration, TABLE_NAME); HFileOutputFormat.configureIncrementalLoad(job, dataTable); // ControlledJob controlledJob = new ControlledJob( job, null ); JobControl jobController = new JobControl(JOB_NAME); jobController.addJob(controlledJob); Thread thread = new Thread(jobController); thread.start(); . . . //   output setFullPermissions(JOB_OUTPUT_PATH); //  bulk-load LoadIncrementalHFiles loader = new LoadIncrementalHFiles(jobConfiguration); loader.doBulkLoad( new Path(JOB_OUTPUT_PATH), dataTable ); 




рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ hbase рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдУрд░ рд╕реЗ Job рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдзрд┐рдХрд╛рд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИ)ред



 //    - HTableDescriptor descriptor = new HTableDescriptor( Bytes.toBytes(tableName) ); descriptor.addFamily( new HColumnDescriptor(Constants.COLUMN_FAMILY_NAME) ); HBaseAdmin admin = new HBaseAdmin(config); byte[] startKey = new byte[16]; Arrays.fill(startKey, (byte) 0); byte[] endKey = new byte[16]; Arrays.fill(endKey, (byte)255); admin.createTable(descriptor, startKey, endKey, REGIONS_COUNT); admin.close(); 




рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╕рдм рд╣реИред рдореИрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдХрдард┐рди рдкрд░реАрдХреНрд╖рдг рд╣реИ, рдмрд┐рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдЕрдиреБрдХреВрд▓рди рдХреЗ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд╕реБрдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред

рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб GitHub: github.com/2anikulin/hbase-bulk-load рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ

Source: https://habr.com/ru/post/In195040/


All Articles