真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

HBase之HFileOutputFormat

   hadoop mr 輸出需要導(dǎo)入hbase的話最好先輸出成HFile格式, 再導(dǎo)入到HBase,因為HFile是HBase的內(nèi)部存儲格式, 所以導(dǎo)入效率很高,下面是一個示例
1. 創(chuàng)建HBase表t1

10年積累的成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先制作網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有彭陽免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

  1. hbase(main):157:0* create 't1','f1' 
  2. 0 row(s) in 1.3280 seconds 
  3.  
  4. hbase(main):158:0> scan 't1' 
  5. ROW                   COLUMN+CELL                                                
  6. 0 row(s) in 1.2770 seconds 

2.寫MR作業(yè)
HBaseHFileMapper.java

  1. package com.test.hfile; 
  2. import java.io.IOException; 
  3. import org.apache.hadoop.hbase.io.ImmutableBytesWritable; 
  4. import org.apache.hadoop.hbase.util.Bytes; 
  5. import org.apache.hadoop.io.LongWritable; 
  6. import org.apache.hadoop.io.Text; 
  7. import org.apache.hadoop.mapreduce.Mapper; 
  8.  
  9. public class HBaseHFileMapper extends Mapper { 
  10.     private ImmutableBytesWritable immutableBytesWritable = new ImmutableBytesWritable(); 
  11.     @Override 
  12.     protected void map(LongWritable key, Text value, 
  13.             org.apache.hadoop.mapreduce.Mapper.Context context) 
  14.             throws IOException, InterruptedException { 
  15.         immutableBytesWritable.set(Bytes.toBytes(key.get())); 
  16.         context.write(immutableBytesWritable, value); 
  17.     } 

HBaseHFileReducer.java

  1. package com.test.hfile; 
  2. import java.io.IOException; 
  3. import org.apache.hadoop.hbase.KeyValue; 
  4. import org.apache.hadoop.hbase.io.ImmutableBytesWritable; 
  5. import org.apache.hadoop.hbase.util.Bytes; 
  6. import org.apache.hadoop.io.Text; 
  7. import org.apache.hadoop.mapreduce.Reducer; 
  8.  
  9. public class HBaseHFileReducer extends Reducer {     
  10.     protected void reduce(ImmutableBytesWritable key, Iterable values, 
  11.             Context context) 
  12.             throws IOException, InterruptedException { 
  13.         String value=""; 
  14.         while(values.iterator().hasNext()) 
  15.         { 
  16.             value = values.iterator().next().toString(); 
  17.             if(value != null && !"".equals(value)) 
  18.             { 
  19.                 KeyValue kv = createKeyValue(value.toString()); 
  20.                 if(kv!=null) 
  21.                     context.write(key, kv); 
  22.             } 
  23.         } 
  24.     } 
    // str格式為row:family:qualifier:value 簡單模擬下
  25.     private KeyValue createKeyValue(String str) 
  26.     { 
  27.         String[] strstrs = str.split(":"); 
  28.         if(strs.length<4) 
  29.             return null; 
  30.         String row=strs[0]; 
  31.         String family=strs[1]; 
  32.         String qualifier=strs[2]; 
  33.         String value=strs[3]; 
  34.         return new KeyValue(Bytes.toBytes(row),Bytes.toBytes(family),Bytes.toBytes(qualifier),System.currentTimeMillis(), Bytes.toBytes(value)); 
  35.     } 

HbaseHFileDriver.java

  1. package com.test.hfile; 
  2. import java.io.IOException; 
  3. import org.apache.hadoop.conf.Configuration; 
  4. import org.apache.hadoop.fs.Path; 
  5. import org.apache.hadoop.hbase.HBaseConfiguration; 
  6. import org.apache.hadoop.hbase.client.HTable; 
  7. import org.apache.hadoop.hbase.io.ImmutableBytesWritable; 
  8. import org.apache.hadoop.hbase.mapreduce.HFileOutputFormat; 
  9. import org.apache.hadoop.io.Text; 
  10. import org.apache.hadoop.mapreduce.Job; 
  11. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
  12. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 
  13. import org.apache.hadoop.util.GenericOptionsParser; 
  14.  
  15. public class HbaseHFileDriver { 
  16.     public static void main(String[] args) throws IOException, 
  17.             InterruptedException, ClassNotFoundException { 
  18.          
  19.         Configuration conf = new Configuration(); 
  20.         String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); 
  21.  
  22.         Job job = new Job(conf, "testhbasehfile"); 
  23.         job.setJarByClass(HbaseHFileDriver.class); 
  24.  
  25.         job.setMapperClass(com.test.hfile.HBaseHFileMapper.class); 
  26.         job.setReducerClass(com.test.hfile.HBaseHFileReducer.class); 
  27.  
  28.         job.setMapOutputKeyClass(ImmutableBytesWritable.class); 
  29.         job.setMapOutputValueClass(Text.class); 

  30.   // 偷懶, 直接寫死在程序里了,實際應(yīng)用中不能這樣, 應(yīng)從命令行獲取
  31.         FileInputFormat.addInputPath(job, new Path("/home/yinjie/input")); 
  32.         FileOutputFormat.setOutputPath(job, new Path("/home/yinjie/output")); 
  33.  
  34.         Configuration HBASE_CONFIG = new Configuration(); 
  35.         HBASE_CONFIG.set("hbase.zookeeper.quorum", "localhost"); 
  36.         HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181"); 
  37.         HBaseConfiguration cfg = new HBaseConfiguration(HBASE_CONFIG); 
  38.         String tableName = "t1"; 
  39.         HTable htable = new HTable(cfg, tableName); 
  40.         HFileOutputFormat.configureIncrementalLoad(job, htable); 
  41.  
  42.         System.exit(job.waitForCompletion(true) ? 0 : 1); 
  43.     } 

/home/yinjie/input目錄下有一個hbasedata.txt文件,內(nèi)容為

  1. [root@localhost input]# cat hbasedata.txt  
  2. r1:f1:c1:value1 
  3. r2:f1:c2:value2 
  4. r3:f1:c3:value3 

將作業(yè)打包,我的到處路徑為/home/yinjie/job/hbasetest.jar
提交作業(yè)到hadoop運行:

  1. [root@localhost job]# hadoop jar /home/yinjie/job/hbasetest.jar com.test.hfile.HbaseHFileDriver -libjars /home/yinjie/hbase-0.90.3/hbase-0.90.3.jar 

作業(yè)運行完畢后查看下輸出目錄:

  1. [root@localhost input]# hadoop fs -ls /home/yinjie/output 
  2. Found 2 items 
  3. drwxr-xr-x   - root supergroup          0 2011-08-28 21:02 /home/yinjie/output/_logs 
  4. drwxr-xr-x   - root supergroup          0 2011-08-28 21:03 /home/yinjie/output/f1 

OK, 已經(jīng)生成以列族f1命名的文件夾了。
接下去使用Bulk Load將數(shù)據(jù)導(dǎo)入到HBbase

  1. [root@localhost job]# hadoop jar /home/yinjie/hbase-0.90.3/hbase-0.90.3.jar completebulkload /home/yinjie/output t1 

導(dǎo)入完畢,查詢hbase表t1進行驗證

  1. hbase(main):166:0> scan 't1' 
  2. ROW                              COLUMN+CELL                                                                                  
  3.  r1                              column=f1:c1, timestamp=1314591150788, value=value1                                          
  4.  r2                              column=f1:c2, timestamp=1314591150814, value=value2                                          
  5.  r3                              column=f1:c3, timestamp=1314591150815, value=value3                                          
  6. 3 row(s) in 0.0210 seconds 

數(shù)據(jù)已經(jīng)導(dǎo)入!
 


名稱欄目:HBase之HFileOutputFormat
網(wǎng)站網(wǎng)址:http://weahome.cn/article/gssjsd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部