Skip to content

Commit

Permalink
更换图片源
Browse files Browse the repository at this point in the history
  • Loading branch information
heibaiying committed May 25, 2020
1 parent 0d6f0c8 commit 7bcf53a
Show file tree
Hide file tree
Showing 85 changed files with 391 additions and 391 deletions.
28 changes: 14 additions & 14 deletions README.md
Expand Up @@ -2,7 +2,7 @@



<div align="center"> <img width="414px" src="pictures/bigdata-notes-icon.png"/> </div>
<div align="center"> <img width="414px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/bigdata-notes-icon.png"/> </div>
<br/>

**大数据入门指南**
Expand All @@ -11,18 +11,18 @@

<table>
<tr>
<th><img width="50px" src="pictures/hadoop.jpg"></th>
<th><img width="50px" src="pictures/hive.jpg"></th>
<th><img width="50px" src="pictures/spark.jpg"></th>
<th><img width="50px" src="pictures/storm.png"></th>
<th><img width="50px" src="pictures/flink.png"></th>
<th><img width="50px" src="pictures/hbase.png"></th>
<th><img width="50px" src="pictures/kafka.png"></th>
<th><img width="50px" src="pictures/zookeeper.jpg"></th>
<th><img width="50px" src="pictures/flume.png"></th>
<th><img width="50px" src="pictures/sqoop.png"></th>
<th><img width="50px" src="pictures/azkaban.png"></th>
<th><img width="50px" src="pictures/scala.jpg"></th>
<th><img width="50px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/hadoop.jpg"></th>
<th><img width="50px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/hive.jpg"></th>
<th><img width="50px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/spark.jpg"></th>
<th><img width="50px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/storm.png"></th>
<th><img width="50px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flink.png"></th>
<th><img width="50px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/hbase.png"></th>
<th><img width="50px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/kafka.png"></th>
<th><img width="50px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/zookeeper.jpg"></th>
<th><img width="50px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flume.png"></th>
<th><img width="50px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/sqoop.png"></th>
<th><img width="50px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban.png"></th>
<th><img width="50px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/scala.jpg"></th>
</tr>
<tr>
<td align="center"><a href="#一hadoop">Hadoop</a></td>
Expand Down Expand Up @@ -207,7 +207,7 @@

<div align="center">
<a href = "https://blog.csdn.net/m0_37809146">
<img width="200px" src="pictures/blog-logo.png"/>
<img width="200px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/blog-logo.png"/>
</a>
</div>
<div align="center"> <a href = "https://blog.csdn.net/m0_37809146"> 欢迎关注我的博客:https://blog.csdn.net/m0_37809146</a> </div>
36 changes: 18 additions & 18 deletions notes/Azkaban_Flow_1.0_的使用.md
Expand Up @@ -27,7 +27,7 @@ Azkaban 主要通过界面上传配置文件来进行任务的调度。它有两

在 Azkaban 主界面可以创建对应的项目:

<div align="center"> <img src="../pictures/azkaban-create-project.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-create-project.png"/> </div>

### 2.2 任务配置

Expand All @@ -43,29 +43,29 @@ command=echo 'Hello Azkaban!'

`Hello-Azkaban.job ` 打包为 `zip` 压缩文件:

<div align="center"> <img src="../pictures/azkaban-zip.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-zip.png"/> </div>

通过 Web UI 界面上传:

<div align="center"> <img src="../pictures/azkaban-upload.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-upload.png"/> </div>

上传成功后可以看到对应的 Flows:

<div align="center"> <img src="../pictures/azkaban-flows.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-flows.png"/> </div>

### 2.4 执行任务

点击页面上的 `Execute Flow` 执行任务:

<div align="center"> <img src="../pictures/azkaban-execute.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-execute.png"/> </div>

### 2.5 执行结果

点击 `detail` 可以查看到任务的执行日志:

<div align="center"> <img src="../pictures/azkaban-successed.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-successed.png"/> </div>

