我正在尝试在本地计算机上重现Amazon EMR集群.为此,我已经安装了最新的稳定版Hadoop - 2.6.0.现在我想访问一个S3存储桶,就像我在EMR集群中一样.
我在core-site.xml中添加了aws凭据:
<property>
<name>fs.s3.awsAccessKeyId</name>
<value>some id</value>
</property>
<property>
<name>fs.s3n.awsAccessKeyId</name>
<value>some id</value>
</property>
<property>
<name>fs.s3.awsSecretAccessKey</name>
<value>some key</value>
</property>
<property>
<name>fs.s3n.awsSecretAccessKey</name>
<value>some key</value>
</property>
Run Code Online (Sandbox Code Playgroud)
注意:由于密钥上有一些斜杠,我已使用%2F转义它们
如果我尝试列出存储桶的内容:
hadoop fs -ls s3://some-url/bucket/
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ls:没有用于方案的FileSystem:s3
我再次编辑了core-site.xml,并添加了与fs相关的信息:
<property>
<name>fs.s3.impl</name>
<value>org.apache.hadoop.fs.s3.S3FileSystem</value>
</property>
<property>
<name>fs.s3n.impl</name>
<value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value>
</property>
Run Code Online (Sandbox Code Playgroud)
这次我得到一个不同的错误:
-ls: Fatal internal error
java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3.S3FileSystem not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2074)
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2578)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591)
Run Code Online (Sandbox Code Playgroud)
不知怎的,我怀疑纱线分布没有必要的罐子能够读取S3,但我不知道从哪里获得这些.任何指向这个方向的人都会非常感激.
我在许多不同的时区(和时间段)使用不同的数据库,并且通常产生问题的一件事是日期/时间定义.
出于这个原因,并且由于日期是对起始值的引用,为了跟踪它的计算方式,我尝试存储基准日期; 即:该特定计算机/数据库支持的最短日期;
如果我看得很清楚,这取决于RDBMS和类型的特定存储.在SQL Server中,我发现了几种计算这个"基准日期"的方法;
SELECT CONVERT(DATETIME, 0)
Run Code Online (Sandbox Code Playgroud)
要么
SELECT DATEADD(MONTH, 0, 0 )
Run Code Online (Sandbox Code Playgroud)
甚至像这样的演员:
DECLARE @300 BINARY(8)
SET @300 = 0x00000000 + CAST(300 AS BINARY(4))
set @dt=(SELECT CAST(@300 AS DATETIME) AS BASEDATE)
print CAST(@dt AS NVARCHAR(100))
Run Code Online (Sandbox Code Playgroud)
(其中@dt是日期时间变量)
我的问题是,是否有类似的方法来计算PostgreSQL中的基准日期,即:支持的最小日期值是否在所有计算的基础上?
从date类型的描述,我可以看到支持的最小日期是公元前4713年,但有没有办法以编程方式获取此值(例如作为格式化的日期字符串),就像我在SQL Server中一样?
在关系数据库上,我有一个通过外键连接的两个表,在一个典型的一对多关系上.我想将此模式转换为ElasticSearch,因此我研究并发现了两个选项:嵌套和父子.我的最终目标是在Kibana 4中可视化这个数据集.
亲子似乎是最合适的,所以我将根据官方的ES文档和我在网上找到的一些例子来描述我遵循的步骤.
curl -XPUT http://server:port/accident_struct -d '
{
"mappings" : {
"event" : {
},
"details": {
"_parent": {
"type": "event"
} ,
"properties" : {
}
}
}
}
';
Run Code Online (Sandbox Code Playgroud)
这里我创建索引accident_struct,它包含两种类型(对应于两个关系表):事件和细节.
事件是父项,因此每个详细文档都有一个与之关联的事件.
然后我使用批量API上传文档.对于活动:
{"index":{"_index":"accident_struct","_type":"event","_id":"17f14c32-53ca-4671-b959-cf47e81cf55c"}}
{values here...}
Run Code Online (Sandbox Code Playgroud)
详情如下:
{"index":{"_index":"accident_struct","_type":"details","_id": "1", "_parent": "039c7e18-a24f-402d-b2c8-e5d36b8ad220" }}
Run Code Online (Sandbox Code Playgroud)
该事件对儿童一无所知,但每个孩子(细节)都需要设置其父母.在ES文档中,我看到使用"parent"设置父级,而在其他示例中,我使用"_parent"看到它.我想知道什么是正确的选择(虽然在这一点上,没有一个适合我).
请求成功完成,我可以看到索引中包含的文档数对应于事件+类型的总和.
在ES上,我也可以向父母询问父母的子女和父母.例如:
curl -XPOST host:port/accident_struct/details/_search?pretty -d '{
"query" : {
"has_parent" : {
"type" : "event",
"query" : {
"match_all" : {}
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
在Kibana上设置索引后,我能够列出父和子的所有字段.但是,如果我转到"发现"选项卡,则仅列出父字段.
如果我取消选中一个显示"隐藏缺失字段"的框,子文档中的字段将显示为灰色,并显示错误消息(请参阅图像)

我做错了什么还是Kibana4不支持亲子?如果它不受支持,代表这种关系的最佳替代方案是什么?
我对检测密度变化的区域中的集群感兴趣,例如用户在城市中生成的数据,为此,我采用了OPTICS算法。
与DBSCAN不同,OPTICS算法不会产生严格的集群分区,而是会增加数据库的顺序。为了产生群集分区,我使用OPTICSxi,这是另一种基于OPTICS输出产生分类的算法。几乎没有能够从OPTICS输出中提取集群分区的库,而ELKI的OPTICSxi实现就是其中之一。
对我来说很清楚,如何解释DBSCAN的结果(尽管设置“有意义的”全局参数不是那么容易)。DBSCAN检测到簇的“原型”,其特征是密度,表示为每个区域的点数(分钟/ε)。OPTICSxi的结果似乎很难解释。
我有时会在OPTICSxi的输出中检测到两种现象,而我无法解释。一种是“尖峰”簇的外观,它们链接了地图的各个部分。我无法解释它们,因为它们似乎由很少的点组成,而且我不理解算法是如何决定将它们分组在同一群集中的。它们真的代表密度变化的“走廊”吗?查看基础数据,看起来不是那样。您可以在下面的图像中看到这些“尖峰”。

我无法解释的另一个现象是,有时存在相同层次级别的“重叠”集群。OPTICSxi基于数据库的OPTICS排序(例如树状图),该图中没有重复的点。
由于这是分层聚类,因此我们认为较低级别的群集包含较高级别的群集,并且在构建凸包时会强制执行该想法。但是,我看不出有在同一个层次上与其他集群相交的集群的任何理由,这实际上意味着某些点将具有双重集群“成员资格”。在下面的图像中,我们可以看到一些具有相同层次级别(0)的相交群集。

最后,我想让您留下的最重要的想法/问题是:我们希望在OPTICSxi聚类分类中看到什么?这个问题与参数OPTICSxi的任务紧密相关。
由于我几乎看不到针对特定聚类问题进行OPTICSxi的研究,因此我很难找到最佳聚类分类。即:可以提供一些有意义/有用的结果,并为DBSCAN集群增加一些价值的方法。为了帮助我回答这个问题,我使用不同的参数组合进行了多次OPTICSxi运行,并选择了三个参数进行讨论。

在此运行中,我使用了较大的epsilon(2Km)。该值的含义是我们接受大型群集(最大2Km);由于算法“合并”了簇,因此我们最终会得到一些非常大的簇,这些簇几乎肯定具有低密度。我喜欢此输出,因为它公开了分类的层次结构,并且实际上使我想起了DBSCAN的多个运行,它们具有不同的参数组合(针对不同的密度),这是OPTICS的广告“强度”。如前所述,较小的群集对应于层次结构级别中的较高级别和较高的密度。

在此运行中,即使“ contrast”参数与上一次运行相同,我们也会看到大量的簇。这主要是因为我选择的Minpts数量较少,这表明我们接受的点数较少的聚类。由于这种情况下的epsilon较短,因此我们看不到这些大簇占据了地图的很大一部分。我发现此输出不如前一个有趣,这主要是因为,即使我们具有分层结构,在同一级别上也有许多聚类,并且其中许多相交。在解释方面,我可以看到一个与上一个相似的整体“形状”,但实际上在许多小簇中却离散了,这些簇很容易被忽略为“噪音”。

此运行具有一个与上一个相似的参数选择,不同之处在于分钟数更大。结果是,不仅我们发现了更少的集群,而且它们的重叠较少,而且它们大多处于同一水平。
从为DBSCAN增加价值的角度来看,我将选择第一个参数组合,因为它提供了数据的层次结构图,清楚地显示了哪些区域更密集。恕我直言,最后一个参数组合无法提供密度的整体分布的概念,因为它在整个研究区域内都发现了相似的簇。我有兴趣阅读其他意见。
cluster-analysis hierarchical-clustering dbscan elki optics-algorithm
我有一个以毫秒为单位的时间戳:
1420066991000
Run Code Online (Sandbox Code Playgroud)
这转化成UTC:
Wed Dec 31 2014 23:03:11
Run Code Online (Sandbox Code Playgroud)
和当地时间:
Thu Jan 01 2015 00:03:11
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用to_timestamp将其转换为Postgres中的时间戳,则会给我错误的日期时间:
select to_timestamp(1420066991000);
46970-02-17 13:03:20+00
Run Code Online (Sandbox Code Playgroud)
由于to_timestamp 需要双精度输入,因此我也这样做:
select to_timestamp(1420066991000.0);
46970-02-17 13:03:20+00
Run Code Online (Sandbox Code Playgroud)
但是结果是一样的。
我在Postgres配置中是否缺少某些设置,例如某些时区设置?还是一个错误?