• 欢迎光临~

sqoop总结

开发技术 开发技术 2022-01-27 154次浏览

1.数仓模型

1.1建模方法

ER模型:

​ 常用于OLTP数据库建模

维度模型:

​ 面向分析场景而生;对称易扩展

1.2星型/雪花

星型模型:

​ 一个事实表+多个维度表;事实表和维度表通过主键外键相连;

​ 数据冗余;查询逻辑简单,查询性能高

雪花模型:

​ 部分维度表没有直接连到事实表;

​ 去冗余;查询逻辑难,查询性能低;

星座模型:

​ 多个事实表+多个维度表

总结:

数仓多使用星型模型构建底层数据hive表, 通过冗余来建好查询次数从而提高查询效率; 对olap分析引擎友好.

雪花模型在关系型数据库mysql,oracle中较为常见,特别是电商的数据库表.

2.sqoop

导入导出:

​ 关系数据库(mysql,oracle)

​ Hadoop的hdfs,hive,hbase等

list

sqoop list-databases 
--connect jdbc:mysql://ip:3306/ 
--username 用户名 
--password 密码 

sqoop list-tables 
--connect jdbc:mysql://ip:3306/库名 
--username 用户名 
--password 密码

import

从关系型数据库导入hdfs(包括hive,hbase), 如果导入的是hive,没有表它会自动创建

导入hdfs

##mysql导入hdfs

sqoop import 
--connect jdbc:mysql://ip:3360/库名 
--username root 
--password root@123 
--target-dir hdfs://summer/apps/hive/warehouse/a.db/user_label  ##指定hdfs表目录 
--fields-terminated-by '^'   ##设定导入数据后每个字段分隔符,默认是分号(;)分隔
--lines-terminated-by 'n'   ##设定导入数据后每行的分隔符
--m 1    #并发的map数量为1,默认值为4
--null-string '\N'    ##导入字段为空时,用指定字符进行替换

导入hive表

##导入hive表
##需要增加声明 --hive-import

sqoop import 
--connect jdbc:mysql://ip:3306/库名
--username root 
--password root@123 
--table test_user_label
--hive-import    ##导入hive表声明
--m 1 

增量导入hive表

①append模式,指定一个递增的列

--incremental append  --check-column num_id --last-value 0 
##增量导入append模式: 
##必须要有incremental,check-column,last-value
##而且append不能与--hive-等参数同时使用

sqoop import 
--connect jdbc:mysql://ip:3306/库名 
--username root 
--password root@123 
--table test_user_table 
--target-dir hdfs://summer/apps/hive/warehouse/a.db/user_label 
--fields-terminated-by '^'  
--incremental append 
--check-column id 
--last-value 1208

②lastmodified模式, 根据时间戳

--incremental lastmodified --check-column created --last-value '2018-02-01 11:0:00' 
##只导入create字段比'2018-02-01 11:0:00'更大的数据
##增量导入lastmodified模式: 
##lastmodified模式必须指定--append(追加)还是要--merge-key(合并)

sqoop import 
--connect jdbc:mysql://ip:3306/库名 
--username root 
--password root@123 
--table test_user_table 
--target-dir hdfs://summer/apps/hive/warehouse/a.db/user_label 
--fields-terminated-by '^'  
--incremental lastmodified 
--check-column last_modified 
--last-value "2017-09-28 22:20:38" 
--append     ##必须指定一个:append或merge-key

export

从hdfs(hive和hbase)导入到关系型数据库

sqoop export 
--connect jdbc:mysql://ip:3306/库名 
--username root 
--password root@123 
--table test_user_table 
--export-dir /user/news 
--input-fields-terminated-by "t" 
--m 1

codegen

将关系型数据库中映射为一个java类,该类中有各列对应的各个字段

sqoop codegen 
--connect jdbc:mysql://ip:3306/库名 
--username root 
--password root@123 
--table user_test_table 
--bindir /home/test 
--class-name HelloSummer 

create-hive-table

生成与关系数据库结构对应的hive表结构

sqoop create-hive-table     
--connect jdbc:mysql://ip:3306/库名 
--username root 
--password root@123 
--table user_test_table      # 关系数据库表名
--hive-table hive_user_table  # 要创建的hive表名
参数 含义
--hive-home Hive的安装目录,可以通过该参数覆盖掉默认的Hive目录
--hive-overwrite 覆盖掉在Hive表中已经存在的数据
--create-hive-table 默认是false,如果目标表已经存在了,那么创建任务会失败
--hive-table 要创建的hive表
--table 关系数据库的表名

eval

快速运行下sql将结果显示在控制台

sqoop eval 
--connect jdbc:mysql://ip:3306/库名 
--username root 
--password root@123 
--query "select * from user limit 2"   # query后为查询的sql语句

import-all-tables

​ 将RDBMS中所有表导入hdfs,每个表对应一个hdfs目录

sqoop import-all-tables 
--connect jdbc:mysql://ip:3306/库名
--username root 
--password root@123 
--warehouse /all_tables

job

生成一个sqoop任务,不会立即执行,需要手动执行

##生成一个job

sqoop job 
--create firstTestJob --import-all-tables 
--connect jdbc:mysql://ip:3306/库名 
--username root 
--password root@123 

##查看所有job
sqoop job 
--list


##执行一个job
sqoop job 
--exec firstTestJob             #exec后是要执行的job名

merge

将hdfs中不同目录下面的数据合并在一起放入指定目录中

sqoop merge 
--new-data /test/new 
--onto /test/old 
--target-dir /test/meged 
--jar-file /home/user/myUser.jar 
--class-name myUser 
--merge-key id

metastore

记录sqoop job的元数据信息,不启动则job元数据的存储目录为~/.sqoop,可在sqoop-site.xml中修改

##启动sqoop的metastore服务
sqoop metastore


## --shutdown 关闭metastore
程序员灯塔
转载请注明原文链接:sqoop总结
喜欢 (0)
违法和不良信息举报电话:022-22558618 举报邮箱:dljd@tidljd.com