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

一、入库前数据准备

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

Oracle数据导入Hbase操作步骤的更多相关文章

  1. Oracle 数据导入导出操作 (转)

    Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢 ...

  2. oracle数据导入的常用命令

    oracle 中数据库完全导入导出:cmd命令行模式 oracle数据库cmdfile数据库服务器constraints Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.ex ...

  3. sqoop将oracle数据导入hdfs集群

    使用sqoop将oracle数据导入hdfs集群 集群环境: hadoop1.0.0 hbase0.92.1 zookeeper3.4.3 hive0.8.1 sqoop-1.4.1-incubati ...

  4. Oracle数据导入导出

    Oracle数据导入导出imp/exp 在oracle安装目录下有EXP.EXE与IMP.EXE这2个文件,他们分别被用来执行数据库的导入导出.所以Oracle数据导入导出imp/exp就相当与ora ...

  5. 使用MySQL Migration Toolkit快速将Oracle数据导入MySQL[转]

    使用MySQL Migration Toolkit快速将Oracle数据导入MySQL上来先说点废话本人最近在学习一些数据库方面的知识,之前接触过Oracle和MySQL,最近又很流行MongoDB非 ...

  6. Oracle数据导入导出imp/exp sp2-0734:未知的命令开头'imp...解决方法

    Oracle数据导入导出imp/exp sp2-0734:未知的命令开头'imp...解决方法   sp2-0734:未知的命令开头'imp 忽略了剩余行默认分类   www.2cto.com  应该 ...

  7. Oracle数据导入导出imp/exp(转)

    在oracle安装目录下有EXP.EXE与IMP.EXE这2个文件,他们分别被用来执行数据库的导入导出.所以Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 一.Oracle ...

  8. sqoop将mysql数据导入hbase、hive的常见异常处理

    原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10700700.html,否则将追究法律责任!!! 一.需求: 1.将以下这张表(test_ ...

  9. 使用sqoop将MySQL数据库中的数据导入Hbase

    使用sqoop将MySQL数据库中的数据导入Hbase 前提:安装好 sqoop.hbase. 下载jbdc驱动:mysql-connector-java-5.1.10.jar 将 mysql-con ...

随机推荐

  1. day_41_mysql

    学习目标 学习目标 01. 数据库的介绍 02. 数据库的类型 关系型数据库(RDBMS) 非关系型数据库(NoSQL) 02.1 关系型数据库核心元素 03. MySQL的基本介绍 04. 常用入门 ...

  2. Python实现简单的四则运算

    GitHub 项目地址 https://github.com/745421831/-/tree/master PSP PSP2.1 Personal Software Process Stages 预 ...

  3. 聊聊大学期间的我是怎样学习Linux系统的

    高考成绩并不是那么的理想,本科是个普通的二本院校,来到学校之后,整个人其实很迷茫,当时对大学的专业真的是一点都不了解,也不知道自己对哪方面感兴趣,最后选择的专业是电子方面的,其实当时选择专业的时候对电 ...

  4. 【转载】27.SpringBoot和SpringMVC的区别

    版权声明:本博客为记录本人JAVA自学之路而开,内容大多从网上学习与整理所得,若侵权请告知! https://blog.csdn.net/u014590757/article/details/7960 ...

  5. 部署你的CRM程序

    教你发布CRM   发布CRM你将使用以下软件 nginx uWSGI CentOS7 CRM项目文件 virtualenv supervisor WSGI.uWSGI python web服务器开发 ...

  6. Floyd判断环算法总结

    Floyd判断环算法 全名Floyd’s cycle detection Algorithm, 又叫龟兔赛跑算法(Floyd's Tortoise and Hare),常用于链表.数组转化成链表的题目 ...

  7. 实现对HashMap的value排序

    问题:如何对HashMap中的value值进行排序 关键点:1.取HashMap的Map.Entry,放入List2.利用Collections.sort(List, Comparator<? ...

  8. [SCOI2003]字符串折叠

    一道蛮好玩的区间DP...其实只要做好check...然后统计答案就好了...QAQ... 呆码: #include<iostream> #include<cstdio> #i ...

  9. Windows下Caffe实现图像分类

    前言:最近参加百度点石大赛,完成商家招牌的分类和检测,把实验过程简单记录下来,具体步骤如下. 环境配置:windows下的visual studio2013和caffe(cpu版本)环境搭建请看我另一 ...

  10. echarts折线图

    https://echarts.baidu.com/examples/#chart-type-bar