小编zar*_*zyk的帖子

如何在Kibana + Elasticsearch中进行脚本聚合?

假设我在Elasticsearch中通过Logstash存储广告显示和广告点击事件的日志,并在Kibana 4中显示.我想计算一个简单的指标,如点击率(Click-Through-Rate),即:

CTR = #clicks/#displays.

首先,有人知道Elasticsearch + Kibana是否可以做到?我认为没有可能在Kibana做这件事.我正在考虑通过脚本聚合在原始Elasticsearch中完成它.但我不知道如何在Kibana中定义这样的东西.

任何关于如何做的想法都将非常受欢迎!解释说不可能这样做的评论也很有价值.

elasticsearch kibana-4

15
推荐指数
1
解决办法
5505
查看次数

将数百万个密钥保持在Spark Streaming工作状态两个月是否可行?

我正在尝试解决Spark Streaming中的一个(简化的)问题:假设我有一个用户做的事件日志,其中每个事件都是一个元组(用户名,活动,时间),例如:

("user1", "view", "2015-04-14T21:04Z")
("user1", "click", "2015-04-14T21:05Z")
Run Code Online (Sandbox Code Playgroud)

现在我想收集用户的事件来做一些分析.假设输出是对以下内容的一些分析:

("user1", List(("view", "2015-04-14T21:04Z"),("click", "2015-04-14T21:05Z"))
Run Code Online (Sandbox Code Playgroud)

这些事件应该保存2个月.在此期间,可能会有大约500万这样的事件,以及数以百万计的独特用户,这些都是这里的关键.

我的问题是:

  • updateStateByKey当我有数百万个密钥存储时,在DStream上做这样的事情是否可行?
  • 我是对的,DStream.window这里没用,当我有2个月的长度窗口,并希望有几秒的幻灯片?

PS我发现,updateStateByKey每个幻灯片上的所有键都会调用它,这意味着每隔几秒就会调用数百万个时间.这让我对这个设计产生了怀疑,我宁愿考虑以下替代解决方案:

  • 使用卡桑德拉为州
  • 使用Trident状态(可能使用Cassandra)
  • 使用Samza进行国家管理.

apache-spark spark-streaming

6
推荐指数
1
解决办法
568
查看次数

如何在 Ansible 中为给定路径的所有父母、祖先设置 acl?

我需要确保给定的用户能够以 ansible 读取给定的文件。当然,我使用“acl”模块(使用 setfacl)来授予用户读取权限。这很容易。但我还需要确保用户可以“执行”文件路径树中的所有目录。例如: read /var/lib/secured/directory/file eXecute /var/lib/secured/directory eXecute /var/lib/secured eXecute /var/lib eXecute /var eXecute / 当然我正在写一个角色,它不知道路径有多少元素,所以我需要在 Ansible 中有一个动态循环。但我不知道如何实现这一目标。我将不胜感激任何想法。

ansible

6
推荐指数
1
解决办法
957
查看次数

即使等待条件已经改变,AbstractQueuedSynchronizer.acquireShared也会无限期地等待

我写了一个使用AbstractQueuedSynchronizer的简单类.我写了一个代表"门"的类,如果打开则可以传递,如果关闭则可以阻塞.这是代码:

public class GateBlocking {

  final class Sync extends AbstractQueuedSynchronizer {
    public Sync() {
      setState(0);
    }

    @Override
    protected int tryAcquireShared(int ignored) {
      return getState() == 1 ? 1 : -1;
    }

    public void reset(int newState) {
      setState(newState);
    }
  };

  private Sync sync = new Sync();

  public void open() {
    sync.reset(1);
  }

  public void close() {
    sync.reset(0);
  }

public void pass() throws InterruptedException {
    sync.acquireShared(1);
  }

};
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果一个线程阻塞传递方法,因为门被关闭而另一些线​​程同时打开门,被阻塞的线程不会被中断 - 它无限地阻塞.这是一个测试,显示它:

public class GateBlockingTest {

    @Test
    public void parallelPassClosedAndOpenGate() throws Exception{
        final …
Run Code Online (Sandbox Code Playgroud)

java java.util.concurrent

5
推荐指数
1
解决办法
143
查看次数

使用 Scala 读取 Spring Boot ConfigurationProperties

我在 Scala 中使用 Spring Boot。我想通过 @ConfigurationProperties 注释读取具有 Scala 类型的案例类的属性。我已经知道我将无法注释 Scala 案例类,因为 Spring Boot 不支持基于构造的属性注入。但至少我想将集合(列表和映射)从配置映射到基于 Scala 的类型。这样我就可以编写一个配置类:

@Component
@ConfigurationProperties("kafka")
case class KafkaConfig() {
  @BeanProperty
  var bootstrapServers: List[String] = _

}
Run Code Online (Sandbox Code Playgroud)

并像这样编写一个配置文件 application.yml:

kafka:
  bootstrapServers:
    - "node1:9092"
    - "node2:9092"
Run Code Online (Sandbox Code Playgroud)

这可能吗?我尝试在这种情况下使用转换器,如下所示:

import org.springframework.core.convert.converter.Converter
import scala.collection.JavaConverters._

@Component
@ConfigurationPropertiesBinding
class JavaListToList extends Converter[java.util.List[Any], List[Any]] {
  override def convert(s: java.util.List[Any]): List[Any] = {
    s.asScala.toList
  }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为 Spring 尝试不转换已经读取的 (java) 列表,而是实例化一个空的 Scala 列表并附加到它。所以我肯定会在这里走错路。

我将不胜感激。

scala spring-boot

5
推荐指数
1
解决办法
1067
查看次数

如何在 ElasticSearch 中使用自定义分析器?

我想尝试支持波兰语的 Elasticsearch,但我遇到了一些问题。我安装了Stempel Analysis Plugin,我正在尝试创建一个使用波兰语分析器的索引:

curl -XPUT localhost:9200/polisz -d '{ 
 "mappings" : {
  "_default_" : {
   "properties" : {
    "text_entry" : { "type": "string", "analyzer": "polish" }
   }
  }
 }
}
'
Run Code Online (Sandbox Code Playgroud)

但是我收到一个关于未识别分析器的错误:

{
   "status" : 400,
   "error" : "MapperParsingException[mapping [_default_]]; nested: MapperParsingException[Analyzer [polish] not found for field [text_entry]]; "
}
Run Code Online (Sandbox Code Playgroud)

安装插件并重新启动 ES 后我应该做些什么吗?我找不到有关使用该插件的任何具体说明,所以也许我只是在做一些明显错误的事情?

关于如何设置环境的更多详细信息:我通过命令安装并运行带有 ES 和 kibana 的 docker 镜像:

docker pull minimum2scp/es-kibana
docker run -d -p 8080:80 -p 9200:9200 --name es minimum2scp/es-kibana
Run Code Online (Sandbox Code Playgroud)

我通过命令安装了 Stempel 插件:

host$ docker …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-plugin

3
推荐指数
1
解决办法
1596
查看次数