zoukankan      html  css  js  c++  java
  • bulk-load 装载HDFS数据到HBase

    bulk-load的作用是用mapreduce的方式将hdfs上的文件装载到hbase中,对于海量数据装载入hbase非常有用,参考http://hbase.apache.org/docs/r0.89.20100621/bulk-loads.html:

    hbase提供了现成的程序将hdfs上的文件导入hbase,即bulk-load方式。它包括两个步骤(也可以一次完成):
    1 将文件包装成hfile,hadoop jar /path/to/hbase.jar importtsv -Dimporttsv.columns=a,b,c <tablename> <inputdir>
    比如:
    Java代码  收藏代码
    1. hadoop dfs -cat test/1  
    2. 1       2  
    3. 3       4  
    4. 5       6  
    5. 7       8  

    执行
    Java代码  收藏代码
    1. hadoop jar ~/hbase/hbase-0.90.2.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,f1 t8 test  

    将会启动mapreduce程序在hdfs上生成t8这张表,它的rowkey分别为1 3 5 7,对应的value为2 4 6 8
    注意,源文件默认以" "为分割符,如果需要换成其它分割符,在执行时加上-Dimporttsv.separator=",",则变成了以","分割

    2 在上一步中,如果设置了输出目录,如
    Java代码  收藏代码
    1. hadoop jar ~/hbase/hbase-0.90.2.jar importtsv -Dimporttsv.bulk.output=tmp -Dimporttsv.columns=HBASE_ROW_KEY,f1 t8 test  

    那么t8表还暂时不会生成,只是将hfile输出到tmp文件夹下,我们可以查看tmp:
    Java代码  收藏代码
    1. hadoop dfs -du tmp  
    2. Found 3 items  
    3. 0           hdfs://namenode:9000/user/test/tmp/_SUCCESS  
    4. 65254       hdfs://namenode:9000/user/test/tmp/_logs  
    5. 462         hdfs://namenode:9000/user/test/tmp/f1  

    然后执行hadoop jar hbase-VERSION.jar completebulkload /user/todd/myoutput mytable将这个输出目录中的hfile转移到对应的region中,这一步因为只是mv,所以相当快。如:
    hadoop jar ~/hbase/hbase-0.90.2.jar completebulkload tmp t8
    然后
    Java代码  收藏代码
    1. hadoop dfs -du /hbase/t8/c408963c084d328490cc2f809ade9428  
    2.     Found 4 items  
    3.     124         hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.oldlogs  
    4.     692         hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.regioninfo  
    5.     0           hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.tmp  
    6.     462         hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/f1  

    此时己经生成了表t8
    注意,如果数据特别大,而表中原来就有region,那么会执行切分工作,查找数据对应的region并装载

            程序使用中注意:
    1 因为是执行hadoop程序,不会自动查找hbase的config路径,也就找不到hbase的环境变量。因此需要将hbase-site.xml加入到hadoop-conf变量中
    2 还需要将hbase/lib中的jar包放入classpath中
    3 执行以上的步骤2时需要将zookeeper的配置写入core-site.xml中,因为在那一步时甚至不会读取hbase-site.xml,否则会连不上zookeeper
  • 相关阅读:
    并不对劲的字符串专题(二):kmp
    54.Counting Bits( 计算1的个数)
    53.Coin Change(找硬币)
    52.Product of Array Except Self(除过自身的数组乘积)
    51.Lowest Common Ancestor of a Binary Tree(二叉树的最小公共祖先)
    50.Maximal Square(最大正方形)
    49.Kth Largest Element in an Array
    48.Course Schedule(课程安排)
    47.Number of Islands(岛的数量)
    46.Maximum Product Subarray(最大乘积子数组)
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205176.html
Copyright © 2011-2022 走看看