• Oracle数据导入Hbase操作步骤


    ——本文非本人原创,为公司同事整理,发布至此以便查阅

    一、入库前数据准备

    1、入hbase详细要求及rowkey生成规则,参考文档“_入HBase库要求 20190104.docx”。

    2、根据标准库中的数据,生成带有rowkey的视图。

    参照159数据库hubei_std用户下的p_getRowKey1存储过程,生成该用户下 所有表带有rowkey的视图。

    注:运行存储过程时,需传入医院编码和采集次数。

    3、在进行正式入库前,先以医院编码在hbase中建立命名空间(hbase shell  进   入命令界面):

    create_namespace 'HB1'

    4、在该命名空间下建立所有标准表的表名,如:

    列族名称参照“入hbase统计表.xlsx”

    create 'HB1:inp_orders’, 'f', SPLITS=>['e','i','m','q','u']

    HB1:命名空间

    Inp_orders:标准表名

    f:列族

    SPLITS:分区

    注:建表时,与标准表名一致。

    5、操作完以上步骤以后,开始进行入库操作。

    二、入库开始

    1、需先将oracle的ojdbc6.jar放入到该目录:

    /opt/cloudera/parcels/CDH-5.12.0-1.cdh5.12.0.p0.29/lib/sqoop/lib

    2、sqoop连接到oracle数据库:

    sqoop list-tables --connect jdbc:oracle:thin:@172.16.0.159:1521:orcl --username hubei_std --password hubei_std            若连接成功,则显示hubei_std下的表。

    3、将之前生成的视图的数据,导入hbase

    sqoop import --append --connect jdbc:oracle:thin:@172.16.0.159:1521:orcl           --username hubei_std --password hubei_std -m 1 --table INPBILLDETAIL           --columns ID,NAME,AGE --hbase-create-table --hbase-table               HB1:inp_bill_detail --hbase-row-key ROWKEY --column-family f

    -m 1:指定1个map进行入库操作,若大于1,则需在该语句后加上--split-by        column(column是指定oracle的源表按该字段进行分割,如指定列为      PATIENT_ID,m指定为2的话,则将PATIENT_ID的值均分2份进行入库)。

    --append:如有该参数,则可以不指定--columns 参数。

    --hbase-create-table:如已在hbase中建表,则可以不指定该参数。

    --hbase-row-key:指定源表中,哪一列为rowkey

    注:--hbase-table 参数,需在表名前加上命名空间

    三、入库完成核对

    1、核对入库条数是否正确:

    hbase org.apache.hadoop.hbase.mapreduce.RowCounter ‘HB1:

    pat_visit_master’

    2、查看数据情况(两条记录):

    get_table(‘HB1:pat_visit_master’).scan LIMIT=>2

    3、进入CDM管理界面,在hue中查看数据情况:

    Hue-->Web UI-->主菜单-->HBase-->进入对应的表看数据

    4、入Hbase完成后大小对比:

    湖北:

    oracle:28.84G

    Hbase:177.11G

    查询方法:

    Oracle:select sum(bytes)/1073741824 from user_segments

    Hbase:hadoop fs -ls /

    hadoop fs -ls /hbase

    hadoop fs -ls /hbase/data

    hadoop fs -ls /hbase/data/HB1

    hadoop fs -du -h /hbase/data/HB1/

    5、将入完hbase的数据拷贝到szyl命名空间下:

    su hdfs

    hbase  org.apache.hadoop.hbase.mapreduce.CopyTable--new.name=

    szyl:inp_orders HB1:inp_orders

    四、入库速度

    1、以湖北省肿瘤inp_orders表为实验表,该表31097227条记录:

    1、-m 1  用时:1973秒,速度15761.39条/秒

    2、-m 2  用时:5006秒,速度6211.99条/秒

    以湖北省肿瘤inp_bill_detail表为实验表,该表113271245条记录:

    1、-m 1  用时:8926秒,速度12690.03条/秒

    2、-m 3  用时:9012秒,速度12568.93条/秒

    inp_bill_detail:113271245条

    inp_orders:31097227 

    pat_visit_master:273300 

    inp_settle_master:283025

    2、开封市肿瘤数据入hbase:

    exam_master:41630

    exam_report:24336

    his_cells:3833

    his_organization:4208

    inp_bill_detail:14385379

    inp_orders:6024317

    inp_settle_master:41830

    lab_result:764482

    五、遇到问题

    1、在导入数据时,设定-m为3,则只有一个map执行,导入的数据量只有总数 据的三分之一,另外两个map不执行:

    sqoop import --append --connect jdbc:oracle:thin:@172.16.0.159:1521:orcl           --username hubei_std --password hubei_std -m 3 --table INPBILLDETAIL        --hbase-table      HB1:inp_bill_detail  --hbase-row-key        ROWKEY      --column-family f --split-by PATIENT_ID

    在指定--split-by参数时,不能指定虚列如:rownum 建议指定主键或唯一键

    2、在创建表时,防止写成以下语句:

    create ‘HB1:pat_visit_master’,’p’,SPLIT=[‘e’,’i’,’m’,q’,’u’]

    create ‘HB1:pat_visit_master’,’p’,SPLITS=[‘e’,’i’,’m’,’q’,’u’]

    以上两种写法,会将分区当成列族建在表中。

    六、常用命令

    1、删除命名空间:

    drop_namespace ‘HB1’

    2、查看命名空间:

    describe_namespace ‘HB1’

    3、列出所有命名空间:

    list_namespace

    4、查看命名空间下的所有表:

    list_namespace_tables ‘HB1’

    5、删除表:

    disable ‘HB1:inp_orders’

    drop ‘HB1:inp_orders’

    6、删除表多的所有记录:

    truncate ‘HB1:inp_orders’

    7、查看表结构:

    desc ‘HB1:inp_orders’

    8、查询表数据:

    scan ‘HB1:inp_orders’

    9、查询现在执行的job:

    hadoop job -list

  • 相关阅读:
    MySQL主库异常,从库手动切换为主库方案
    快速搭建应用服务日志收集系统(Filebeat + ElasticSearch + kibana)
    CentOS7设置DNS服务器
    nginx/iptables动态IP黑白名单实现方案
    Python批量复制和重命名文件
    centos 7 配置php运行环境 (新)
    配置Nginx和php-fpm用Sock套接字连接时,找不到php-fpm.sock的原因
    php-fpm nginx 9000端口
    nginx与php-fpm通信的两种方式
    centos 7.2 常用命令useradd的使用
  • 原文地址:https://www.cnblogs.com/ohmyuan/p/10785018.html
Copyright © 2020-2023  润新知