HBase海量数据入库方案、使用ImportTSV向HBase中导入海量数据、HBase的。。。

HBase海量数据⼊库⽅案、使⽤ImportTSV向HBase中导⼊海量数据、HBase
的。。。
前⾔
配电装置
数据导⼊HBase时,若是⼩批量的数据,使⽤HBase提供的API就可以满⾜需求。
如果要灌⼊⼤量数据,使⽤API的⽅式导⼊,会占⽤⼤量的RegionServer的资源,影响该RegionServer上其他表的查询。
为了解决这种问题,HBase官⽅提供了两种基于MapReduce的⼤量数据导⼊的⽅法:
1. ImportTSV
2. BuckLoad
1. HBase导⼊数据的写⼊流程
冬笋探测仪有用吗
1. 客户端Client向HRegionServer发起请求,要求写⼊数据。
2. HRegionServer先将数据写⼊HLog中,即图中WAL过程。=》防⽌数据丢失
3. HRegionServer将数据写⼊Memstore中,做缓存。
4. 当内存中的数据达到阀值时,将数据Flush(刷写)到硬盘中,即写⼊到HFile中,并同时删除MemStore和HLog中的数据。
2. HBase在hdfs中的存储结构
我们知道,HBase的数据最终是以HFile的形式存储在hdfs中的,在hdfs中hbase的⽬录结构如下
/HBase指定的存储⽬录/HBase表/表分布的Region/列族/HFile
举个例⼦:
现在有⼀张user表,表中有两个列族info和desc,user的region分布情况如下:(如下图⽰HBase WEB UI界⾯)
在hdfs中user表存储路径如下所⽰,⽆视两个.开头的⽂件,其他的⽬录名称均为上图中,Region对应的code码
点进去⼀个Region⽬录,⽬录内容如下图:
其中info和desc这两个⽬录,就是HBase创建表时定义的列族,HFile存放在该⽬录下
点进去info列族这个⽂件夹,可以看到这个列族下的HFile
3. ImportTSV初次见⾯,请多指教~
ImportTsv是HBase提供的⼀个命令⾏⼯具,将存储在hdfs上的数据⽂件,通过指定的分隔符解析后,导⼊到HBase表中。
使⽤ImportTsv的⽅式导⼊数据与正常写⼊流程不同的是,跳过了WAL(Client写⼊到HLog)、Memcache(Client写⼊到MemStore)与Flush的过程,直接将HFlie⽂件移动到HBase表空间⽬录下即可,不影响HRegionServer的性能
碳纤维尾翼ImportTsv包含两种⽅式,能够将数据导⼊到HBase表中:
1. 第⼀种,使⽤TableOutputformat在reduce端插⼊数据,但是这种⽅式导⼊⼤批量数据的时候有可能会存在问题,尤其是列⽐较多
的宽表导⼊的时候,会出现RegionTooBusyException,导致数据丢失,如果数据量少,可以使⽤该⽅法
2. 第⼆种(强烈推荐):先使⽤MapReduce程序⽣成HFlie⽂件,再执⾏LoadlncrementaHFlies命令,将⽂件移动到HBase表中对应
的存储⽬录下。
4. ImportTsv⽤法
4.1 命令如下
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -lumns=a,b,c <tablename><inputdir>
默认情况下,是第⼀种导⼊⽅法,即将数据在reduce端直接导⼊到HBase中
4.2 参数说明
-lumns=a,b,c 指定导⼊到HBase表中的列
<tablename> 表名
<inputdir> 数据⽂件在hdfs上的⽬录地址(直接写⽬录地址即可,例:/)
如上参数,是默认直接导⼊所需基本的参数,如下是根据具体上传的⽂件指定参数
如果数据⽂件不是使⽤默认的分隔符 \t进⾏分割,需要指定⽂件分隔符:
-Dimporttsv.separator="," 指定分隔符为逗号
如果使⽤第⼆种⽅法,要⽣成HFlie⽂件,添加如下参数:
-Dimporttsv.bluck.output=/path/for/output 指定⽣成的HFlie⽂件在hdfs的存储⽬录地址
另外,还有⼀些运⾏参数可供选择
-Dimporttsv.skip.bad.lines=true / false
在导⼊过程中,如果有不符合分割标准的⾏,被称之为badlines,设置是否跳过,如果不跳过,则Map-Reduce任务停⽌
-Dimporttsv.timestamp=currentTimeAsLong 指定导⼊的时间戳
-Dimporttsv.mapper.class=my.Mapper
指定⽤户⾃定义的Mapper程序,⽤于替换默认的Mapper:org.apache.hadoop.hbase.mapreduce.TsvImporterMapper
-Dmapreduce.job.name=jobName ⽤户指定MapReduce任务名称
-Dcreate.table= yes/no
如果HBase中没有创建表,是否使⽤ImportTSV⼯具创建该表,如果设置为no,则在HBase中表必须存在
-Dno.strict= true / false 是否忽略HBASE表中的列族检查,默认为false
如果考虑提升导⼊性能,可以参考如下参数
-Dmapreduce.map.speculative=false 关闭Map端推断
-duce.speculative=false 关闭Reduce端推断
5. 使⽤ImportTsv导⼊HBase实例
5.1 数据⽂件
这⾥有⼀个数据⽂件,, ⽂件内容如下:如有雷同,纯属巧合
对应的列分别为:⼿机号反转、姓名、性别、年龄、⾝份证号、户籍地址、⽣⽇
现要将数据⽂件导⼊到user表中,user表建表语句如下:
info列簇是⽤户基本信息
desc列簇是其他描述信息
HBase创建表如下
create 'user',
{NAME =>'info', DATA_BLOCK_ENCODING =>'NONE', BLOOMFILTER =>'ROWCOL', COMPRESS
ION =>'SNAPPY', VERSIONS =>'1', MIN_VERSIONS =>'0', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536', IN_MEMORY =>'false', BLOCKCACHE =>'false',REPLICATION_SCOPE=>'1'}, {NAME =>'desc', DATA_BLOCK_ENCODING =>'NONE', BLOOMFILTER =>'ROWCOL', COMPRESSION =>'SNAPPY', VERSIONS =>'1', MIN_VERSION S =>'0', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536',IN_MEMORY =>'false', BLOCKCACHE =>'false',REPLICATION_SCOPE=>'1'}, SPLITS =>['0','1', '2', '3', '4','5','6','7','8','9']
5.2 需求
高压变频柜需要将⽂件中的数据导⼊到user表中的info列族,row-key是⽤户⼿机号反转
5.3 第⼀种⽅式导⼊(简单了解下,重点还是第⼆种)
指定分隔符为逗号
指定导⼊的列:第⼀列为HBASE_ROW_KEY,其他列都是info列族下的name,gender,age,idNumber,address,birthday列指定需要导⼊的表名:user
指定数据⽂件在hdfs上的⽬录地址:/
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," \
-lumns=HBASE_ROW_KEY,info:name,info:gender,info:age,info:idNumber,info:address,info:birthday \
user /
5.4 第⼆种⽅式导⼊(强烈推荐,重点介绍)
指定分隔符
指定产⽣的HFlie在hdfs上存放的临时⽬录: /louisvv/hfile_tmp
指定导⼊的列:第⼀列为hbase_row_key, 其他列都是info列族下的name,gender,age,idNumber,address,birthday列指定需要导⼊的表名:user
指定数据⽂件在hdfs上的⽬录地址:/
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," \
-Dimporttsv.bulk.output=/louisvv/hfile_tmp \
-
user /
截取Map-Reduce部分⽇志如下:
可以看到MR的基本信息,共2000002(⼆百万)条数据,ImportTsv 处理的Bad Lines=0,即所有数据都成功的导⼊了,整个过程⼤约花费了1分20秒左右的时间,可以看出ImportTsv的效率还是挺快的。
2018-10-15 16:54:24,570 INFO  [main] mapreduce.Job:  map 0% reduce 0%
2018-10-15 16:54:35,670 INFO  [main] mapreduce.Job:  map 20% reduce 0%
2018-10-15 16:54:38,688 INFO  [main] mapreduce.Job:  map 33% reduce 0%
2018-10-15 16:54:45,730 INFO  [main] mapreduce.Job:  map 50% reduce 0%
2018-10-15 16:54:54,795 INFO  [main] mapreduce.Job:  map 70% reduce 0%
2018-10-15 16:54:57,812 INFO  [main] mapreduce.Job:  map 83% reduce 0%
2018-10-15 16:55:05,853 INFO  [main] mapreduce.Job:  map 100% reduce 0%
2018-10-15 16:55:05,853 INFO  [main] mapreduce.Job:  map 100% reduce 0%
2018-10-15 16:55:13,891 INFO  [main] mapreduce.Job:  map 100% reduce 69%
2018-10-15 16:55:16,905 INFO  [main] mapreduce.Job:  map 100% reduce 73%
热转印印刷机
2018-10-15 16:55:19,920 INFO  [main] mapreduce.Job:  map 100% reduce 76%
2018-10-15 16:55:22,935 INFO  [main] mapreduce.Job:  map 100% reduce 80%
2018-10-15 16:55:25,949 INFO  [main] mapreduce.Job:  map 100% reduce 83%
2018-10-15 16:55:28,964 INFO  [main] mapreduce.Job:  map 100% reduce 86%
2018-10-15 16:55:31,976 INFO  [main] mapreduce.Job:  map 100% reduce 90%
2018-10-15 16:55:34,989 INFO  [main] mapreduce.Job:  map 100% reduce 93%
2018-10-15 16:55:38,003 INFO  [main] mapreduce.Job:  map 100% reduce 97%
2018-10-15 16:55:41,014 INFO  [main] mapreduce.Job:  map 100% reduce 100%
2018-10-15 16:55:41,022 INFO  [main] mapreduce.Job: Job job_1539592382677_0007 completed successfully 2018-10-15 16:55:41,149 INFO  [main] mapreduce.Job: Counters: 50
File System Counters
FILE: Number of bytes read=437400267
FILE: Number of bytes written=875354426
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=133551726
HDFS: Number of bytes written=188589865
HDFS: Number of read operations=11
HDFS: Number of large read operations=0
HDFS: Number of write operations=3
Job Counters
Launched map tasks=2
Launched reduce tasks=1
Data-local map tasks=2
Total time spent by all maps in occupied slots (ms)=302200
Total time spent by all reduces in occupied slots (ms)=281168
Total time spent by all map tasks (ms)=37775
Total time spent by all reduce tasks (ms)=35146
Total vcore-milliseconds taken by all map tasks=37775
Total vcore-milliseconds taken by all reduce tasks=35146
Total megabyte-milliseconds taken by all map tasks=154726400
Total megabyte-milliseconds taken by all reduce tasks=143958016
Map-Reduce Framework
Map input records=2000002
Map output records=2000002
Map output bytes=431420770
Map output materialized bytes=437400273
Input split bytes=182
Combine input records=2000002
Combine output records=1999629
Reduce input groups=1999281
Reduce shuffle bytes=437400273
Reduce input records=1999629
Reduce output records=11995686
Spilled Records=3999258
Shuffled Maps =2
Failed Shuffles=0
Merged Map outputs=2
GC time elapsed (ms)=4894
CPU time spent (ms)=206900
智能电表芯片
Physical memory (bytes) snapshot=6744469504
Virtual memory (bytes) snapshot=16308625408
Total committed heap usage (bytes)=7036469248
ImportTsv
Bad Lines=0
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0

本文发布于:2024-09-22 09:53:14,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/134574.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   指定   列族   表中   需要   分隔符   参数   时候
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议