Merge pull request #21 from cwiki-us-docs/feature/getting_started
完成快速导航部分的翻译
This commit is contained in:
commit
0ae0154dc4
|
@ -1,228 +0,0 @@
|
||||||
<!-- toc -->
|
|
||||||
|
|
||||||
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
|
|
||||||
<ins class="adsbygoogle"
|
|
||||||
style="display:block; text-align:center;"
|
|
||||||
data-ad-layout="in-article"
|
|
||||||
data-ad-format="fluid"
|
|
||||||
data-ad-client="ca-pub-8828078415045620"
|
|
||||||
data-ad-slot="7586680510"></ins>
|
|
||||||
<script>
|
|
||||||
(adsbygoogle = window.adsbygoogle || []).push({});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
## 教程:从Kafka中加载流式数据
|
|
||||||
### 入门
|
|
||||||
|
|
||||||
本教程演示了如何使用Druid的Kafka索引服务将数据从Kafka流加载到Apache Druid中。
|
|
||||||
|
|
||||||
在本教程中,我们假设您已经按照快速入门中的说明下载了Druid并使用 `micro-quickstart`单机配置使其在本地计算机上运行。您不需要加载任何数据。
|
|
||||||
|
|
||||||
### 下载并启动Kafka
|
|
||||||
|
|
||||||
[Apache Kafka](http://kafka.apache.org/)是一种高吞吐量消息总线,可与Druid很好地配合使用。在本教程中,我们将使用Kafka2.1.0。要下载Kafka,请在终端中执行以下命令:
|
|
||||||
|
|
||||||
```json
|
|
||||||
curl -O https://archive.apache.org/dist/kafka/2.1.0/kafka_2.12-2.1.0.tgz
|
|
||||||
tar -xzf kafka_2.12-2.1.0.tgz
|
|
||||||
cd kafka_2.12-2.1.0
|
|
||||||
```
|
|
||||||
通过在终端中运行以下命令来启动一个Kafka Broker:
|
|
||||||
|
|
||||||
```json
|
|
||||||
./bin/kafka-server-start.sh config/server.properties
|
|
||||||
```
|
|
||||||
|
|
||||||
执行以下命令来创建一个我们用来发送数据的Kafka主题,称为"*wikipedia*":
|
|
||||||
|
|
||||||
```json
|
|
||||||
./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic wikipedia
|
|
||||||
```
|
|
||||||
|
|
||||||
### 发送数据到Kafka
|
|
||||||
|
|
||||||
让我们为该主题启动一个生产者并发送一些数据
|
|
||||||
|
|
||||||
在Druid目录下,运行下边的命令:
|
|
||||||
```json
|
|
||||||
cd quickstart/tutorial
|
|
||||||
gunzip -c wikiticker-2015-09-12-sampled.json.gz > wikiticker-2015-09-12-sampled.json
|
|
||||||
```
|
|
||||||
|
|
||||||
在Kafka目录下,运行以下命令,{PATH_TO_DRUID}替换为Druid目录的路径:
|
|
||||||
```json
|
|
||||||
export KAFKA_OPTS="-Dfile.encoding=UTF-8"
|
|
||||||
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic wikipedia < {PATH_TO_DRUID}/quickstart/tutorial/wikiticker-2015-09-12-sampled.json
|
|
||||||
```
|
|
||||||
|
|
||||||
上一个命令将示例事件发布到名称为*wikipedia*的Kafka主题。现在,我们将使用Druid的Kafka索引服务从新创建的主题中提取消息。
|
|
||||||
|
|
||||||
### 使用数据加载器(Data Loader)
|
|
||||||
|
|
||||||
浏览器访问 [localhost:8888](http://localhost:8888) 然后点击控制台中的 `Load data`
|
|
||||||
|
|
||||||
![](img-2/tutorial-kafka-data-loader-01.png)
|
|
||||||
|
|
||||||
选择 `Apache Kafka` 然后点击 `Connect data`
|
|
||||||
|
|
||||||
![](img-2/tutorial-kafka-data-loader-02.png)
|
|
||||||
|
|
||||||
在 `Bootstrap servers` 输入 `localhost:9092`, 在 `Topic` 输入 `wikipedia`
|
|
||||||
|
|
||||||
点击 `Preview` 后确保您看到的数据是正确的
|
|
||||||
|
|
||||||
数据定位后,您可以点击"Next: Parse data"来进入下一步。
|
|
||||||
|
|
||||||
![](img-2/tutorial-kafka-data-loader-03.png)
|
|
||||||
|
|
||||||
数据加载器将尝试自动为数据确定正确的解析器。在这种情况下,它将成功确定`json`。可以随意使用不同的解析器选项来预览Druid如何解析您的数据。
|
|
||||||
|
|
||||||
`json` 选择器被选中后,点击 `Next:Parse time` 进入下一步来决定您的主时间列。
|
|
||||||
|
|
||||||
![](img-2/tutorial-kafka-data-loader-04.png)
|
|
||||||
|
|
||||||
Druid的体系结构需要一个主时间列(内部存储为名为__time的列)。如果您的数据中没有时间戳,请选择 `固定值(Constant Value)` 。在我们的示例中,数据加载器将确定原始数据中的时间列是唯一可用作主时间列的候选者。
|
|
||||||
|
|
||||||
点击"Next:..."两次完成 `Transform` 和 `Filter` 步骤。您无需在这些步骤中输入任何内容,因为使用摄取时间变换和过滤器不在本教程范围内。
|
|
||||||
|
|
||||||
![](img-2/tutorial-kafka-data-loader-05.png)
|
|
||||||
|
|
||||||
在 `Configure schema` 步骤中,您可以配置将哪些维度和指标摄入到Druid中,这些正是数据在被Druid中摄取后出现的样子。 由于我们的数据集非常小,关掉rollup、确认更改。
|
|
||||||
|
|
||||||
一旦对schema满意后,点击 `Next` 后进入 `Partition` 步骤,该步骤中可以调整数据如何划分为段文件的方式。
|
|
||||||
|
|
||||||
![](img-2/tutorial-kafka-data-loader-06.png)
|
|
||||||
|
|
||||||
在这里,您可以调整如何在Druid中将数据拆分为多个段。 由于这是一个很小的数据集,因此在此步骤中无需进行任何调整。
|
|
||||||
|
|
||||||
点击完成 `Tune` 步骤。
|
|
||||||
|
|
||||||
![](img-2/tutorial-kafka-data-loader-07.png)
|
|
||||||
|
|
||||||
在 `Tune` 步骤中,将 `Use earliest offset` 设置为 `True` *非常重要*,因为我们需要从流的开始位置消费数据。 其他没有任何需要更改的地方,进入到 `Publish` 步
|
|
||||||
|
|
||||||
![](img-2/tutorial-kafka-data-loader-08.png)
|
|
||||||
|
|
||||||
我们将该数据源命名为 `wikipedia-kafka`
|
|
||||||
|
|
||||||
最后点击 `Next` 预览摄入规范:
|
|
||||||
|
|
||||||
![](img-2/tutorial-kafka-data-loader-09.png)
|
|
||||||
|
|
||||||
这就是您构建的规范,为了查看更改将如何更新规范是可以随意返回之前的步骤中进行更改,同样,您也可以直接编辑规范,并在前面的步骤中看到它。
|
|
||||||
|
|
||||||
对摄取规范感到满意后,请单击 `Submit`,然后将创建一个数据摄取任务
|
|
||||||
|
|
||||||
![](img-2/tutorial-kafka-data-loader-10.png)
|
|
||||||
|
|
||||||
您可以进入任务视图,重点关注新创建的supervisor。任务视图设置为自动刷新,请等待直到Supervisor启动了一个任务。
|
|
||||||
|
|
||||||
当一项任务开始运行时,它将开始处理其摄入的数据。
|
|
||||||
|
|
||||||
从标题导航到 `Datasources` 视图。
|
|
||||||
|
|
||||||
![](img-2/tutorial-kafka-data-loader-11.png)
|
|
||||||
|
|
||||||
当 `wikipedia-kafka` 数据源出现在这儿的时候就可以被查询了。
|
|
||||||
|
|
||||||
> ![TIPS]
|
|
||||||
> 如果过了几分钟之后数据源还是没有出现在这里,可能是在 `Tune` 步骤中没有设置为从流的开始进行消费数据
|
|
||||||
|
|
||||||
此时,就可以在 `Query` 视图中运行SQL查询了,因为这是一个小的数据集,你可以简单的运行 `SELECT * FROM "wikipedia-kafka"` 来查询结果。
|
|
||||||
|
|
||||||
![](img-2/tutorial-kafka-data-loader-12.png)
|
|
||||||
|
|
||||||
查看[查询教程](../querying/makeNativeQueries.md)以对新加载的数据运行一些示例查询。
|
|
||||||
|
|
||||||
#### 通过控制台提交supervisor
|
|
||||||
|
|
||||||
在控制台中点击 `Submit supervisor` 打开提交supervisor对话框:
|
|
||||||
|
|
||||||
![](img-2/tutorial-kafka-submit-supervisor-01.png)
|
|
||||||
|
|
||||||
粘贴以下规范后点击 `Submit`
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"type": "kafka",
|
|
||||||
"spec" : {
|
|
||||||
"dataSchema": {
|
|
||||||
"dataSource": "wikipedia",
|
|
||||||
"timestampSpec": {
|
|
||||||
"column": "time",
|
|
||||||
"format": "auto"
|
|
||||||
},
|
|
||||||
"dimensionsSpec": {
|
|
||||||
"dimensions": [
|
|
||||||
"channel",
|
|
||||||
"cityName",
|
|
||||||
"comment",
|
|
||||||
"countryIsoCode",
|
|
||||||
"countryName",
|
|
||||||
"isAnonymous",
|
|
||||||
"isMinor",
|
|
||||||
"isNew",
|
|
||||||
"isRobot",
|
|
||||||
"isUnpatrolled",
|
|
||||||
"metroCode",
|
|
||||||
"namespace",
|
|
||||||
"page",
|
|
||||||
"regionIsoCode",
|
|
||||||
"regionName",
|
|
||||||
"user",
|
|
||||||
{ "name": "added", "type": "long" },
|
|
||||||
{ "name": "deleted", "type": "long" },
|
|
||||||
{ "name": "delta", "type": "long" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"metricsSpec" : [],
|
|
||||||
"granularitySpec": {
|
|
||||||
"type": "uniform",
|
|
||||||
"segmentGranularity": "DAY",
|
|
||||||
"queryGranularity": "NONE",
|
|
||||||
"rollup": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tuningConfig": {
|
|
||||||
"type": "kafka",
|
|
||||||
"reportParseExceptions": false
|
|
||||||
},
|
|
||||||
"ioConfig": {
|
|
||||||
"topic": "wikipedia",
|
|
||||||
"inputFormat": {
|
|
||||||
"type": "json"
|
|
||||||
},
|
|
||||||
"replicas": 2,
|
|
||||||
"taskDuration": "PT10M",
|
|
||||||
"completionTimeout": "PT20M",
|
|
||||||
"consumerProperties": {
|
|
||||||
"bootstrap.servers": "localhost:9092"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
这将启动supervisor,该supervisor继而产生一些任务,这些任务将开始监听传入的数据。
|
|
||||||
|
|
||||||
#### 直接提交supervisor
|
|
||||||
|
|
||||||
为了直接启动服务,我们可以在Druid的根目录下运行以下命令来提交一个supervisor规范到Druid Overlord中
|
|
||||||
|
|
||||||
```json
|
|
||||||
curl -XPOST -H'Content-Type: application/json' -d @quickstart/tutorial/wikipedia-kafka-supervisor.json http://localhost:8081/druid/indexer/v1/supervisor
|
|
||||||
```
|
|
||||||
如果supervisor被成功创建后,将会返回一个supervisor的ID,在本例中看到的是 `{"id":"wikipedia"}`
|
|
||||||
|
|
||||||
更详细的信息可以查看[Druid Kafka索引服务文档](../DataIngestion/kafka.md)
|
|
||||||
|
|
||||||
您可以在[Druid控制台]( http://localhost:8888/unified-console.html#tasks)中查看现有的supervisors和tasks
|
|
||||||
|
|
||||||
### 数据查询
|
|
||||||
数据被发送到Kafka流之后,立刻就可以被查询了。
|
|
||||||
|
|
||||||
按照[查询教程](./chapter-4.md)的操作,对新加载的数据执行一些示例查询
|
|
||||||
### 清理数据
|
|
||||||
如果您希望阅读其他任何入门教程,则需要关闭集群并通过删除druid软件包下的`var`目录的内容来重置集群状态,因为其他教程将写入相同的"wikipedia"数据源。
|
|
||||||
### 进一步阅读
|
|
||||||
更多关于从Kafka流加载数据的信息,可以查看[Druid Kafka索引服务文档](../DataIngestion/kafka.md)
|
|
|
@ -165,159 +165,71 @@ Druid 是通过读取和存储有关导入数据的摘要(schema)来完成
|
||||||
![Data loader schema](../assets/tutorial-batch-data-loader-05.png ':size=690')
|
![Data loader schema](../assets/tutorial-batch-data-loader-05.png ':size=690')
|
||||||
|
|
||||||
|
|
||||||
10. 单击 **下一步:分区(Partition)** 来配置数据是如何在段(segments)中进行拆分的,选择 `DAY` 做为 **Segment granularity**
|
10. 单击 **下一步:分区(Partition)** 来配置数据是如何在段(segments)中进行拆分的,选择 `DAY` 做为 **段粒度(Segment granularity)**
|
||||||
|
|
||||||
![Data loader partition](../assets/tutorial-batch-data-loader-06.png "Data loader partition")
|
![Data loader partition](../assets/tutorial-batch-data-loader-06.png ':size=690')
|
||||||
|
|
||||||
Since this is a small dataset, we can have just a single segment, which is what selecting `DAY` as the
|
因为当前的数据集是一个非常小的数据库,我们可以只使用单一段(segment)就可以了,简单来说就是使用 `DAY` 来作为 段粒度(Segment granularity)。
|
||||||
segment granularity gives us.
|
|
||||||
|
|
||||||
11. 单击 **下一步:调整(Tune)** 和 **下一步:发布(Publish)**
|
11. 单击 **下一步:调整(Tune)** 和 **下一步:发布(Publish)**
|
||||||
|
|
||||||
12. 在发布(Publish)的设置中,你需要在 Druid 的数据源的名称,我们可以选择默认的名字,这个名字将数据源的名称从 `wikiticker-2015-09-12-sampled` 修改为 `wikipedia`。
|
12. 在发布(Publish)的设置中,你需要在 Druid 的数据源的名称,我们可以选择默认的名字,这个名字将数据源的名称从 `wikiticker-2015-09-12-sampled` 修改为 `wikipedia`。
|
||||||
|
|
||||||
![Data loader publish](../assets/tutorial-batch-data-loader-07.png "Data loader publish")
|
![Data loader publish](../assets/tutorial-batch-data-loader-07.png ':size=690')
|
||||||
|
|
||||||
|
|
||||||
13. 单击 **下一步:编辑特性( Edit spec)** to review the ingestion spec we've constructed with the data loader.
|
13. 单击 **下一步:编辑特性( Edit spec)** 来在数据导入器中查看需要导入的数据特性。
|
||||||
|
|
||||||
![Data loader spec](../assets/tutorial-batch-data-loader-08.png "Data loader spec")
|
![Data loader spec](../assets/tutorial-batch-data-loader-08.png ':size=690')
|
||||||
|
|
||||||
Feel free to go back and change settings from previous steps to see how doing so updates the spec.
|
你可以随意的通过页面中的导航返回到前面的页面中对配置进行调整。简单来说你可以对特性目录进行编辑,来查看编辑后的配置是如何对前面的步骤产生影响的。
|
||||||
Similarly, you can edit the spec directly and see it reflected in the previous steps.
|
|
||||||
|
|
||||||
> For other ways to load ingestion specs in Druid, see [Tutorial: Loading a file](./tutorial-batch.md).
|
> 针对更多有关在 Druid 中载入导入数据配置的方法,请参考页面: [教程:载入一个文件](tutorial-batch.md).
|
||||||
|
|
||||||
14. Once you are satisfied with the spec, click **Submit**.
|
14. 当你对所有的配置都满意并且觉得没有问题的时候,单击 **提交(Submit)**.
|
||||||
|
|
||||||
The new task for our wikipedia datasource now appears in the Ingestion view.
|
针对我们需要向 Druid 中导入 wikipedia 数据的任务将会显示在 导入视图(Ingestion view)中。
|
||||||
|
|
||||||
![Tasks view](../assets/tutorial-batch-data-loader-09.png "Tasks view")
|
![Tasks view](../assets/tutorial-batch-data-loader-09.png ':size=690')
|
||||||
|
|
||||||
The task may take a minute or two to complete. When done, the task status should be "SUCCESS", with
|
整个导入的过程可能需要耗费 1 到 2 分钟。当导入完成后,任务的状态将会显示为 "SUCCESS",这表示的是导入的过程已经完成,任务已经结束了。
|
||||||
the duration of the task indicated. Note that the view is set to automatically
|
需要注意的是,导入过程的视图是自动刷新的,所以你不需要通过刷新浏览器来刷新页面后来查看状态的改变。
|
||||||
refresh, so you do not need to refresh the browser to see the status change.
|
|
||||||
|
|
||||||
A successful task means that one or more segments have been built and are now picked up by our data servers.
|
|
||||||
|
|
||||||
|
一个成功的任务表达的意思是:一个或者多个段(segments)被创建,同时从数据服务器上获取了数据。
|
||||||
|
|
||||||
## 第 5 步:查询数据
|
## 第 5 步:查询数据
|
||||||
|
|
||||||
You can now see the data as a datasource in the console and try out a query, as follows:
|
现在你就可以在 Druid 的控制台中的 datasource 标签页查看数据,同时你可以尝试使用下面的查询:
|
||||||
|
|
||||||
1. Click **Datasources** from the console header.
|
1. 从控制台的顶部单击 **数据源(Datasources)**
|
||||||
|
|
||||||
If the wikipedia datasource doesn't appear, wait a few moments for the segment to finish loading. A datasource is
|
如果 wikipedia 的数据源没有显示的话,请等待一会让导入的段完成数据载入。一个数据源如果在 **Availability** 列中被定义显示为 "Fully available",
|
||||||
queryable once it is shown to be "Fully available" in the **Availability** column.
|
那么这个数据源就可以进行查询了。
|
||||||
|
|
||||||
2. When the datasource is available, open the Actions menu (![Actions](../assets/datasources-action-button.png)) for that
|
2. 但一个数据源显示为可用的时候,针对这个数据源打开 Actions (![Actions](../assets/datasources-action-button.png)) 菜单,然后选择 **使用 SQL 进行查询(Query with SQL)**。
|
||||||
datasource and choose **Query with SQL**.
|
|
||||||
|
|
||||||
![Datasource view](../assets/tutorial-batch-data-loader-10.png "Datasource view")
|
![Datasource view](../assets/tutorial-batch-data-loader-10.png "Datasource view")
|
||||||
|
|
||||||
> Notice the other actions you can perform for a datasource, including configuring retention rules, compaction, and more.
|
> 请注意,你还可以对数据源进行一些其他的操作,包括有配置,保留时间规则,压缩等。
|
||||||
|
|
||||||
3. Run the prepopulated query, `SELECT * FROM "wikipedia"` to see the results.
|
3. 运行下面的查询语句,`SELECT * FROM "wikipedia"` 来查看查询结果。
|
||||||
|
|
||||||
![Query view](../assets/tutorial-batch-data-loader-11.png "Query view")
|
![Query view](../assets/tutorial-batch-data-loader-11.png ':size=690')
|
||||||
|
|
||||||
Congratulations! You've gone from downloading Druid to querying data in just one quickstart. See the following
|
祝贺你!当你完成上面的步骤,并且能够从查询窗口中看到查询结果的话,那么你就完成了对 Druid 进行快速部署并且导入数据的全过程。
|
||||||
section for what to do next.
|
请参考下面页面中的内容来对 Druid 进行后续步骤的操作。
|
||||||
|
|
||||||
|
|
||||||
## 下一步
|
## 下一步
|
||||||
|
|
||||||
After finishing the quickstart, check out the [query tutorial](../tutorials/tutorial-query.md) to further explore
|
在完成上面步骤中的快速导航后,请查看 [query 教程](tutorial-query.md) 页面中的内容来了解如何在 Druid 的控制台中使用查询语句。
|
||||||
Query features in the Druid console.
|
|
||||||
|
|
||||||
Alternatively, learn about other ways to ingest data in one of these tutorials:
|
还有,如果你还希望从其他的数据导入方式中导入数据到 Druid,请参考下面的页面链接:
|
||||||
|
|
||||||
- [Loading stream data from Apache Kafka](./tutorial-kafka.md) – How to load streaming data from a Kafka topic.
|
- [从 Apache Kafka 中加载流式数据](tutorial-kafka.md) – 如何从 Kafka 的主题中加载流式数据。
|
||||||
- [Loading a file using Apache Hadoop](./tutorial-batch-hadoop.md) – How to perform a batch file load, using a remote Hadoop cluster.
|
- [使用 Apache Hadoop 载入一个文件](tutorial-batch-hadoop.md) – 如何使用远程 Hadoop 集群执行批处理文件加载
|
||||||
- [Writing your own ingestion spec](./tutorial-ingestion-spec.md) – How to write a new ingestion spec and use it to load data.
|
- [编写一个你自己的数据导入规范](tutorial-ingestion-spec.md) – 如何编写新的数据导入规范并使用它来加载数据
|
||||||
|
|
||||||
|
|
||||||
Remember that after stopping Druid services, you can start clean next time by deleting the `var` directory from the Druid root directory and
|
请注意,当你停止了 Druid 的服务后,可以通过删除 Druid 根目录下的 `var` 目录,并且再次运行 `bin/start-micro-quickstart` 脚本来让 Druid 启动一个完全新的实例 。
|
||||||
running the `bin/start-micro-quickstart` script again. You will likely want to do this before taking other data ingestion tutorials,
|
如果你还希望导入相同的 Wikipedia 数据,并且使用不同的数据导入方式的话,你需要完成上面的删除步骤,然后再次启动 Druid,这是因为你可能会使用相同的数据导入。
|
||||||
since in them you will create the same wikipedia datasource.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 加载数据
|
|
||||||
##### 教程使用的数据集
|
|
||||||
|
|
||||||
对于以下数据加载教程,我们提供了一个示例数据文件,其中包含2015年9月12日发生的Wikipedia页面编辑事件。
|
|
||||||
|
|
||||||
该样本数据位于Druid包根目录的`quickstart/tutorial/wikiticker-2015-09-12-sampled.json.gz`中,页面编辑事件作为JSON对象存储在文本文件中。
|
|
||||||
|
|
||||||
示例数据包含以下几列,示例事件如下所示:
|
|
||||||
|
|
||||||
* added
|
|
||||||
* channel
|
|
||||||
* cityName
|
|
||||||
* comment
|
|
||||||
* countryIsoCode
|
|
||||||
* countryName
|
|
||||||
* deleted
|
|
||||||
* delta
|
|
||||||
* isAnonymous
|
|
||||||
* isMinor
|
|
||||||
* isNew
|
|
||||||
* isRobot
|
|
||||||
* isUnpatrolled
|
|
||||||
* metroCode
|
|
||||||
* namespace
|
|
||||||
* page
|
|
||||||
* regionIsoCode
|
|
||||||
* regionName
|
|
||||||
* user
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"timestamp":"2015-09-12T20:03:45.018Z",
|
|
||||||
"channel":"#en.wikipedia",
|
|
||||||
"namespace":"Main",
|
|
||||||
"page":"Spider-Man's powers and equipment",
|
|
||||||
"user":"foobar",
|
|
||||||
"comment":"/* Artificial web-shooters */",
|
|
||||||
"cityName":"New York",
|
|
||||||
"regionName":"New York",
|
|
||||||
"regionIsoCode":"NY",
|
|
||||||
"countryName":"United States",
|
|
||||||
"countryIsoCode":"US",
|
|
||||||
"isAnonymous":false,
|
|
||||||
"isNew":false,
|
|
||||||
"isMinor":false,
|
|
||||||
"isRobot":false,
|
|
||||||
"isUnpatrolled":false,
|
|
||||||
"added":99,
|
|
||||||
"delta":99,
|
|
||||||
"deleted":0,
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
##### 数据加载
|
|
||||||
|
|
||||||
以下教程演示了将数据加载到Druid的各种方法,包括批处理和流处理用例。 所有教程均假定您使用的是上面提到的`micro-quickstart`单机配置。
|
|
||||||
|
|
||||||
* [加载本地文件](../Tutorials/chapter-1.md) - 本教程演示了如何使用Druid的本地批处理摄取来执行批文件加载
|
|
||||||
* [从Kafka加载流数据](../Tutorials/chapter-2.md) - 本教程演示了如何从Kafka主题加载流数据
|
|
||||||
* [从Hadoop加载数据](../Tutorials/chapter-3.md) - 本教程演示了如何使用远程Hadoop集群执行批处理文件加载
|
|
||||||
* [编写一个自己的数据摄取规范](../Tutorials/chapter-10.md) - 本教程演示了如何编写新的数据摄取规范并使用它来加载数据
|
|
||||||
|
|
||||||
##### 重置集群状态
|
|
||||||
|
|
||||||
如果要在清理服务后重新启动,请删除`var`目录,然后再次运行`bin/start-micro-quickstart`脚本。
|
|
||||||
|
|
||||||
一旦每个服务都启动,您就可以加载数据了。
|
|
||||||
|
|
||||||
##### 重置 Kafka
|
|
||||||
|
|
||||||
如果您完成了[教程:从Kafka加载流数据](../Tutorials/chapter-2.md)并希望重置集群状态,则还应该清除所有Kafka状态。
|
|
||||||
|
|
||||||
在停止ZooKeeper和Druid服务之前,使用`CTRL-C`关闭`Kafka Broker`,然后删除`/tmp/kafka-logs`中的Kafka日志目录:
|
|
||||||
|
|
||||||
```
|
|
||||||
rm -rf /tmp/kafka-logs
|
|
||||||
```
|
|
||||||
|
|
|
@ -276,3 +276,222 @@ rm -rf /tmp/kafka-logs
|
||||||
## Further reading
|
## Further reading
|
||||||
|
|
||||||
For more information on loading data from Kafka streams, please see the [Druid Kafka indexing service documentation](../development/extensions-core/kafka-ingestion.md).
|
For more information on loading data from Kafka streams, please see the [Druid Kafka indexing service documentation](../development/extensions-core/kafka-ingestion.md).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 教程:从Kafka中加载流式数据
|
||||||
|
### 入门
|
||||||
|
|
||||||
|
本教程演示了如何使用Druid的Kafka索引服务将数据从Kafka流加载到Apache Druid中。
|
||||||
|
|
||||||
|
在本教程中,我们假设您已经按照快速入门中的说明下载了Druid并使用 `micro-quickstart`单机配置使其在本地计算机上运行。您不需要加载任何数据。
|
||||||
|
|
||||||
|
### 下载并启动Kafka
|
||||||
|
|
||||||
|
[Apache Kafka](http://kafka.apache.org/)是一种高吞吐量消息总线,可与Druid很好地配合使用。在本教程中,我们将使用Kafka2.1.0。要下载Kafka,请在终端中执行以下命令:
|
||||||
|
|
||||||
|
```json
|
||||||
|
curl -O https://archive.apache.org/dist/kafka/2.1.0/kafka_2.12-2.1.0.tgz
|
||||||
|
tar -xzf kafka_2.12-2.1.0.tgz
|
||||||
|
cd kafka_2.12-2.1.0
|
||||||
|
```
|
||||||
|
通过在终端中运行以下命令来启动一个Kafka Broker:
|
||||||
|
|
||||||
|
```json
|
||||||
|
./bin/kafka-server-start.sh config/server.properties
|
||||||
|
```
|
||||||
|
|
||||||
|
执行以下命令来创建一个我们用来发送数据的Kafka主题,称为"*wikipedia*":
|
||||||
|
|
||||||
|
```json
|
||||||
|
./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic wikipedia
|
||||||
|
```
|
||||||
|
|
||||||
|
### 发送数据到Kafka
|
||||||
|
|
||||||
|
让我们为该主题启动一个生产者并发送一些数据
|
||||||
|
|
||||||
|
在Druid目录下,运行下边的命令:
|
||||||
|
```json
|
||||||
|
cd quickstart/tutorial
|
||||||
|
gunzip -c wikiticker-2015-09-12-sampled.json.gz > wikiticker-2015-09-12-sampled.json
|
||||||
|
```
|
||||||
|
|
||||||
|
在Kafka目录下,运行以下命令,{PATH_TO_DRUID}替换为Druid目录的路径:
|
||||||
|
```json
|
||||||
|
export KAFKA_OPTS="-Dfile.encoding=UTF-8"
|
||||||
|
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic wikipedia < {PATH_TO_DRUID}/quickstart/tutorial/wikiticker-2015-09-12-sampled.json
|
||||||
|
```
|
||||||
|
|
||||||
|
上一个命令将示例事件发布到名称为*wikipedia*的Kafka主题。现在,我们将使用Druid的Kafka索引服务从新创建的主题中提取消息。
|
||||||
|
|
||||||
|
### 使用数据加载器(Data Loader)
|
||||||
|
|
||||||
|
浏览器访问 [localhost:8888](http://localhost:8888) 然后点击控制台中的 `Load data`
|
||||||
|
|
||||||
|
![](img-2/tutorial-kafka-data-loader-01.png)
|
||||||
|
|
||||||
|
选择 `Apache Kafka` 然后点击 `Connect data`
|
||||||
|
|
||||||
|
![](img-2/tutorial-kafka-data-loader-02.png)
|
||||||
|
|
||||||
|
在 `Bootstrap servers` 输入 `localhost:9092`, 在 `Topic` 输入 `wikipedia`
|
||||||
|
|
||||||
|
点击 `Preview` 后确保您看到的数据是正确的
|
||||||
|
|
||||||
|
数据定位后,您可以点击"Next: Parse data"来进入下一步。
|
||||||
|
|
||||||
|
![](img-2/tutorial-kafka-data-loader-03.png)
|
||||||
|
|
||||||
|
数据加载器将尝试自动为数据确定正确的解析器。在这种情况下,它将成功确定`json`。可以随意使用不同的解析器选项来预览Druid如何解析您的数据。
|
||||||
|
|
||||||
|
`json` 选择器被选中后,点击 `Next:Parse time` 进入下一步来决定您的主时间列。
|
||||||
|
|
||||||
|
![](img-2/tutorial-kafka-data-loader-04.png)
|
||||||
|
|
||||||
|
Druid的体系结构需要一个主时间列(内部存储为名为__time的列)。如果您的数据中没有时间戳,请选择 `固定值(Constant Value)` 。在我们的示例中,数据加载器将确定原始数据中的时间列是唯一可用作主时间列的候选者。
|
||||||
|
|
||||||
|
点击"Next:..."两次完成 `Transform` 和 `Filter` 步骤。您无需在这些步骤中输入任何内容,因为使用摄取时间变换和过滤器不在本教程范围内。
|
||||||
|
|
||||||
|
![](img-2/tutorial-kafka-data-loader-05.png)
|
||||||
|
|
||||||
|
在 `Configure schema` 步骤中,您可以配置将哪些维度和指标摄入到Druid中,这些正是数据在被Druid中摄取后出现的样子。 由于我们的数据集非常小,关掉rollup、确认更改。
|
||||||
|
|
||||||
|
一旦对schema满意后,点击 `Next` 后进入 `Partition` 步骤,该步骤中可以调整数据如何划分为段文件的方式。
|
||||||
|
|
||||||
|
![](img-2/tutorial-kafka-data-loader-06.png)
|
||||||
|
|
||||||
|
在这里,您可以调整如何在Druid中将数据拆分为多个段。 由于这是一个很小的数据集,因此在此步骤中无需进行任何调整。
|
||||||
|
|
||||||
|
点击完成 `Tune` 步骤。
|
||||||
|
|
||||||
|
![](img-2/tutorial-kafka-data-loader-07.png)
|
||||||
|
|
||||||
|
在 `Tune` 步骤中,将 `Use earliest offset` 设置为 `True` *非常重要*,因为我们需要从流的开始位置消费数据。 其他没有任何需要更改的地方,进入到 `Publish` 步
|
||||||
|
|
||||||
|
![](img-2/tutorial-kafka-data-loader-08.png)
|
||||||
|
|
||||||
|
我们将该数据源命名为 `wikipedia-kafka`
|
||||||
|
|
||||||
|
最后点击 `Next` 预览摄入规范:
|
||||||
|
|
||||||
|
![](img-2/tutorial-kafka-data-loader-09.png)
|
||||||
|
|
||||||
|
这就是您构建的规范,为了查看更改将如何更新规范是可以随意返回之前的步骤中进行更改,同样,您也可以直接编辑规范,并在前面的步骤中看到它。
|
||||||
|
|
||||||
|
对摄取规范感到满意后,请单击 `Submit`,然后将创建一个数据摄取任务
|
||||||
|
|
||||||
|
![](img-2/tutorial-kafka-data-loader-10.png)
|
||||||
|
|
||||||
|
您可以进入任务视图,重点关注新创建的supervisor。任务视图设置为自动刷新,请等待直到Supervisor启动了一个任务。
|
||||||
|
|
||||||
|
当一项任务开始运行时,它将开始处理其摄入的数据。
|
||||||
|
|
||||||
|
从标题导航到 `Datasources` 视图。
|
||||||
|
|
||||||
|
![](img-2/tutorial-kafka-data-loader-11.png)
|
||||||
|
|
||||||
|
当 `wikipedia-kafka` 数据源出现在这儿的时候就可以被查询了。
|
||||||
|
|
||||||
|
> ![TIPS]
|
||||||
|
> 如果过了几分钟之后数据源还是没有出现在这里,可能是在 `Tune` 步骤中没有设置为从流的开始进行消费数据
|
||||||
|
|
||||||
|
此时,就可以在 `Query` 视图中运行SQL查询了,因为这是一个小的数据集,你可以简单的运行 `SELECT * FROM "wikipedia-kafka"` 来查询结果。
|
||||||
|
|
||||||
|
![](img-2/tutorial-kafka-data-loader-12.png)
|
||||||
|
|
||||||
|
查看[查询教程](../querying/makeNativeQueries.md)以对新加载的数据运行一些示例查询。
|
||||||
|
|
||||||
|
#### 通过控制台提交supervisor
|
||||||
|
|
||||||
|
在控制台中点击 `Submit supervisor` 打开提交supervisor对话框:
|
||||||
|
|
||||||
|
![](img-2/tutorial-kafka-submit-supervisor-01.png)
|
||||||
|
|
||||||
|
粘贴以下规范后点击 `Submit`
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "kafka",
|
||||||
|
"spec" : {
|
||||||
|
"dataSchema": {
|
||||||
|
"dataSource": "wikipedia",
|
||||||
|
"timestampSpec": {
|
||||||
|
"column": "time",
|
||||||
|
"format": "auto"
|
||||||
|
},
|
||||||
|
"dimensionsSpec": {
|
||||||
|
"dimensions": [
|
||||||
|
"channel",
|
||||||
|
"cityName",
|
||||||
|
"comment",
|
||||||
|
"countryIsoCode",
|
||||||
|
"countryName",
|
||||||
|
"isAnonymous",
|
||||||
|
"isMinor",
|
||||||
|
"isNew",
|
||||||
|
"isRobot",
|
||||||
|
"isUnpatrolled",
|
||||||
|
"metroCode",
|
||||||
|
"namespace",
|
||||||
|
"page",
|
||||||
|
"regionIsoCode",
|
||||||
|
"regionName",
|
||||||
|
"user",
|
||||||
|
{ "name": "added", "type": "long" },
|
||||||
|
{ "name": "deleted", "type": "long" },
|
||||||
|
{ "name": "delta", "type": "long" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metricsSpec" : [],
|
||||||
|
"granularitySpec": {
|
||||||
|
"type": "uniform",
|
||||||
|
"segmentGranularity": "DAY",
|
||||||
|
"queryGranularity": "NONE",
|
||||||
|
"rollup": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tuningConfig": {
|
||||||
|
"type": "kafka",
|
||||||
|
"reportParseExceptions": false
|
||||||
|
},
|
||||||
|
"ioConfig": {
|
||||||
|
"topic": "wikipedia",
|
||||||
|
"inputFormat": {
|
||||||
|
"type": "json"
|
||||||
|
},
|
||||||
|
"replicas": 2,
|
||||||
|
"taskDuration": "PT10M",
|
||||||
|
"completionTimeout": "PT20M",
|
||||||
|
"consumerProperties": {
|
||||||
|
"bootstrap.servers": "localhost:9092"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
这将启动supervisor,该supervisor继而产生一些任务,这些任务将开始监听传入的数据。
|
||||||
|
|
||||||
|
#### 直接提交supervisor
|
||||||
|
|
||||||
|
为了直接启动服务,我们可以在Druid的根目录下运行以下命令来提交一个supervisor规范到Druid Overlord中
|
||||||
|
|
||||||
|
```json
|
||||||
|
curl -XPOST -H'Content-Type: application/json' -d @quickstart/tutorial/wikipedia-kafka-supervisor.json http://localhost:8081/druid/indexer/v1/supervisor
|
||||||
|
```
|
||||||
|
如果supervisor被成功创建后,将会返回一个supervisor的ID,在本例中看到的是 `{"id":"wikipedia"}`
|
||||||
|
|
||||||
|
更详细的信息可以查看[Druid Kafka索引服务文档](../DataIngestion/kafka.md)
|
||||||
|
|
||||||
|
您可以在[Druid控制台]( http://localhost:8888/unified-console.html#tasks)中查看现有的supervisors和tasks
|
||||||
|
|
||||||
|
### 数据查询
|
||||||
|
数据被发送到Kafka流之后,立刻就可以被查询了。
|
||||||
|
|
||||||
|
按照[查询教程](./chapter-4.md)的操作,对新加载的数据执行一些示例查询
|
||||||
|
### 清理数据
|
||||||
|
如果您希望阅读其他任何入门教程,则需要关闭集群并通过删除druid软件包下的`var`目录的内容来重置集群状态,因为其他教程将写入相同的"wikipedia"数据源。
|
||||||
|
### 进一步阅读
|
||||||
|
更多关于从Kafka流加载数据的信息,可以查看[Druid Kafka索引服务文档](../DataIngestion/kafka.md)
|
Loading…
Reference in New Issue