1.Introduction
Sqoop is a tool designed to transfer data between Hadoop and relational databases or mainframes. You can use Sqoop to import data from a relational database management system (RDBMS) such as MySQL or Oracle or a mainframe into the Hadoop Distributed File System (HDFS), transform the data in Hadoop MapReduce, and then export the data back into an RDBMS.
2.Sqoop数据数据转换工具
2.1.同步Mysql数据到Hive
3.数据同步:全量和增量
3.1.引入
数据如果保留多份,就会存在一致性问题,就需要同步,同步分为两大类:全量和增量
3.2概括
数据如果要保留副本,要么同时写(就是多写),或者进行复制:异步写(即从主数据拷贝到副本);同时写(多写),引出一个问题,写多少节点算成功(场景:分布式系统)?全部写成功才算成功,还是写大多数成功算成功,还是写指定几个节点算成功?异步写的话,如果采用异步复制,那么实时性需要考量的话,就需要采用性能优先的架构。
3.3.同步的方式
数据同步一般分为两种方式:全量和增量。
3.3.1 全量
全量:每天定时(避开业务高峰期)或者周期性全量把数据从一个地方拷贝到另外一个地方;
全量的话,可以采用直接全部覆盖(使用“新”数据覆盖“旧”数据);或者走更新逻辑(覆盖前判断下,如果新旧不一致,就更新);
这里面有一个隐藏的问题:如果采用异步写,主数据物理删除了,怎么直接通过全量数据同步?这就需要借助一些中间操作日志文件,或者其他手段,把这些“看不到”的数据记录起来。
3.3.2 增量
增量的基础是全量,就是你要使用某种方式先把全量数据拷贝过来,然后再采用增量方式同步更新。
增量:指抓取某个时刻(更新时间)或者检查点(checkpoint)以后的数据来同步,不是无规律的全量同步。这里引入一个关键性的前提:副本一端要记录或者知道(通过查询更新日志或者订阅更新)哪些更新了。
3.3.2.1.确定更新点
采用更新时间戳、有的采用checkpoint等来标识和记录更新点。
4.全量同步示例:
4.1.全量同步
import
--connect
${jdbcUrl}
--connection-param-file
jdbc_options.txt
--username
${jdbcUserName}
--password-file
/user/admin/etl/conf/passwd
--query
SELECT id, date AS date, m AS month, q AS quarter, y AS year FROM time_dimension WHERE $CONDITIONS
--boundary-query
select min(id), max(id) from time_dimension
--split-by
id
-m
4
--null-non-string
'0'
--fetch-size
100
--delete-target-dir
--target-dir
/etl/dzj/full_mysql_date_dim
--fields-terminated-by
'\"'
--hive-drop-import-delims
--hive-overwrite
--hive-import
--hive-table
dzj.test_date_dim
复制代码
增量同步
两种增量同步模式:append,lastmodified append适合于数据只有新增的情况,lastmodified适合于数据有更新的情况
job
--create
job_inc_syn_mysql_user_first_login_fact
--
import
--connect
${jdbcUrl}
--connection-param-file
jdbc_options.txt
--username
${jdbcUserName}
--password-file
/user/admin/etl/conf/passwd
--query
select user_first_login_record.user_id, date(user_first_login_record.first_login_date) as login_date,user_first_login_record.first_login_date as login_time from user_first_login_record where $CONDITIONS
--boundary-query
select min(user_first_login_record.first_login_date), max(user_first_login_record.first_login_date) from user_first_login_record
--split-by
user_first_login_record.first_login_date
-m
4
--null-non-string
'0'
--fetch-size
100
--target-dir
/user/hive/warehouse/dzj.db/user_first_login_fact
--fields-terminated-by
'\"'
--hive-drop-import-delims
--check-column
login_time
--incremental
lastmodified
--last-value
'2018-10-30 00:00:00'
--merge-key
id
复制代码
5.HUE创建job
6.HUE创建job
7. 在sqoop过程中要初步清洗事实表和纬度表
HDFS文件存储 服务器看不到,,bolck块。 Job Brower:执行任何一个日志 HQL HIV 本质HIVE转MapReduce() Job 日志 mapreduce执行成功没
视图:大的fact表创建视图 数据变化, 多一个字段少一个字段 视图不会根据fact表的改动而改动。
一个Model可以建多个cube. Hbase:打点数据 助诊因子
集群和时钟同步
安装mysql非必须用
角色:分配角色 HDFS:三个DataNode 根据NameNode拿到。
重启服务,不是重启机器
各个组建的库名:存放组建的配置信息
User 分布式读取 limit读取 1小时
数据仓库的存储 只要再跑一下就好
workflow job accept 公平调度 Hbase Hive存储要走HDFS HDFS权限
文件夹的位置/配置文件:密码 jdbc Hive文件 HDFS git 看log
Hue oozie规范 _1 _2全量 交换的build 老的干掉
当一个fact数据变更 以前的数据也修复 当一个cube 1 2
re 每次执行全量的时候, dis 晴空 全跑 每天需要全量 recovery -x 自动执行正在用的比如1 2 disable
定时器:每天什么时候跑,,正在等待调度,,一直处于Running状态。
Oozie设置:很多小workflow。也可以创建比较大的workfollow ,然后串小的workfollow。
并行:mapReduce的过程,所有都有分发的。 Oozie:底层计算引擎是mapReduce。