- 一.数据收集
- 1.关系型数据收集Sqoop
- 2.非关系型数据收集Flume
- 3.消息队列Kafka
- 二.数据存储
- 三.协调与资源管理
- 四.计算引擎
- 五.数据分析
- 1.Hive
- 2.Spark SQL
- sqoop:全量收集。
sqoop2和sqoop1的比较,就是将以前的CLI变为Server,然后再实现一个轻量级的CLI,可通过命令行或者HTTP来访问Server。就是把以前的CLI部署到了云端,现在的CLI只需要发送命令就行了。
sqoop提交的就是一个只有map的MR程序。
从mysql导入到hive,数据顺序乱了,因为并行度大于1,设置一个map处理就好了。
- canal:增量收集。
通过解析mysql的binlog,来得到增量的数据。
还没解决的问题:
1.sqoop的容错性,是和MR有关的,后面再仔细看下MR。
2.解析mysql的binlog,怎么就得到了增量的数据呢?解析后的不是只是操作记录么。
通过事务来确保event传输的可靠性。
通过多个sink来确保容错性。
a1.sinkgroups = g1 a1.sinkgroups.g1.sinks = k1 k2 a1.sinkgroups.g1.processor.type = failover a1.sinkgroups.g1.processor.priority.k1 = 5 a1.sinkgroups.g1.processor.priority.k2 = 10
通过多个sink来进行负载均衡。
a1.sinkgroups = g1 a1.sinkgroups.g1.sinks = k1 k2 a1.sinkgroups.g1.processor.type = load_balance a1.sinkgroups.g1.processor.backoff = true a1.sinkgroups.g1.processor.selector = random
Taildir Source:结果会显示偏移量,用来记录消费到的位子,就算Flume挂了,依然有数据进入文件,Flume重启后依然会从挂了的偏移量开始消费。不会丢失数据。
还没解决的问题:
1.Flume的put和take两个事务有点模糊,还未真正搞明白,需要看源码。
2.Flume客户端SDK自定义数据源,通过Avro和Thrift这些RPC调用。
Hive-cli与Beeline的区别:
- CliDriver是SQL本地直接编译,然后访问metaStore,提交作业,是重客户端。
- BeeLine是把SQL提交给HiveServer2,由HiveServer2编译,然后访问metaStore,提交作业,是轻客户端。
- beeline有权限控制而hivecli没有,因为hivecli读取元数据绕过了HiveServer2直接从metaserver访问元数据,而beeline通过HiveServer2的管控,实现其多用户的权限控制。
以前cli可直接访问metaStore,但是JDBC需要经过thrift server。
现在BeeLine和JDBC都需要经过hiveserver2。
hiveserver2 和beeline_Hive-cli与Beeline的区别
hive的执行流程
HiveServer2 架构源码详解
还没解决的问题:
1.thrift还需要研究下。



