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

一、入库前数据准备

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. 上海MVP见面会

    很愉快,很有收获的一次见面!

  2. APP包打包签名步骤

    开发混合app上架应用市场,需要进行应用签名,但是申请签名如果没搞过,会特别麻烦,所以我自自己总结了一下申请的步骤,在此记录一下 1.首先需要下载安装java环境即jdk, 2.配置环境变量 假设JD ...

  3. springboot秒杀课程学习整理1-4

    1)商品模型设计 (应该是先设计商品的model,然后才是数据库表) 模型字段(id,title,price(double),stock(库存),description,sales,imgUrl) 创 ...

  4. Rhino学习教程——1.5

    图形面板 图形面板是Rhino为了方便用户操作设置的一个区域,默认提供了“属性”.“图层”.“说明”3个面板(我自定义过了,新增了一个“显示”功能 ). trip:如果要打开更多的图版,可以点击图形面 ...

  5. [NOIP2014D2]

    T1 Problem 洛谷 Solution 枚举那个点的位置,再O(n)扫一遍求出覆盖的公共场合的数量... 所以时间复杂度为O(128 * 128 * n) Code #include<cm ...

  6. gitignore不起作用

    .gitignore中已经标明忽略的文件目录下的文件,git push的时候还会出现在push的目录中,原因是因为在git忽略目录中,新建的文件在git中会有缓存,如果某些文件已经被纳入了版本管理中, ...

  7. 文件操作fopen

    这块所谓的"文件操作"就是把文件的内容读进程序,然后根据具体的格式进行解析,或者是显示,或者是修改. 也就是把一个文件加载到程序里面,然后对其进行修改. 文件操作就三步(固定的三步 ...

  8. Vue学习Day002

    内联处理器的操作 除了直接绑定到一个方法,也可以在内联JavaScript语句中调用方法 <div id="example-3"> <button v-on:cl ...

  9. Windows下Caffe实现图像分类

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

  10. EXCEL查找函数之VLOOKUP,LOOKUP,HLOOKUP

    VLOOKUP是纵向查询函数,VLOOKUP(lookup_value,table_array,col_index_num,range_lookup). 参数                      ...