如何处理分组规则

时间:2017-01-30 19:07:36

标签: fiware-cygnus

我正在尝试将一些顺序保存到我指定的Cosmos空间中。目前我正在存储如下图所示的数据:

.../webhdfs/v1/user/[ USERNAME ]/[ Fiware-Service ]/[ Fiware-ServicePath ]/TEMPORAL1_PhysicalTest/TEMPORAL1_PhysicalTest.txt
.../webhdfs/v1/user/[ USERNAME ]/[ Fiware-Service ]/[ Fiware-ServicePath ]/TEMPORAL2_PhysicalTest/TEMPORAL2_PhysicalTest.txt
.../webhdfs/v1/user/[ USERNAME ]/[ Fiware-Service ]/[ Fiware-ServicePath ]/TEMPORAL3_PhysicalTest/TEMPORAL3_PhysicalTest.txt
.../webhdfs/v1/user/[ USERNAME ]/[ Fiware-Service ]/[ Fiware-ServicePath ]/TEMPORAL4_PhysicalTest/TEMPORAL4_PhysicalTest.txt

TEMPORAL1表示我的实体ID和PhysicalTest各自的类型。 然而,我想知道基于以下(假设)结构存储数据的适当机制:

.../webhdfs/v1/user/[ USERNAME ]/[ Fiware-Service ]/[ Fiware-ServicePath ]/physicaltests/TEMPORAL1_PhysicalTest.txt
.../webhdfs/v1/user/[ USERNAME ]/[ Fiware-Service ]/[ Fiware-ServicePath ]/physicaltests/TEMPORAL2_PhysicalTest.txt
.../webhdfs/v1/user/[ USERNAME ]/[ Fiware-Service ]/[ Fiware-ServicePath ]/physicaltests/TEMPORAL3_PhysicalTest.txt
.../webhdfs/v1/user/[ USERNAME ]/[ Fiware-Service ]/[ Fiware-ServicePath ]/physicaltests/TEMPORAL4_PhysicalTest.txt

我认为可以通过分组规则解决;虽然不确定。

如果是这种情况,我已经按照以下方式确定了我的grouping_rules.conf,没有成功的结果,因为我最终得到的结构如下所示:

{
    "grouping_rules": [
        {
            "id": 1,
            "fields": [
                "entityType"
            ],
            "regex": "PhysicalTest.*",
            "destination": "PhysicalTest",
            "fiware_service_path": "/[ Fiware-Service ]/physicaltests"
        }
    ]
}

1 个答案:

答案 0 :(得分:1)

这样的事情是做不到的。 Cygnus按照此模式(*)存储数据al HDFS文件夹:

/user/<username>/<service>/<service-path>/<entity-id>_<entity-type>/<entity-id>_<entity-type>.txt

<entity-id>_<entity-type>/<entity-id>_<entity-type>.txt部分的结构不能改变,在某种意义上总是(通知或映射 - 将在后面解释)实体ID和(通知或映射 - 将在后面解释)实体类型将用于编写它。请注意这样的结构在子文件夹和文件中复制实体ID和类型连接。为什么?因为Hadoop适用于目录,而不是文件。因此,为了允许单个实体分析,这种结构是在Cygnus中设计的。

据说,可以使用Name Mappings来改变上述结构,Grouping Rules是一种允许您修改实体ID和/或实体类型(以及其他类型)的功能。这是一个非常强大的功能,因为您可以说,例如,&#34;所有类型的实体将看到他们的ID映射到我选择的单个ID&#34;,这意味着所有实体将存储在相同的子目录/文件:

/user/<username>/<service>/<service-path>/<unique-entity-id>_<entity-type>/<unique-entity-id>_<entity-type>.txt

我猜这是最接近你需要的。

你提到的deprecated怎么样?它们是Name Mappings之前的东西。他们允许我们修改实体ID和类型的整个连接(我们称之为&#34;目的地&#34;),但是解释的结构也得到了维护:

/user/<username>/<service>/<service-path>/<destination>/<destination>.txt

分组规则enter image description here支持Name Mappings。

(*)或者,如果配置<username>,则可以避免service_as_namespace = true级别。如果您的FIWARE服务与有效的HDFS用户匹配,则此功能非常有用:

/user/<service>/<service-path>/<entity-id>_<entity-type>/<entity-id>_<entity-type>.txt