<div align="center"> <img src="../pictures/azkaban-log.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-log.png"/> </div>

## 三、多任务调度

Expand Down Expand Up @@ -114,17 +114,17 @@ dependencies=Task-D

压缩后进行上传,这里需要注意的是一个 Project 只能接收一个压缩包,这里我还沿用上面的 Project,默认后面的压缩包会覆盖前面的压缩包:

<div align="center"> <img src="../pictures/azkaban-task-abcde-zip.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-task-abcde-zip.png"/> </div>

### 3.3 依赖关系

多个任务存在依赖时,默认采用最后一个任务的文件名作为 Flow 的名称,其依赖关系如图:

<div align="center"> <img src="../pictures/azkaban-dependencies.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-dependencies.png"/> </div>

### 3.4 执行结果

<div align="center"> <img src="../pictures/azkaban-task-abcde.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-task-abcde.png"/> </div>

从这个案例可以看出,Flow1.0 无法通过一个 job 文件来完成多个任务的配置,但是 Flow 2.0 就很好的解决了这个问题。

Expand All @@ -139,7 +139,7 @@ command=/usr/app/hadoop-2.6.0-cdh5.15.2/bin/hadoop fs -ls /

执行结果:

<div align="center"> <img src="../pictures/azkaban-hdfs.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-hdfs.png"/> </div>

## 五、调度MR作业

Expand All @@ -152,7 +152,7 @@ command=/usr/app/hadoop-2.6.0-cdh5.15.2/bin/hadoop jar /usr/app/hadoop-2.6.0-cdh

执行结果:

<div align="center"> <img src="../pictures/azkaban-mr.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-mr.png"/> </div>

## 六、调度Hive作业

Expand Down Expand Up @@ -185,25 +185,25 @@ desc emp;

打包的时候将 `job` 文件与 `sql` 文件一并进行打包:

<div align="center"> <img src="../pictures/azkaban-hive.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-hive.png"/> </div>

执行结果如下:

<div align="center"> <img src="../pictures/azkaban-hive-result.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-hive-result.png"/> </div>

## 七、在线修改作业配置

在测试时,我们可能需要频繁修改配置,如果每次修改都要重新打包上传,这会比较麻烦。所以 Azkaban 支持配置的在线修改,点击需要修改的 Flow,就可以进入详情页面:

<div align="center"> <img src="../pictures/azkaban-project-edit.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-project-edit.png"/> </div>

在详情页面点击 `Eidt` 按钮可以进入编辑页面:

<div align="center"> <img src="../pictures/azkaban-edit.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-edit.png"/> </div>

在编辑页面可以新增配置或者修改配置:

<div align="center"> <img src="../pictures/azkaban-click-edit.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-click-edit.png"/> </div>

## 附:可能出现的问题

