6 |
7 |
8 |
9 | **Sink组:设置Sink组,同一个Sink组内有多个子Sink,不同Sink之间可以配置成负载均衡或故障转移**
10 |
11 | - 负载均衡(load_balance)
12 |
13 | ```shell
14 | a1.sinkgroups = g1
15 | # 组内的子Sink
16 | a1.sinkgroups.g1.sinks = k1 k2
17 | # 负载均衡
18 | a1.sinkgroups.g1.processor.type = load_balance
19 | # 负载均衡下,需设置此值为true,如果Sink失败,则将该Sink放入黑名单
20 | a1.sinkgroups.g1.processor.backoff = true
21 | # 失败Sink黑名单驻留时间 指数级增加 单位:ms
22 | a1.sinkgroups.g1.processor.selector.maxTimeOut = 30000
23 | # 负载均衡算法 随机 random、轮询 round_robin、或自定义
24 | a1.sinkgroups.g1.processor.selector = random
25 | ```
26 |
27 |
28 |
29 | - 故障转移
30 |
31 | ```shell
32 | a1.sinkgroups = g1
33 | # 组内的子Sink
34 | a1.sinkgroups.g1.sinks = k1 k2
35 | # 故障转移
36 | a1.sinkgroups.g1.processor.type = failover
37 | # 指定Sink组内各Sink的优先级,数值越大优先级越高
38 | a1.sinkgroups.g1.processor.priority.k1 = 5
39 | a1.sinkgroups.g1.processor.priority.k1 = 10
40 | # 等待失败的Sink恢复的最大时间,默认 30000ms
41 | a1.sinkgroups.g1.processor.maxpenalty = 5000
42 | ```
43 |
44 |
45 |
46 | - 分层架构
47 |
48 | - 日志采集层
49 | - 日志聚合层
50 |
51 | - 监控重启
52 |
53 | - Shell 监控脚本,监控某个进程是否存在,如果不存在,则调用重启脚本
54 | - 开启JMX,接入监控框架
55 |
56 | - 动态扩缩容
57 |
58 | - sink需要修改负载均衡配置,滚回重启
59 |
60 | - Kafka Channel简化架构
61 | - Source1(日志收集层) -> Kafka Channel -> sink2(日志聚合层)
62 | - 问题:Kafka的重复消费语义问题
63 |
64 |
65 |
66 | - 端点续传
67 | - Taildir Source:参考flume01.md文档
68 |
69 |
70 |
71 | - log4j滚动生产文件问题
72 | - 滚动生成文件时,会将文件重命名为加上日期的日志文件,并将原文件置空,会导致flume重复消费问题
73 | - 解决
74 | - 修改Taildir Source源码,打包编译,上传到flume安装目录的plugin.d目录下,以插件的方式加入flume
75 | - 使用:Custom Source 自定义Source的方式配置flume
--------------------------------------------------------------------------------
/hbase/HBase优化.md:
--------------------------------------------------------------------------------
1 | ## HBase优化
2 |
3 | 列簇数量: 建议2个或2个一下
4 |
5 | 索引表数量:建议不超过10个
6 |
7 | ```
8 | phoenix.index.maxIndexesPerTable=10
9 | ```
10 |
11 | 
12 |
13 | ```
14 | 问:能够问一下,如果hbase 表rowkey 前缀做了散列,而查询的时候我只有后缀,这该怎么查询呢?
15 | 答:正则过滤器
16 | ```
17 |
18 | ```
19 | HDFS 短路读
20 | RowKey优化,添加时间信息
21 | HBase cache
22 | hfile文件数量是否太多了?compact减少
23 | 内存太小了吧,32g以上
24 | ```
25 |
26 |
27 | ## Phoenix优化
28 |
29 | jdbc:phoenix:thin:url=http://localhost:8765?doAs=alice
30 |
31 | 问题:
32 |
33 | 1. 字段映射
34 |
35 | 2. 索引 异步 ASYNC
36 | Example: create index if not exists event_object_id_idx_b on trans.event (object_id) ASYNC UPDATE_CACHE_FREQUENCY=60000;
37 | Create local indexes for write-heavy use cases.
38 | 索引表和主表放在同一RegionServer上
39 | 当查询字段不是索引字段时,索引表也会正常使用
40 | Create global indexes for read-heavy use cases.
41 | To save read-time overhead, consider creating covered indexes. 节省时间开销
42 | 索引表为全局表,各个节点上都有
43 | 当查询字段不是索引字段时,索引表将失效,导致全局扫描主表
44 |
45 |
46 | Use covered indexes to convert table scans into efficient point lookups or range queries over the index table instead of the primary table: CREATE INDEX index ON table( … )INCLUDE( … )
47 |
48 |
49 |
50 | 3. 数据压缩
51 |
52 | 4. 对象序列化
53 |
54 | 5. 删除
55 |
56 | When deleting a large data set, turn on autoCommit before issuing the DELETE query
57 |
58 | 6. 主键
59 |
60 | If the primary key is monotonically increasing, create salt buckets:加盐可防止数据写入热点问题
61 |
62 |
63 |
64 | 映射:HBase中的表
65 | 如果需要在phoenix中操作直接在hbase中创建的表,则需要在phoenix中进行表的映射。映射方式有两种:视图映射和表映射。
66 |
67 |
68 |
69 | #### 性能测试:
70 |
71 | https://www.cnblogs.com/ballwql/p/8371234.html
72 |
73 |
--------------------------------------------------------------------------------
/flink/flink实战(2).md:
--------------------------------------------------------------------------------
1 | ## Flink实战(2)
2 |
3 | > 算子
4 |
5 | - map
6 |
7 | - flatMap
8 |
9 | - filter
10 |
11 | - keyBy:
12 |
13 | - POJO对象或者Tuple2以上对象
14 | - 容易出现数据倾斜
15 | - key类型限制:
16 | - 不能是没有覆盖hashcode方法的POJO
17 | - 不能是数组
18 |
19 | - reduce
20 |
21 | - fold !! 已废弃
22 |
23 | - aggregations
24 |
25 | - sum/min/minBy/max/maxBy reduce 特例
26 |
27 | - min(返回指定字段的最大值,其他不变)
28 | - minBy(返回整个元素)
29 |
30 | - Interval join
31 |
32 | - KeyedStream,KeyedStream -> DataStream
33 |
34 | - 在给定周期内,按照指定的key对两个KeyedStream进行join操作
35 |
36 | - 把一定时间范围内的相关的分组数组拉成一个宽表
37 |
38 | ```java
39 | keyedStream1.intervalJoin(keyedStream2)
40 | .between(Time.milliseconds(-2), Time.milliseconds(2))
41 | .upperBoundExclus()
42 | .lowerBoundExclus()
43 | .process(new ProcessJoinFunction out) {
44 | out.collect(new C());
45 | }
46 | ```
47 |
48 | - connect & union
49 |
50 | - connect后生成ConnectedStreams
51 | - 对两个流的数据应用不同处理方式,并且双流之间可以共享状态(比如计数)
52 | - 这在第一个流的输入会影响第二个流时,会非常有用
53 | - 只能连接两个流
54 | - CoMap
55 | - CoFlatMap 类似map和flatMap,只不过在ConnectedStream上用
56 | - 一起运算,节约资源???
57 | - union合并多个流,新流会包含所有流的数据
58 | - DataStream* -> DataStream
59 | - 可合并多个流
60 | - !! connect连接的两个流类型可以不一致,而union连接的流的类型必须一致
61 |
62 | - split & select !! 已废弃
63 |
64 | - 先拆,再选
65 | - split:
66 | - DataStream -> SplitStream
67 | - 按照指定标准将DataStream拆分成多个流
68 | - select:
69 | - SplitStream -> DataStream
70 | - 搭配split使用,从SplitStream中选择一个或多个流
71 |
72 | - project
73 |
74 | - 从Tuple中选择属性子集 类似 mongodb聚合的project操作
75 | - 从Tuple中选择属性子集 类似 mongodb聚合的project操作
76 | - 只支持Tuple类型的event数据
77 | - 仅限JavaAPI
78 | - intput.project(0,2): 只要Tuple的 第一个和第三个元素
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/架构设计.md:
--------------------------------------------------------------------------------
1 | ## 架构设计与讨论
2 |
3 | ### 爬虫数据存储解析逻辑
4 |
5 | - 爬虫数据
6 | - 保存成zip包,备份(清理策略)
7 | - 调解析接口(post)
8 | - 解析
9 | - 跑爬虫数据解析任务(接收post参数解析)
10 | - 解析重跑逻辑(数据源?zip包)
11 | - 原始数据
12 | - 报告
13 | - 接收中控跑报告任务
14 | - 拉取原始数据处理
15 | - 处理完成回调中控
16 |
17 |
18 |
19 | ### [Hive分析](https://cwiki.apache.org/confluence/display/Hive/LanguageManual)
20 |
21 | - 作为数据仓库
22 | - 提供数据存储:
23 | - load数据从文件、HDFS
24 | - 查询结果插入Hive或文件系统
25 | - 利用SQL插入值到Hive表
26 | - 批处理不可变的大数据集
27 | - 不支持行级更新删除操作
28 | - 现在应该可以支持,但不推荐使用:需要Hive Transactions支持[ACID](https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions)
29 | - 支持各种表关联操作
30 | - 作为查询引擎(OLAP)
31 |
32 | ```sql
33 | // Insert value Demo
34 | CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3, 2))
35 | CLUSTERED BY (age) INTO 2 BUCKETS STORED AS ORC;
36 |
37 | INSERT INTO TABLE students
38 | VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
39 |
40 | // 根据时间分区(探索原理)
41 | CREATE TABLE pageviews (userid VARCHAR(64), link STRING, came_from STRING)
42 | PARTITIONED BY (datestamp STRING) CLUSTERED BY (userid) INTO 256 BUCKETS STORED AS ORC;
43 |
44 | INSERT INTO TABLE pageviews PARTITION (datestamp = '2014-09-23')
45 | VALUES ('jsmith', 'mail.com', 'sports.com'), ('jdoe', 'mail.com', null);
46 |
47 | INSERT INTO TABLE pageviews PARTITION (datestamp)
48 | VALUES ('tjohnson', 'sports.com', 'finance.com', '2014-09-23'), ('tlee', 'finance.com', null, '2014-09-21');
49 |
50 | INSERT INTO TABLE pageviews
51 | VALUES ('tjohnson', 'sports.com', 'finance.com', '2014-09-23'), ('tlee', 'finance.com', null, '2014-09-21');
52 | ```
53 |
54 |
55 |
56 | ### HBase
57 |
58 | 支持十亿级别的大数据实时高性能读写(基于Key-Value)
59 |
60 | 支持上亿列、上百万行的
61 |
62 | 保证原子性
63 |
64 | LSM树:存储算法;利用Memstore排序数据后,再存入HFile(尽量保证数据是顺序存储到磁盘);是对B+tree的改进
65 |
66 | 压缩元数据(rowkey、column family、cq):压缩与解压也是消耗性能的,根据数据的使用需求选择(读写场景)
67 |
68 |
69 |
70 | > 不支持表关联
71 | >
72 | > 曲线救国:
73 | >
74 | > 1. 在存入HBase前,进行关联
75 | > 2. 在MapReduce中进行关联
76 |
77 |
78 |
79 | > 不适用场景:
80 | >
81 | > - 不适合数据分析场景
82 | > - 单表数据量不超过千万不建议用
83 |
84 |
85 |
86 | > 使用场景:
87 | >
88 | > - 单表数据量超千万,而且并发高
89 | > - 数据分析需求弱,或不需要那么灵活或实时
90 |
91 |
92 |
93 |
94 |
95 | ### 搜索引擎
96 |
97 | 需要反向索引的场景
98 |
99 |
100 |
101 | ### 爬虫数据存储讨论
102 |
103 | > * Hive
104 | >
105 | > 只存储数据:Insert语法
106 | >
107 | > 研究Hive的分区Partition实现方式,根据时间分区,后期历史数据可根据分区删除
108 |
109 |
110 |
111 | ### 报告数据存储
112 |
113 | > - HBase
114 |
115 |
116 |
117 | ### 日志数据存储讨论
118 |
119 | ES
120 |
121 | HBase
122 |
123 |
--------------------------------------------------------------------------------
/hive/Hive权限.md:
--------------------------------------------------------------------------------
1 | ## Hive权限
2 |
3 | ```
4 | sudo -u hdfs hdfs dfs -mkdir /user/admin
5 | sudo -u hdfs hdfs dfs -chown admin:hadoop /user/admin
6 | ```
7 |
8 |
9 |
10 | ```sql
11 | -- TODO 尝试使用 hive 用户登录shell
12 | sudo -u hive hive
13 | load data local inpath '/xxx' into table xxx;
14 | ```
15 |
16 |
17 |
18 | https://blog.csdn.net/yrg5101/article/details/88837468
19 |
20 | https://www.jianshu.com/p/dcef793cf395
21 |
22 |
23 |
24 | ##### hive.server2.enable.doAs
25 |
26 | ```
27 | 默认情况下,HiveServer2以提交查询的用户身份执行查询处理。但是,如果以下参数设置为false,则查询将以运行hiveserver2进程的用户身份运行。
28 | hive.server2.enable.doAs - 模拟连接的用户,默认为true。
29 | hive.server2.enable.doAs设置成false则,yarn作业获取到的hiveserver2用户都为hive用户。
30 | 设置成true则为实际的用户名
31 |
32 | 要防止在不安全模式下发生内存泄漏,请通过将以下参数设置为true来禁用文件系统缓存(请参阅 HIVE-4501):
33 | fs.hdfs.impl.disable.cache - 禁用HDFS文件系统缓存,默认为false。
34 | fs.file.impl.disable.cache - 禁用本地文件系统缓存,默认为false。
35 | ```
36 |
37 |
38 |
39 | https://blog.csdn.net/zqqnancy/article/details/51852794
40 |
41 | ```xml
42 |