IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> HBase数据导入——使用 ImportTsv 将数据导入hbase -> 正文阅读

[大数据]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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-05 13:49:03  更:2021-11-05 13:49:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:02:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码