Expand All @@ -213,7 +213,7 @@ desc emp;
Cannot request memory (Xms 0 kb, Xmx 0 kb) from system for job
```

<div align="center"> <img src="../pictures/azkaban-memory.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-memory.png"/> </div>

如果你的执行主机没办法增大内存,那么可以通过修改 `plugins/jobtypes/` 目录下的 `commonprivate.properties` 文件来关闭内存检查,配置如下:

Expand Down
8 changes: 4 additions & 4 deletions notes/Azkaban_Flow_2.0_的使用.md
Expand Up @@ -198,15 +198,15 @@ azkaban-flow-version: 2.0

### 3.2 打包上传

<div align="center"> <img src="../pictures/azkaban-simple.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-simple.png"/> </div>



### 3.3 执行结果

由于在 1.0 版本中已经介绍过 Web UI 的使用,这里就不再赘述。对于 1.0 和 2.0 版本,只有配置方式有所不同,其他上传执行的方式都是相同的。执行结果如下:

<div align="center"> <img src="../pictures/azkaban-simle-result.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-simle-result.png"/> </div>

## 四、多任务调度

Expand Down Expand Up @@ -281,11 +281,11 @@ nodes:

内嵌流的 DAG 图如下:

<div align="center"> <img src="../pictures/azkaban-embeded-flow.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-embeded-flow.png"/> </div>

执行情况如下:

<div align="center"> <img src="../pictures/azkaban-embeded-success.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-embeded-success.png"/> </div>



Expand Down
2 changes: 1 addition & 1 deletion notes/Azkaban简介.md
Expand Up @@ -32,7 +32,7 @@ Azkaban 产生于 LinkedIn,并经过多年生产环境的检验,它具备以

Azkaban 的设计理念是在保证功能实现的基础上兼顾易用性,其页面风格清晰明朗,下面是其 WEB UI 界面:

<div align="center"> <img src="../pictures/azkaban-web.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/azkaban-web.png"/> </div>

## 二、Azkaban 和 Oozie

Expand Down
6 changes: 3 additions & 3 deletions notes/Flink_Data_Sink.md
Expand Up @@ -163,7 +163,7 @@ bin/kafka-console-consumer.sh --bootstrap-server hadoop001:9092 --topic flink-st
在 Kafka 生产者上发送消息到 Flink 程序,观察 Flink 程序转换后的输出情况,具体如下:
<div align="center"> <img src="../pictures/flink-kafka-producer-consumer.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flink-kafka-producer-consumer.png"/> </div>
可以看到 Kafka 生成者发出的数据已经被 Flink 程序正常接收到,并经过转换后又输出到 Kafka 对应的 Topic 上。
Expand All @@ -172,7 +172,7 @@ bin/kafka-console-consumer.sh --bootstrap-server hadoop001:9092 --topic flink-st
除了使用内置的第三方连接器外,Flink 还支持使用自定义的 Sink 来满足多样化的输出需求。想要实现自定义的 Sink ,需要直接或者间接实现 SinkFunction 接口。通常情况下,我们都是实现其抽象类 RichSinkFunction,相比于 SinkFunction ,其提供了更多的与生命周期相关的方法。两者间的关系如下:
<div align="center"> <img src="../pictures/flink-richsink.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flink-richsink.png"/> </div>
这里我们以自定义一个 FlinkToMySQLSink 为例,将计算结果写出到 MySQL 数据库中,具体步骤如下:
Expand Down Expand Up @@ -251,7 +251,7 @@ env.execute();
启动程序,观察数据库写入情况:
<div align="center"> <img src="../pictures/flink-mysql-sink.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flink-mysql-sink.png"/> </div>
数据库成功写入,代表自定义 Sink 整合成功。
Expand Down
6 changes: 3 additions & 3 deletions notes/Flink_Data_Source.md
Expand Up @@ -154,7 +154,7 @@ Exception in thread "main" java.lang.IllegalArgumentException: Source: 1 is not
如果你想要实现具有并行度的输入流,则需要实现 ParallelSourceFunction 或 RichParallelSourceFunction 接口,其与 SourceFunction 的关系如下图:
<div align="center"> <img src="../pictures/flink-RichParallelSourceFunction.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flink-RichParallelSourceFunction.png"/> </div>
ParallelSourceFunction 直接继承自 ParallelSourceFunction,具有并行度的功能。RichParallelSourceFunction 则继承自 AbstractRichFunction,同时实现了 ParallelSourceFunction 接口,所以其除了具有并行度的功能外,还提供了额外的与生命周期相关的方法,如 open() ,closen() 。
## 三、Streaming Connectors
Expand Down Expand Up @@ -269,10 +269,10 @@ bin/kafka-console-producer.sh --broker-list hadoop001:9092 --topic flink-stream-
在 Producer 上输入任意测试数据,之后观察程序控制台的输出:
<div align="center"> <img src="../pictures/flink-kafka-datasource-producer.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flink-kafka-datasource-producer.png"/> </div>
程序控制台的输出如下:
<div align="center"> <img src="../pictures/flink-kafka-datasource-console.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flink-kafka-datasource-console.png"/> </div>
可以看到已经成功接收并打印出相关的数据。
Expand Down
2 changes: 1 addition & 1 deletion notes/Flink_Data_Transformation.md
Expand Up @@ -234,7 +234,7 @@ dataStream.rescale();

ReScale 这个单词具有重新缩放的意义,其对应的操作也是如此,具体如下:如果上游 operation 并行度为 2,而下游的 operation 并行度为 6,则其中 1 个上游的 operation 会将元素分发到 3 个下游 operation,另 1 个上游 operation 则会将元素分发到另外 3 个下游 operation。反之亦然,如果上游的 operation 并行度为 6,而下游 operation 并行度为 2,则其中 3 个上游 operation 会将元素分发到 1 个下游 operation,另 3 个上游 operation 会将元素分发到另外 1 个下游operation:

<div align="center"> <img src="../pictures/flink-Rescaling.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flink-Rescaling.png"/> </div>


### 3.4 Broadcasting [DataStream → DataStream]
Expand Down
10 changes: 5 additions & 5 deletions notes/Flink_Windows.md
Expand Up @@ -23,7 +23,7 @@ Time Windows 用于以时间为维度来进行数据聚合,具体分为以下

滚动窗口 (Tumbling Windows) 是指彼此之间没有重叠的窗口。例如:每隔1小时统计过去1小时内的商品点击量,那么 1 天就只能分为 24 个窗口,每个窗口彼此之间是不存在重叠的,具体如下:

<div align="center"> <img width="600px" src="../pictures/flink-tumbling-windows.png"/> </div>
<div align="center"> <img width="600px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flink-tumbling-windows.png"/> </div>


这里我们以词频统计为例,给出一个具体的用例,代码如下:
Expand All @@ -46,7 +46,7 @@ env.execute("Flink Streaming");

测试结果如下:

<div align="center"> <img src="../pictures/flink-window-word-count.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flink-window-word-count.png"/> </div>



Expand All @@ -55,7 +55,7 @@ env.execute("Flink Streaming");

滑动窗口用于滚动进行聚合分析,例如:每隔 6 分钟统计一次过去一小时内所有商品的点击量,那么统计窗口彼此之间就是存在重叠的,即 1天可以分为 240 个窗口。图示如下:

<div align="center"> <img width="600px" src="../pictures/flink-sliding-windows.png"/> </div>
<div align="center"> <img width="600px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flink-sliding-windows.png"/> </div>


可以看到 window 1 - 4 这四个窗口彼此之间都存在着时间相等的重叠部分。想要实现滑动窗口,只需要在使用 timeWindow 方法时额外传递第二个参数作为滚动时间即可,具体如下:
Expand All @@ -69,7 +69,7 @@ timeWindow(Time.minutes(1),Time.seconds(3))

当用户在进行持续浏览时,可能每时每刻都会有点击数据,例如在活动区间内,用户可能频繁的将某类商品加入和移除购物车,而你只想知道用户本次浏览最终的购物车情况,此时就可以在用户持有的会话结束后再进行统计。想要实现这类统计,可以通过 Session Windows 来进行实现。

<div align="center"> <img width="600px" src="../pictures/flink-session-windows.png"/> </div>
<div align="center"> <img width="600px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flink-session-windows.png"/> </div>


具体的实现代码如下:
Expand All @@ -85,7 +85,7 @@ window(EventTimeSessionWindows.withGap(Time.seconds(10)))

最后一个窗口是全局窗口, 全局窗口会将所有 key 相同的元素分配到同一个窗口中,其通常配合触发器 (trigger) 进行使用。如果没有相应触发器,则计算将不会被执行。

<div align="center"> <img width="600px" src="../pictures/flink-non-windowed.png"/> </div>
<div align="center"> <img width="600px" src="https://gitee.com/heibaiying/BigData-Notes/raw/master/pictures/flink-non-windowed.png"/> </div>


这里继续以上面词频统计的案例为例,示例代码如下:
Expand Down

0 comments on commit 7bcf53a

Please sign in to comment.