使用REST API在Apache Atlas中的实体之间添加关系的正确方法是什么?在查看REST API的文档时,我很难分辨出什么一些字段的含义是必需的(不是必需的)(以及如果未输入该字段会发生什么)或默认值应该是什么(因为示例使用的是看起来像占位符的值(例如,是什么) provenanceType 或 propagateTags 字段似乎期望某种枚举值,但从未指定有效选项)。
有人可以提供真实/有效值的示例吗?例如。如果已经在Atlas中添加了两个实体E1和E2并想在两者之间建立关系,则想做类似...
curl -X POST --header\'Content-Type:application / json; charset = UTF-8\'--header\'Accept:application / json\'-d\'{ simplified json }\'\'https:// atlas-server-hostname:21000 / v2 / relationship\'
尝试
[hph_etl @ HW03〜] $ curl -vv -u admin:admin -X POST --header\'内容类型:application / json; charset = UTF-8\'--header\'Accept:application / json\'-d\'{\\
\" createTime\":1565135406,\\
\" createdBy\":\" hph_etl\",\\
\" end1\":{\\
\" guid\":\" 2ddcda5b-2489-4636-a9ab-12b199c02422\",\\
\" typeName\" :\" hdfs_path\" \\
},\\
\" end2\":{\\
\" guid\":\" a33f45de-13d0-4a30-9df7-b0e02eb0dfd5\",\\
\" typeName\":\" hdfs_path\" \\
},\\
\" gui d\":\" 2ddcda5b-2489-4636-a9ab-12b199c02422\",\\
\" propagateTags\":\" TWO_TO_ONE\",\\
\" status\":\"有效\",\\
\" typeName\":\" hdfs_path\" \\
}\'\'http://HW03.co.local:21000 / api / atlas / v2 / relationship\'
*关于connect()到HW03.co.local端口21000(#0)
*尝试172.18.4.48 ...
*已连接到HW03.co.local(172.18.4.48)端口21000(#0)
*使用用户\" admin\"的$ Basic进行服务器身份验证
POST / v2 /关系HTTP / 1.1
授权:基本xxxxxx
用户代理:curl / 7.29.0
主持人:HW03.co.local:21000
内容类型:application / json; charset = UTF-8
接受:application / json
内容长度:442
*上传完全发送出去:442个字节中的442个字节
HTTP / 1.1 404未找到
日期:2019年8月7日星期三01:07:44 GMT
Set-Cookie:ATLASSESSIONID = xxxxxx; Path = /; HttpOnly
X-Frame-Options:DENY
X-Content-Type-Options:nosniff
X-XSS-Protection:1; mode = block
严格的运输安全性:max-age = 31536000; includeSubDomains
内容类型:text / html; charset = utf-8
内容长度:2265
服务器:Jetty(9.3.14.v20161028)
!doctype html
!-
....
*
* http://www.apache.org/licenses/LICENSE-2.0
....
-
!-[如果IE 8]
script type =\" text / javascript\"
函数Redirect(){
window.location.assign(\" login.jsp\");
}
Redirect();
/ script
![endif]-
!-用于IE8的HTML5 shim和Respond.js对HTML5元素和媒体查询的支持-
!-[如果IE 7]
script src =\" js / external_lib / es5-shim.min.js\" / script
script src =\" js / external_lib / respond.min.js\" / script
![endif]-
html lang =\" zh-CN\"
head
meta charset =\" utf-8\"
元http-equiv =\" X-UA-Compatible\" content =\" IE = edge\"
meta name =\" viewport\" content =\" width = device-width,initial-scale = 1\"
title Atlas / title
....
/ head
body
div id =\" wrapper\"
!-页面内容开始-
div id =\" page-content-wrapper\"
div class =\" page-title clearfix\"
h3 寻找东西吗? / h3
p 很抱歉。您要查找的网址在Apache Atlas中无法正常运行。请尝试从 a href =\" index.html\" Apache Atlas Home / a / p 中导航。
/ div
/ div
!-页面内容结尾-
/ div
/ body
/ html
*与主机HW03.co.local的连接#0保持不变
无法正常工作不知道该如何处理错误消息。甚至是
curl -vv -u admin:admin -X POST --header的简单示例\'内容类型:application / json; charset = UTF-8\'--header\'接受:application / json\'-d\'{\\
\" end1\":{\\
\" guid\": \" 2ddcda5b-2489-4636-a9ab-12b199c02422\" \\
},\\
\" end2\":{\\
\" guid\":\" a33f45de-13d0-4a30-9df7-b0e02eb0dfd5 \" \\
},\\
\" typeName\":\" AtlasRelationshipDef\" \\
}\'\'http://HW03.ucera.local:21000 / api / atlas / v2 / relationship \'
抛出类似的无信息错误
*上传完全发送出去:211个字节中的211个
HTTP / 1.1 500内部服务器错误
日期:2019年8月12日星期一19:57:44 GMT
Set-Cookie:ATLASSESSIONID = xxxxxx; Path = /; HttpOnly
过期:星期四,1970年1月1日00:00:00 GMT
X-Frame-Options:DENY
X-Content-Type-Options:nosniff
X-XSS-Protection:1; mode = block
严格的运输安全性:max-age = 31536000; includeSubDomains
内容类型:文本/纯文本
传输编码:大块
服务器:Jetty(9.3.14.v20161028)
*与主机HW03.co.local的连接#0保持不变
处理您的请求时出错。已记录(ID 6d64bc3a1a910e46)
检查 / var /中的日志在Atlas主机服务器上的logs / atlas / application.log 上,我还能看到另一条非参考性的错误消息...
[hph_etl @ HW03地图集] $ cat application.log | grep -C 2 6d64bc3a1a910e46
在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)
在java.lang.Thread.run(Thread.java:745)
2019-08-12 09:57:44,880错误-[pool-2-thread-10-8a5535b1-6544-4f9b-b3ad-8bec5e8d6fcd:]〜处理请求时出错:6d64bc3a1a910e46(ExceptionMapperUtil:32)
javax .ws.rs.WebApplicationException
at com.sun.jersey.server.impl.uri.rules.TerminatedRule.accept(TerminatedRule.java:66)
请注意,为了获得关系链接所需的指导,即使Hortonworks似乎也只提供了糟糕的解决方案。
这里可能出什么问题了?
解决方案
可以使用实体创建现有实体之间的Atlas关系吗? end1和end2中的GUID或uniqueAttributes可以是 qualifiedName 或任何其他唯一属性。
请注意,顶级typeName是关系def
如果 hive_table 与 hive_db 之间存在关系,则该关系为typeName。 def typeName是: hive_table_db
因此,如果要在 hive_table 和 hive_db之间创建关系,请求为:
POST:/ api / atlas / v2 / relationship
{
\" typeName\":\" hive_table_db\",
\" end1\":{
\" typeName\":\" hive_table\",
\" uniqueAttributes\":{
\" qualifiedName\":\"数据库enabled @ cluster\"
}
},
\" end2\":{
\" typeName\":\" hive_db\",
\" uniqueAttributes\":{
\" qualifiedName\":\" db @ cluster\"
}
}
}
对于预定义的Atlas类型,您可以在 relationshipAttributeDefs 字段内的定义中找到关系typeName
GET :/ api / atlas / v2 / types / typedef / name / hive_db
给出以下响应:
{
\" category\":\" ENTITY\",
\" guid\":\" 78c44290-2ed8- 461b-953d-3965d9bb44ca\",
\" createdBy\":\" root\",
\" updatedBy\":\" root\",
\" createTime\":1548175553859,
\" updateTime\":1548175822249 ,
\"版本\":2,
\"名称\":\" hive_db\",
\"描述\":\" hive_db\",
\" typeVersion\":\" 1.2\",
\" serviceType\":\"蜂巢\",
\" attributeDefs\":[
{
\" name\":\" clusterName\",
\" typeName\":\" string\",
\" isOptional\":false,
\" cardinality\":\" SINGLE\",
\" valuesMinCount\":1,
\" valuesMaxCount\":1,
\" isUnique\":false,
\" isIndexable\":true,
\" includeInNotification\":true,
\" searchWeight\":-1
},
{
\" name\":\" location\",
\" typeName\":\" string\",
\" isOptional\": true,
\" cardinality\":\" SINGLE\",
\" valuesMinCount\":0,
\" valuesMaxCount\":1,
\" isUnique\":false,
\" isIndexable \":false,
\" includeInNotification\":false,
\" searchWeight\":-1
},
{
\" name\":\" parameters\",
\" typeName\":\" map string,string \",
\" isOptional\":true,
\" cardinality\":\" SINGLE\",
\" valuesMinCount\":0,
\" valuesMaxCount\":1,
\" isUnique\":false,
\" isIndexable\":false,
\" includeInNotification\":false,
\" searchWeight\":-1
},
{
\" name\":\" ownerType\",
\" typeName\":\" hive_principal_type\",
\" isOptional\":true,
\" cardinality\":\" SINGLE\",
\" valuesMinCount\":0,
\" valuesMaxCount\":1,
\" isUnique\":错误,
\" isIndexable\":错误,
\" includeInNotification\":错误,
\" searchWeight\":-1
}
],
\" superTypes\":[
\"资产\"
],
\" subTypes\":[],
\" relationshipAttributeDefs\":[
{
\" name\" :\"表格\",
\" typeName\":\" array hive_table \",
\" isOptional\":true,
\" cardinality\":\" SET\",
\" valuesMinCount\":-1,
\" valuesMaxCount\":-1,
\" isUnique\":false,
\" isIndexable\":false,
\" includeInNotification\":false,
\" searchWeight\":-1,
\" constraints\":[
{
\" type\":\" ownedRef\"
}
],
\" relationshipTypeName\":\" hive_table_db\",
\" isLegacyAttribute\":false
},
{
\" name\":\" ddlQueries\" ,
\" typeName\":\" array hive_db_ddl \",
\" isOptional\":true,
\" cardinality\":\" SET\",
\" valuesMinCount\":-1,
\" valuesMaxCount\":-1,
\" isUnique\":false,
\" isIndexable\":false,
\" includeInNotification\":false,
\" searchWeight\":-1 ,
\"约束\":[
{
\" type\":\" ownedRef\"
}
],
\" relationshipTypeName\":\" hive_db_ddl_queries\",
\" isLegacyAttribute\":false
},
{
\" name\":\"含义\",
\" typeName\":\" array&AtlasGlossaryTerm \",
\" isOptional\":true,
\"基数\": \" SET\",
\" valuesMinCount\":-1,
\" valuesMaxCount\":-1,
\" isUnique\":false,
\" isIndexable\":false,
\" includeInNotification\":否,
\" searchWeight\":-1,
\" relationshipTypeName\":\" AtlasGlossarySemanticAssignment\",
\" isLegacyAttribute\":false
}
]
}
此外,您需要确保end1和end2中的typeName符合关系def,您可以在其中输入类型定义:
GET:/ api / atlas / v2 / types / typedef / name / hive_table_db
{
\" category\":\" RELATIONSHIP\",
\" guid\":\" 79257a2c-407c-4c0b-b3ae -04b1b3a8d649\",
\" createdBy\":\" root\",
\" updatedBy\":\" root\",
\" createTime\":1548175553894,
\" updateTime\":1548175553894,
\"版本\":1,
\"名称\":\" hive_table_db\",
\"描述\":\" hive_table_db\",
\" typeVersion\":\" 1.0\",
\" serviceType\" \":\"蜂巢\",
\" attributeDefs\":[],
\" relationshipCategory\":\" COMPOSITION\",
\" propagateTags\":\" NONE\",
\" endDef1\":{
\" type\":\" hive_table\",
\" name\":\" db\",
\" isContainer\":false,
\" cardinality\":\" SINGLE\",
\" isLegacyAttribute\":true
},
\" endDef2\":{
\" type\":\" hive_db\",
\" name\":\" tables\",
\" isContainer \":是的,
\" cardinality\":\" SET\",
\" isLegacyAttribute\":false
}
}
本文地址:IT屋 在Atlas实体之间添加关系的简单示例?
本文链接: http://atlasref.immuno-online.com/view-748753.html