假设我在Elasticsearch中通过Logstash存储广告显示和广告点击事件的日志,并在Kibana 4中显示.我想计算一个简单的指标,如点击率(Click-Through-Rate),即:
CTR = #clicks/#displays.
首先,有人知道Elasticsearch + Kibana是否可以做到?我认为没有可能在Kibana做这件事.我正在考虑通过脚本聚合在原始Elasticsearch中完成它.但我不知道如何在Kibana中定义这样的东西.
任何关于如何做的想法都将非常受欢迎!解释说不可能这样做的评论也很有价值.
我正在尝试解决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每个幻灯片上的所有键都会调用它,这意味着每隔几秒就会调用数百万个时间.这让我对这个设计产生了怀疑,我宁愿考虑以下替代解决方案:
我需要确保给定的用户能够以 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 中有一个动态循环。但我不知道如何实现这一目标。我将不胜感激任何想法。
我写了一个使用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) 我在 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 列表并附加到它。所以我肯定会在这里走错路。
我将不胜感激。
我想尝试支持波兰语的 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)