HBase数据导入——使用 ImportTsv 将数据导入hbase


使用 ImportTsv 将数据导入hbase

1.测试数据生成

使用shell 生成简易 csv文件

      int=1
      while (($int <= 18)); do
			echo ${int}','${int} >> int.csv
        let "int++"
      done

生成的数据
在这里插入图片描述

使用zd生成测试数据的csv文件 (仅用于生成测试数据,可跳过此步骤)

https://www.zendata.cn/在这里插入图片描述

使用zd 执行

nohup ./zd -d do_test_10w.yaml -n 20000000 -o output\out_do_2000w.csv &

在这里插入图片描述

zd的配置文件

title: 数据开放测试数据-2000w
desc: 数据开放测试数据-2000w


author: qinon
version: 1.0

fields:
  - field: user_name          
    fields:         
      - field: part1
        from: name.cn.family.v1
        select: name
        where: "double='false'"
        postfix:
      - field: part2
        from: name.cn.given.v1
        where: "double='true'"
        select: name


  - field: user_id                 
    range: 1-100000000     
    prefix: "id_"                          
    postfix: ""                       
    divider: ","


              

    
  - field: client_uuid
  
    # from: uuid.v1.yaml
    # use: length32_random_no_separator
    
    mode: r
    fields:
      - field: part1
        from: uuid.prefix.yaml
        use: uuid_prefix_time
      - field: part2
        from: uuid.prefix.yaml
        use: uuid_prefix_info1
      - field: part3
        from: uuid.prefix.yaml
        use: uuid_prefix_info2
      - field: part4
        range: 0-9999999999999999
        format: "%016d"   

  - field: msisdn
    fields: 
      - field: field2.1
        range: 1
      - field: field2.2
        range: 3,5,7        
      - field: field2.3
        range: 1-999:R
        format: "%03d"        
      - field: field2.4
        range: 1-999:R
        format: "%03d"
      - field: field2.5
        range: 1-999:R
        format: "%03d"
                       
  - field: sum_month  
    mode: r
    fields: 
      - field: field2.1
        range: 2020-2021
      - field: field2.2
        range: 1-10
        format: "%02d"        
                    
  - field: user_email                 
    fields:
      - field: letters
        from: name.letters.v1.yaml
        use: letters
        postfix: "@"
      - field: esp_domain
        from: domain.esp.v1.yaml
        use: esp          
        
  - field: city                 
    from: address.cn.v1.china           # 从data/address/v1.xlsx文件中读取名为china的工作簿。
    select: city                        # 查询city字段。
    where: state like '%福建%'           # 条件是省份包含山东。
    rand: true                          # 随机取数据
    
  - field: province                 
    from: address.cn.v1.china           # 从data/address/v1.xlsx文件中读取名为china的工作簿。
    select: state                        # 查询city字段。
    where: state like '%福建%'           # 条件是省份包含山东。               
    
  - field: user_status                 
    range: 1-9:R     
    prefix: ""                          
    postfix: ""                       
    divider: ","       

    
  - field: data_part                 
    value: " $user_id % 20"               
    divider: ","   

生成的数据

第一列将被默认为 rowkey,从第二列开始映射为columnFamily:column,需在mapreduce时指定映射关系。列数对不上时,将导致导入失败
在这里插入图片描述

2.将csv文件传到目标主机(在同机器操作的跳过此步骤)

scp 当前主机的源文件路径 目标主机用户名@ip:目标路径
随后输入密码开始传输。
未开启认证的:scp 当前主机的源文件路径 ip:目标路径

3.将文件上传至HDFS,并修改相应的读写权限

hdfs dfs -ls /

hdfs dfs -put /home/udapdev/out_do_10w.csv /dotest

-put 源 目标路径

改文件权限

hdfs dfs  -chmod a+x /dotest/out_do_10w.csv

4.使用ImportTsv 将数据导入hbase

语法

hbase [] [分隔符] [行键,列族] [] [导入文件]

参数

类 org.apache.hadoop.hbase.mapreduce.ImportTsv
分隔符 ‘-Dimporttsv.separator=,’
行键,列簇 ‘-Dimporttsv.columns=HBASE_ROW_KEY,family:user_name’
csv 文件使用 【,】 分割,第一列默认为rowkey,从第二列开始指定。格式为 列簇:列名,csv文件中的列数要与 此处 rowkey、列簇:列名 的数据量对应。否则会导入失败。
表名: 非default 的要写明 namespace dotest:do_test_2000w
导入文件的路径为文件放置于hdfs上 的路径。

执行导入

./hbase org.apache.hadoop.hbase.mapreduce.ImportTsv '-Dimporttsv.columns=HBASE_ROW_KEY,family:user_id,family:client_uuid,family:msisdn,family:sum_month,family:user_email,family:city,family:province,family:user_status,family:data_part' '-Dimporttsv.separator=,' -Dimporttsv.skip.bad.lines=false  dotest:do_test_10w /dotest/out_do_10w.csv

在这里插入图片描述
可看Map input records的数据量与导入的记录数是否一致,Bad Lines =0 为全部记录导入成功。
如出现 Bad Lines =记录数,大概是列数对不上,导入失败,可去检查 columns映射是否多写、漏写

'-Dimporttsv.columns=HBASE_ROW_KEY,family:user_id,family:client_uuid,family:msisdn,family:sum_month,family:user_email,family:city,family:province,family:user_status,family:data_part'

参考资料:
https://blog.csdn.net/gdkyxy2013/article/details/84300090

https://blog.csdn.net/weixin_33739523/article/details/92537856

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值