{"id":312,"date":"2020-11-27T15:53:29","date_gmt":"2020-11-27T07:53:29","guid":{"rendered":"https:\/\/blog.frost-s.tk\/?p=312"},"modified":"2020-12-30T16:22:49","modified_gmt":"2020-12-30T08:22:49","slug":"atlas-%e9%ab%98%e5%8f%af%e7%94%a8%e9%83%a8%e7%bd%b2","status":"publish","type":"post","link":"https:\/\/blog.frost-s.com\/index.php\/2020\/11\/27\/atlas-%e9%ab%98%e5%8f%af%e7%94%a8%e9%83%a8%e7%bd%b2\/","title":{"rendered":"Atlas \u9ad8\u53ef\u7528\u90e8\u7f72"},"content":{"rendered":"\n<p><a href=\"https:\/\/github.com\/apache\/atlas\">https:\/\/github.com\/apache\/atlas<\/a>&nbsp; \uff08github \u62c9\u53d6\u5bf9\u5e94\u5206\u652f\u4ee3\u7801\uff09<\/p>\n\n\n\n<p>\u672c\u6b21\u90e8\u7f72\u6240\u4f7f\u7528\u7248\u672c\u4e3a2.1-rc3<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/blog.frost-s.com\/wp-content\/uploads\/2020\/12\/image2020-10-29_19-7-15-947x580.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"947\" height=\"580\" data-original=\"https:\/\/blog.frost-s.com\/wp-content\/uploads\/2020\/12\/image2020-10-29_19-7-15-947x580.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-429\"  sizes=\"(max-width: 947px) 100vw, 947px\" \/><\/div><\/figure>\n\n\n\n<p>\u5728\u7f16\u8bd1\u524d\u786e\u5b9a\u597d\u6240\u4f7f\u7528\u5916\u7f6e\u7ec4\u4ef6\u7684\u7248\u672c\uff0c\u4ee5\u514d\u51fa\u73b0\u7248\u672c\u4e0d\u517c\u5bb9\u95ee\u9898<\/p>\n\n\n\n<p>\u5f53\u524datlas\u6240\u4f9d\u8d56\u7ec4\u4ef6\u7248\u672c\u4e8eatlas\u6e90\u7801\u6839\u76ee\u5f55pom.xml\u4e2d\u67e5\u770b<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/blog.frost-s.com\/wp-content\/uploads\/2020\/12\/image2020-10-29_19-17-14-541x447.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"541\" height=\"447\" data-original=\"https:\/\/blog.frost-s.com\/wp-content\/uploads\/2020\/12\/image2020-10-29_19-17-14-541x447.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-430\"\/><\/div><\/figure>\n\n\n\n<p>\u6d4b\u8bd5\u6240\u4f7f\u7528\u7684<strong>elasticsearch<\/strong>\u7248\u672c\u4e3a7.3.2\uff08\u672c\u6b21\u6d4b\u8bd5\u4f7f\u7528elasticsearch\u66ff\u4ee3solr\uff09\uff0c<strong>kafka<\/strong>\u4e3a2.12-2.3.0\uff0c<strong>hbase<\/strong>\u4e3a2.1.0+cdh6.2.1\uff0c<strong>zookeeper<\/strong>\u4e3a3.4.6<\/p>\n\n\n\n<p>1\uff09building atlas\uff08\u6784\u5efaatlas\uff09\uff1a<\/p>\n\n\n\n<p>&nbsp;mvn clean -DskipTests install<\/p>\n\n\n\n<p>2\uff09package atlas\uff08\u6253\u5305atlas\uff09\uff1a<\/p>\n\n\n\n<p>mvn clean -DskipTests package -Pdist<\/p>\n\n\n\n<p>\uff08\u6ce8\uff1a\u5982\u9700\u6253\u5305\u5165\u5185\u5d4c\u7ec4\u4ef6\u53ef\u5728\u540e\u7f00\u52a0\u4e0aembedded-\u7ec4\u4ef6\u540d \uff0c\u793a\u4f8b : mvn clean -DskipTests package -Pdist,embedded-hbase-solr\uff09<\/p>\n\n\n\n<p>\u5b8c\u6210\u540e\u4f1a\u751f\u6210\u5982\u4e0b\u5305\uff08<strong>windows<\/strong>\u7aef\u7f16\u8bd1\uff09<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/blog.frost-s.com\/wp-content\/uploads\/2020\/12\/image2020-10-29_19-3-43-637x482.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"637\" height=\"482\" data-original=\"https:\/\/blog.frost-s.com\/wp-content\/uploads\/2020\/12\/image2020-10-29_19-3-43-637x482.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-431\"\/><\/div><\/figure>\n\n\n\n<p>\u7f16\u8bd1\u5b8c\u6210\u540e\u5c06apache-atlas-${project.version}-bin.tar.gz \u4e0a\u4f20\u81f3\u90e8\u7f72\u673a\u5668<\/p>\n\n\n\n<p>tar -xzvf apache-atlas-${project.version}-bin.tar.gz \u89e3\u538b\u81f3\u5bf9\u5e94\u76ee\u5f55<\/p>\n\n\n\n<p>\u90e8\u7f72\u673a\u5668\u6240\u9700\u524d\u7f6e\u6b65\u9aa4\uff1a<\/p>\n\n\n\n<p>1\uff09hosts\u4e2d\u914d\u7f6e\u76f8\u5173\u4e3b\u673a\u540d\u6620\u5c04\u3002<\/p>\n\n\n\n<p>2\uff09\u786e\u8ba4janusGraph\u5bf9\u5e94\u7ec4\u4ef6\u7248\u672c\u662f\u5426\u517c\u5bb9\uff08hbase\u4ee5\u53caelasticsearch\uff09\u3002<\/p>\n\n\n\n<p>3\uff09\u76f8\u5173\u4e3b\u673a\u80fd\u5426ping\u901a\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Atlas\u9ad8\u53ef\u7528\u5b89\u88c5\u6587\u6863-\u4e00\u3001\u89e3\u538b\u540e\u8fdb\u5165conf\u76ee\u5f55\u4e0batlas-application.properties\u7f16\u8f91\u5bf9\u5e94\u914d\u7f6e\u9879\">\u4e00\u3001\u89e3\u538b\u540e\u8fdb\u5165conf\u76ee\u5f55\u4e0b<strong>atlas-application.properties<\/strong>&nbsp;\u7f16\u8f91\u5bf9\u5e94\u914d\u7f6e\u9879<\/h3>\n\n\n\n<p>1\uff09\u4fee\u6539\u56fe\u5e93\u7d22\u5f15\u4e3aelasticsearch<\/p>\n\n\n\n<p>\u6b64\u5904\u56fe\u5e93\u7d22\u5f15\u7531\u9ed8\u8ba4solr\u4fee\u6539\u4e3aelasticsearch<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"bootstrap4\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#\u00a0Graph\u00a0Search\u00a0Index\natlas.graph.index.search.backend=elasticsearch<\/pre>\n\n\n\n<p>\u6ce8\u91ca\u6389solr\u76f8\u5173\u914d\u7f6e\u9879<\/p>\n\n\n\n<p>\u914d\u7f6eelasticsearch\u76f8\u5173\u9879\uff08\u6b64\u5904\u6d4b\u8bd5ES\u6240\u4f7f\u7528\u53cc\u8282\u70b9\uff09<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"bootstrap4\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">atlas.graph.index.search.hostname=esnode1,esnode2\natlas.graph.index.search.elasticsearch.client-only=true<\/pre>\n\n\n\n<p>2\uff09Hbase\u76f8\u5173\u914d\u7f6e<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"bootstrap4\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">atlas.graph.storage.backend=hbase2\natlas.graph.storage.hbase.table=apache_atlas_janus<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"bootstrap4\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#Hbase\n#For\u00a0standalone\u00a0mode\u00a0,\u00a0specify\u00a0localhost\n#for\u00a0distributed\u00a0mode,\u00a0specify\u00a0zookeeper\u00a0quorum\u00a0here\natlas.graph.storage.hostname=node1:2181,node2:2181,node3:2181\natlas.graph.storage.hbase.regions-per-server=1\natlas.graph.storage.lock.wait-time=10000<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"bootstrap4\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#########\u00a0\u00a0Entity\u00a0Audit\u00a0Configs\u00a0\u00a0#########\natlas.audit.hbase.tablename=apache_atlas_entity_audit\n&lt;a\nhref=\"http:\/\/atlas.audit.zookeeper.session.timeout.ms\/\">atlas.audit.zookeeper.session.timeout.ms&lt;\/a>=1000\natlas.audit.hbase.zookeeper.quorum=node1:2181,node2:2181,node3:2181<\/pre>\n\n\n\n<p>3\uff09kafka\u76f8\u5173\u914d\u7f6e<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"bootstrap4\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">atlas.notification.embedded=false\natlas.kafka.data=\/home\/service\/apache-atlas-2.1.0\/data\/kafka\natlas.kafka.zookeeper.connect=node1:2181,node2:2181,node3:2181\natlas.kafka.bootstrap.servers=node1:9092,node2:9092,node3:9092\n&lt;a href=\"http:\/\/atlas.kafka.zookeeper.session.timeout.ms\/\">atlas.kafka.zookeeper.session.timeout.ms&lt;\/a>=400\n&lt;a href=\"http:\/\/atlas.kafka.zookeeper.connection.timeout.ms\/\">atlas.kafka.zookeeper.connection.timeout.ms&lt;\/a>=200\n&lt;a href=\"http:\/\/atlas.kafka.zookeeper.sync.time.ms\/\">atlas.kafka.zookeeper.sync.time.ms&lt;\/a>=20\n&lt;a href=\"http:\/\/atlas.kafka.auto.commit.interval.ms\/\">atlas.kafka.auto.commit.interval.ms&lt;\/a>=1000\n&lt;a href=\"http:\/\/atlas.kafka.hook.group.id\/\">atlas.kafka.hook.group.id&lt;\/a>=atlas<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"bootstrap4\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">atlas.kafka.enable.auto.commit=false\natlas.kafka.auto.offset.reset=earliest\n&lt;a href=\"http:\/\/atlas.kafka.session.timeout.ms\/\">atlas.kafka.session.timeout.ms&lt;\/a>=30000\natlas.kafka.offsets.topic.replication.factor=1\n&lt;a href=\"http:\/\/atlas.kafka.poll.timeout.ms\/\">atlas.kafka.poll.timeout.ms&lt;\/a>=1000\n\natlas.notification.create.topics=true\natlas.notification.replicas=1\natlas.notification.topics=ATLAS_HOOK,ATLAS_ENTITIES\natlas.notification.log.failed.messages=true\natlas.notification.consumer.retry.interval=500\natlas.notification.hook.retry.interval=1000<\/pre>\n\n\n\n<p>4\uff09atlas HA\u76f8\u5173\u914d\u7f6e<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"bootstrap4\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#########\u00a0\u00a0High\u00a0Availability\u00a0Configuration\u00a0########\natlas.server.ha.enabled=true\n####\u00a0Enabled\u00a0the\u00a0configs\u00a0below\u00a0as\u00a0per\u00a0need\u00a0if\u00a0HA\u00a0is\u00a0enabled\u00a0#####\natlas.server.ids=id1,id2\natlas.server.address.id1=hostname1:21000\natlas.server.address.id1=hostname2:21000\natlas.server.ha.zookeeper.connect=node1:2181,node2:2181,node3:2181\n&lt;a href=\"http:\/\/atlas.server.ha.zookeeper.retry.sleeptime.ms\/\">atlas.server.ha.zookeeper.retry.sleeptime.ms&lt;\/a>=1000\natlas.server.ha.zookeeper.num.retries=3\n&lt;a href=\"http:\/\/atlas.server.ha.zookeeper.session.timeout.ms\/\">atlas.server.ha.zookeeper.session.timeout.ms&lt;\/a>=20000\n##\u00a0if\u00a0ACLs\u00a0need\u00a0to\u00a0be\u00a0set\u00a0on\u00a0the\u00a0created\u00a0nodes,\u00a0uncomment\u00a0these\u00a0lines\u00a0and\u00a0set\u00a0the\u00a0values\u00a0##\n#atlas.server.ha.zookeeper.acl=&lt;scheme>:&lt;id>\n#atlas.server.ha.zookeeper.auth=&lt;scheme>:&lt;authinfo><\/pre>\n\n\n\n<p>\u4e3b\u673a\u548c\u4ece\u673a\u914d\u7f6e\u9879\u4fee\u6539\u4e3a\u5bf9\u5e94hostname<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"bootstrap4\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#########\u00a0\u00a0Server\u00a0Properties\u00a0\u00a0#########\natlas.rest.address=&lt;a href=\"http:\/\/10-177-204-71.lineage-atlas.dgtest01:21000\/\">hostname:21000&lt;\/a>\n#\u00a0If\u00a0enabled\u00a0and\u00a0set\u00a0to\u00a0true,\u00a0this\u00a0will\u00a0run\u00a0setup\u00a0steps\u00a0when\u00a0the\u00a0server\u00a0starts<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Atlas\u9ad8\u53ef\u7528\u5b89\u88c5\u6587\u6863-\u4e8c\u3001conf\/hbase\u4e0bhbase-site.xml\u914d\u7f6e\">\u4e8c\u3001conf\/hbase\u4e0b&nbsp;hbase-site.xml \u914d\u7f6e<\/h3>\n\n\n\n<p>\u586b\u5199atlas\u5b89\u88c5\u5bf9\u5e94\u8def\u5f84<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"bootstrap4\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;configuration>\n&lt;property>\n&lt;name>hbase.rootdir&lt;\/name>\n&lt;value>${url_prefix}${atlas_data}\/hbase-root&lt;\/value>\n&lt;\/property>\n&lt;property>\n&lt;name>hbase.zookeeper.property.dataDir&lt;\/name>\n&lt;value>${atlas_data}\/hbase-zookeeper-data&lt;\/value>\n&lt;\/property>\n&lt;property>\n&lt;name>&lt;a href=\"http:\/\/hbase.master.info\/\">hbase.master.info&lt;\/a>.port&lt;\/name>\n&lt;value>61510&lt;\/value>\n&lt;\/property>\n&lt;property>\n&lt;name>&lt;a href=\"http:\/\/hbase.regionserver.info\/\">hbase.regionserver.info&lt;\/a>.port&lt;\/name>\n&lt;value>61530&lt;\/value>\n&lt;\/property>\n&lt;property>\n&lt;name>hbase.master.port&lt;\/name>\n&lt;value>61500&lt;\/value>\n&lt;\/property>\n&lt;property>\n&lt;name>hbase.regionserver.port&lt;\/name>\n&lt;value>61520&lt;\/value>\n&lt;\/property>\n&lt;\/configuration><\/pre>\n\n\n\n<p>conf \u76ee\u5f55\u4e0batlas-env.sh<\/p>\n\n\n\n<p>\u6dfb\u52a0hbase conf\u76ee\u5f55<\/p>\n\n\n\n<p>export HBASE_CONF_DIR=\/home\/service\/apache-atlas-2.1.0\/conf\/hbase<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Atlas\u9ad8\u53ef\u7528\u5b89\u88c5\u6587\u6863-\u4e09\u3001\u9a8c\u8bc1HA\u662f\u5426\u5f00\u542f\u6210\u529f\">\u4e09\u3001\u9a8c\u8bc1HA\u662f\u5426\u5f00\u542f\u6210\u529f<\/h3>\n\n\n\n<p>\u914d\u7f6e\u5b8c\u6210\u540e\u4e3b\u673a\u4ee5\u53ca\u4ece\u673a\u542f\u52a8atlas<\/p>\n\n\n\n<p>bin\/\u76ee\u5f55\u4e0b\u6267\u884c<\/p>\n\n\n\n<p>.\/atlas_start.py<\/p>\n\n\n\n<p>\u67e5\u770b\u9ad8\u53ef\u7528\u662f\u5426\u6210\u529f<\/p>\n\n\n\n<p>.\/atlas_admin.py -status<\/p>\n\n\n\n<p>\u4e3b\u673a\u663e\u793aACTIVE&nbsp;\u72b6\u6001&nbsp;&nbsp;<\/p>\n\n\n\n<p>\u4ece\u673a\u663e\u793aPASSIVE&nbsp;\u72b6\u6001<\/p>\n\n\n\n<p>\u5219\u6210\u529f<\/p>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/github.com\/apache\/atlas&nbsp; \uff08github \u62c9\u53d6\u5bf9\u5e94\u5206\u652f\u4ee3\u7801\uff09 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":316,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/posts\/312"}],"collection":[{"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/comments?post=312"}],"version-history":[{"count":4,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/posts\/312\/revisions"}],"predecessor-version":[{"id":432,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/posts\/312\/revisions\/432"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/media\/316"}],"wp:attachment":[{"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/media?parent=312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/categories?post=312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.frost-s.com\/index.php\/wp-json\/wp\/v2\/tags?post=312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}