当前位置: 首页 > news >正文

免费seo网站推荐一下软件如何做网站哪个站推广

免费seo网站推荐一下软件,如何做网站哪个站推广,公众号官方,word电子版个人简历免费1、前言 Apache Atlas 是托管于 Apache 旗下的一款元数据管理和治理的产品#xff0c;目前在大数据领域应用颇为广泛#xff0c;可以很好的帮助企业管理数据资产#xff0c;并对这些资产进行分类和治理#xff0c;为数据分析#xff0c;数据治理提供高质量的元数据信息。…1、前言 Apache Atlas 是托管于 Apache 旗下的一款元数据管理和治理的产品目前在大数据领域应用颇为广泛可以很好的帮助企业管理数据资产并对这些资产进行分类和治理为数据分析数据治理提供高质量的元数据信息。 随着企业业务量的逐渐膨胀数据日益增多不同业务线的数据可能在多种类型的数据库中存储最终汇集到企业的数据仓库中进行整合分析这个时候如果想要追踪数据来源理清数据之间的关系将会是一件异常头疼的事情倘若某个环节出了问题追溯的成本将是巨大的于是 Atlas 在这种背景下应运而生了通过它我们可以非常方便的管理元数据并且可以追溯表级别列级别之间的关系血缘关系为企业的数据资产提供强有力的支撑和保障。Atlas 支持从 HBase 、Hive、Sqoop、Storm、Kafka 中提取和管理元数据同时也可以通过 Rest Api 的方式自行定义元数据模型生成元数据。 本文我们着重介绍一下 Atlas 的相关概念帮助大家更好的理解 Atlas同时详细讲解如何通过 Rest Api 的方式自定义数据模型生成血缘关系以便开发自己的个性化需求。 2、Atlas 原理及相关概念 元数据 元数据其实就是描述数据的数据比如表字段视图等每个业务系统可能都会自己定义表字段视图这些数据从哪来到往哪去数据之间是否存在关联和其他系统的数据是否存在重复和矛盾字段这些就是元数据管理要解决的问题也是 Atlas 要解决的问题。 运行原理 Atlas 的原理其实并不难理解主要是通过内部提供的脚本读取数仓中的数据库结构生成数据模型存储到 Atlas的 Hbase 中同时通过 hook 的方式监听数仓中的数据变化分析执行的 sql 语句从而生成表与表列与列的血缘关系依赖在前台展示给用户查看。 数仓支持 Atlas 对 Hive 支持最好我们都知道Hive 是依赖于 Hadoop 的数据存储在 HDFS 中Atlas 有专门的 shell 脚本可以直接运行读取 Hive 的表结构等元数据信息同步到 Atlas 的存储库中自动生成元数据模型同时 Atlas 提供的 HiveHook 可以监听 Hive 的数据变化根据 Hive 执行的 sql 推断出数据与数据之间的关系生成血缘关系图如果我们想要分析其他数据存储介质的元数据和血缘关系Atlas 的支持并不是很理想。但通常情况下我们会定时把业务库如 mysqloracle 中的数据定时同步到数仓中整合分析而数仓我们一般都会采用 Hadoop 的生态体系所以这一点并不是问题。 架构图解 以下是 Atlas 的架构图解可以看出Atlas 所依赖的生态体系是异常庞大的这也直接导致了它部署起来十分繁琐本文不再讲解 Atlas 的部署网上相关的教程有很多感兴趣的朋友可以自己搜索尝试。 核心组件概念 Atlas 中主要有以下核心组件这些需要我们着重了解接下来我们通过 Rest Api 自定义建模其实就是对以下组件的增删查改操作。 1. Type 元数据类型定义这里可以是数据库表列等还可以细分 mysql 表( mysql_table )oracle 表( oracle_table )等atlas自带了很多类型如 DataSetProcess 等一般情况下数据相关的类型在定义类型的时候都会继承 DataSet而流程相关的类型则会继承 Process便于生成血缘关系。我们也可以通过调用 api 自定义类型。这是一切的起点定义完类型之后才能生成不同类型的元数据实体生成血缘关系我个人更喜欢把元数据类型称之为建模。 2. Classification 分类通俗点就是给元数据打标签分类是可以传递的比如 A 视图是基于 A 表生成的那么如果 A 表打上了 a 这个标签A 视图也会自动打上 a 标签这样的好处就是便于数据的追踪。 3. Entity 实体表示具体的元数据Atlas 管理的对象就是各种 Type 的 Entity。 4. Lineage 数据血缘表示数据之间的传递关系通过 Lineage 我们可以清晰的知道数据的从何而来又流向何处中间经历了哪些操作这样一旦数据出现问题可以迅速追溯定位是哪个环节出现错误。 3、Altas安装 参考链接请结合实际情况使用 1、https://blog.csdn.net/hshudoudou/article/details/123899947 2、https://blog.csdn.net/javaThanksgiving/article/details/130505251 4、Altas使用 Altas 成功部署之后使用还是很简单的这是登录界面用户名密码默认是 adminadmin 进入主页点击右上角 switch to new 使用新版界面更直观 页面左侧便是 Atlas 的类型树点击树节点的某个类型可以查看下面的实体这里我们点击 mysql_table 可以看到下面有很多表这些都是我之前自己利用 Rest Api 上传定义的。 下面我们来讲解一下如何通过 Rest Api 的方式自定义类型生成实体创建血缘关系。 5、Atlas Rest Api 详解及示例 我们点击主页上方的 Help-》API Documentation便可以查看 Atlas 所有的开放接口 有一点我们需要注意Atlas 的接口在使用的时候是需要鉴权的所以我们构建 http 请求的时候需要带上用户名和密码认证信息本次示例中我们使用 atlas-client-v2 开源组件来进行 Atlas 的 api 调用。 本次示例我们定义一个 my_db 类型my_table 类型并且让 my_db 一对多 my_table然后创建 test_db 实体到 my_db 下创建 test_table_source 和 test_table_target 实体到 my_table 下并且定义 test_table_target 的数据来自 test_table_source生成两个实体的血缘关系依赖。 自定义 my_db 和 my_table 类型 我们对 my_db 和 my_table 类型进行定义在 Atlas 的Rest Api 中允许一个请求定义多种类型在这里我们先构建 json 请求体然后再通过编码方式实现二者对比更容易理解json 请求体如下关键地方有注释 {enumDefs: [],structDefs: [],classificationDefs: [],//类型定义entityDefs: [{name: my_db,//数据类型的定义约定俗成继承Atlas自带的DataSetsuperTypes: [DataSet],//服务类型便于在界面分组显示类型serviceType: my_type,typeVersion: 1.1,attributeDefs: []},{name: my_table,superTypes: [DataSet],serviceType: my_type,typeVersion: 1.1,attributeDefs: []}],//定义类型之间的关系relationshipDefs: [{name: my_table_db,serviceType: my_type,typeVersion: 1.1,//关系类型ASSOCIATION关联关系没有容器存在1对1 //AGGREGATION容器关系1对多而且彼此可以相互独立存在 //COMPOSITION容器关系1对多但是容器中的实例不能脱离容器存在relationshipCategory: AGGREGATION,//节点一endDef1: {type: my_table,//表中关联的属性名称对应下面的 my_dbname: db,//代表这头是不是容器isContainer: false,//cardinality 三种类型SINGLE, LIST, SETcardinality: SINGLE},// 节点2endDef2: {type: my_db,name: tables,isContainer: true,// db 包含 tabletable不能重复所以类型设置为 SETcardinality: SET},// 推导tag NONE 不推导propagateTags: NONE}] } 编码实现 引入 pom 依赖注意如果要集成到自己的业务系统之中业务系统如果使用了其他的日志框架需要去除 slf4j-log4j12 依赖否则日志框架会起冲突导致启动失败另外 atlas-client-common 中依赖了 commons-configuration 1.10如果业务系统中有低版本依赖记得排除不然二者会冲突导致 client 初始化失败。 dependencies!-- Apache Atlas --dependencygroupIdorg.apache.atlas/groupIdartifactIdatlas-client-common/artifactIdversion2.1.0/versionexclusionsexclusionartifactIdslf4j-log4j12/artifactIdgroupIdorg.slf4j/groupId/exclusion/exclusions/dependency!-- Apache Atlas Client Version2 --dependencygroupIdorg.apache.atlas/groupIdartifactIdatlas-client-v2/artifactIdversion2.1.0/versionexclusionsexclusionartifactIdslf4j-log4j12/artifactIdgroupIdorg.slf4j/groupId/exclusionexclusionartifactIdlog4j/artifactIdgroupIdlog4j/groupId/exclusion/exclusions/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion${fastjson.version}/version/dependency/dependencies 引入 atlas-application.properties必须得有否则会初始化失败 atlas.rest.addresshttp://127.0.0.1:21000 代码实现如下对照json非常容易理解 AtlasClientV2 atlasClientV2 new AtlasClientV2(new String[]{http://127.0.0.1:21000}, new String[]{admin, admin});//父类集合SetString superTypes new HashSet();superTypes.add(AtlasBaseTypeDef.ATLAS_TYPE_DATASET);//定义myTypeAtlasTypesDef myType new AtlasTypesDef();//定义myDbAtlasEntityDef myDb new AtlasEntityDef();myDb.setName(my_db);myDb.setServiceType(my_type);myDb.setSuperTypes(superTypes);myDb.setTypeVersion(1.1);//定义mytableAtlasEntityDef myTable new AtlasEntityDef();myTable.setName(my_table);myTable.setServiceType(my_type);myTable.setSuperTypes(superTypes);myTable.setTypeVersion(1.1);//定义relationshipDefAtlasRelationshipDef relationshipDef new AtlasRelationshipDef();relationshipDef.setName(my_table_db);relationshipDef.setServiceType(my_type);relationshipDef.setTypeVersion(1.1);relationshipDef.setRelationshipCategory(AtlasRelationshipDef.RelationshipCategory.AGGREGATION);relationshipDef.setPropagateTags(AtlasRelationshipDef.PropagateTags.NONE);//定义endDef1AtlasRelationshipEndDef endDef1 new AtlasRelationshipEndDef();endDef1.setType(my_table);endDef1.setName(db);endDef1.setIsContainer(false);endDef1.setCardinality(AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE);relationshipDef.setEndDef1(endDef1);//定义endDef2AtlasRelationshipEndDef endDef2 new AtlasRelationshipEndDef();endDef2.setType(my_db);endDef2.setName(tables);endDef2.setIsContainer(true);endDef2.setCardinality(AtlasStructDef.AtlasAttributeDef.Cardinality.SET);relationshipDef.setEndDef2(endDef2);//entityDefsListAtlasEntityDef entityDefs new ArrayList(2);entityDefs.add(myDb);entityDefs.add(myTable);myType.setEntityDefs(entityDefs);//relationshipDefsListAtlasRelationshipDef relationshipDefs new ArrayList(1);relationshipDefs.add(relationshipDef);myType.setRelationshipDefs(relationshipDefs);//查询是否已有my_db类型,没有则创建SearchFilter filter new SearchFilter();filter.setParam(name, my_db);AtlasTypesDef allTypeDefs atlasClientV2.getAllTypeDefs(filter);if (allTypeDefs.getEntityDefs().isEmpty()) {//请求 rest apiatlasClientV2.createAtlasTypeDefs(myType);} 执行以上代码执行完毕后前往 Atlas 主页查看类型已成功创建 查看类型模型图 类型创建完毕接下来我们进行实体的创建。 创建实体 test_dbtest_table_source 和 test_table_target json 如下 //my_db 实体 {typeName: my_db,attributes: {qualifiedName: test_db,name: test_db,description: 测试创建db} } //test_table_source 实体 {typeName: my_table,attributes: {qualifiedName: test_table_source,name: test_table_source,description: 测试创建test_table_source},relationshipAttributes: {db: {typeName: my_db,//my_db的guid创建完my_db后会返回guid: xxxx}} } //test_table_target 实体 {typeName: my_table,attributes: {qualifiedName: test_table_target,name: test_table_target,description: 测试创建test_table_target},relationshipAttributes: {db: {typeName: my_db,guid: xxx}} } 代码实现如下 //创建实体 test_dbAtlasEntity testDb new AtlasEntity();testDb.setTypeName(my_db);MapString, Object attributes new HashMap();attributes.put(qualifiedName, test_db);attributes.put(name, test_db);attributes.put(description, 测试创建db);testDb.setAttributes(attributes);MapString, String queryAttributes new HashMap();queryAttributes.put(qualifiedName, test_db);String myDbGuid null;try {//查询不到会报错AtlasEntity.AtlasEntityWithExtInfo extInfo atlasClientV2.getEntityByAttribute(my_db, queryAttributes);myDbGuid extInfo.getEntity().getGuid();} catch (AtlasServiceException e) {if (ClientResponse.Status.NOT_FOUND.equals(e.getStatus())) {AtlasEntity.AtlasEntityWithExtInfo extInfo new AtlasEntity.AtlasEntityWithExtInfo(testDb);//请求EntityMutationResponse response atlasClientV2.createEntity(extInfo);myDbGuid response.getGuidAssignments().values().toArray(new String[]{})[0];}}//创建与db的关系MapString, Object relationShipAttr new HashMap();MapString, String dbMap new HashMap();dbMap.put(guid, myDbGuid);dbMap.put(typeName, my_db);relationShipAttr.put(db, dbMap);//创建实体 test_table_sourceAtlasEntity testTableSource new AtlasEntity();testTableSource.setTypeName(my_table);attributes.put(qualifiedName, test_table_source);attributes.put(name, test_table_source);attributes.put(description, 测试创建test_table_source);testTableSource.setAttributes(attributes);testTableSource.setRelationshipAttributes(relationShipAttr);queryAttributes.put(qualifiedName, test_table_source);try {//atlasClientV2.updateEntity(new AtlasEntity.AtlasEntityWithExtInfo(testTableSource));AtlasEntity.AtlasEntityWithExtInfo extInfo atlasClientV2.getEntityByAttribute(my_table, queryAttributes);testTableSource extInfo.getEntity();} catch (AtlasServiceException e) {if (ClientResponse.Status.NOT_FOUND.equals(e.getStatus())) {AtlasEntity.AtlasEntityWithExtInfo extInfo new AtlasEntity.AtlasEntityWithExtInfo(testTableSource);//请求EntityMutationResponse response atlasClientV2.createEntity(extInfo);testTableSource.setGuid(response.getGuidAssignments().values().toArray(new String[]{})[0]);}}//创建实体 test_table_targetAtlasEntity testTableTarget new AtlasEntity();testTableTarget.setTypeName(my_table);attributes.put(qualifiedName, test_table_target);attributes.put(name, test_table_target);attributes.put(description, 测试创建test_table_target);testTableTarget.setAttributes(attributes);testTableTarget.setRelationshipAttributes(relationShipAttr);queryAttributes.put(qualifiedName, test_table_target);try {//atlasClientV2.updateEntity(new AtlasEntity.AtlasEntityWithExtInfo(testTableTarget));AtlasEntity.AtlasEntityWithExtInfo extInfo atlasClientV2.getEntityByAttribute(my_table, queryAttributes);testTableTarget extInfo.getEntity();} catch (AtlasServiceException e) {if (ClientResponse.Status.NOT_FOUND.equals(e.getStatus())) {AtlasEntity.AtlasEntityWithExtInfo extInfo new AtlasEntity.AtlasEntityWithExtInfo(testTableTarget);//请求EntityMutationResponse response atlasClientV2.createEntity(extInfo);testTableTarget.setGuid(response.getGuidAssignments().values().toArray(new String[]{})[0]);}} 执行代码完毕后查看类的树形图发现已经产生了实体 我们点击右侧的 test_db 实体可以看到它的基本信息也可以看到它的 relationship 信息包含了 test_table_source 和 test_table_target 两个实体 查看 relationship 信息包含 test_table_source 和 test_table_target 创建 test_table_source 和 test_table_target 的血缘关系依赖 前面我们提到定义 test_table_target 的数据来自 test_table_source血缘关系依赖在 Atlas 中其实也是作为实体 Entity 存在只不过继承的父类是 Process这样可以定义 inputs 和 outputs 属性构建血缘关系json 如下 {typeName: Process,attributes: {name: test_process,qualifiedName: test_process,description: test_table_target 的数据来自 test_table_source,inputs: [{typeName: my_table,//test_table_source的guid创建实体从返回的信息中获取guid: xxx}],outputs: [{typeName: my_table,test_table_target的guid创建实体从返回的信息中获取guid: xxx}]} } 代码实现如下 AtlasEntity lineage new AtlasEntity();//设置为process类型构建血缘lineage.setTypeName(AtlasBaseTypeDef.ATLAS_TYPE_PROCESS);attributes.put(qualifiedName, test_process);attributes.put(name, test_process);attributes.put(description, test_table_target 的数据来自 test_table_source);attributes.put(inputs, getLineAgeInfo(testTableSource));attributes.put(outputs, getLineAgeInfo(testTableTarget));lineage.setAttributes(attributes);queryAttributes.put(qualifiedName, test_process);System.out.println(SingletonObject.OBJECT_MAPPER.writeValueAsString(lineage));try {//查询是否存在atlasClientV2.getEntityByAttribute(AtlasBaseTypeDef.ATLAS_TYPE_PROCESS, queryAttributes);} catch (AtlasServiceException e) {if (ClientResponse.Status.NOT_FOUND.equals(e.getStatus())) {//创建AtlasEntity.AtlasEntityWithExtInfo extInfo new AtlasEntity.AtlasEntityWithExtInfo(lineage);atlasClientV2.createEntity(extInfo);}}//构建inputs和outputsprivate static ListMapString, String getLineAgeInfo(AtlasEntity entity) {ListMapString, String list new ArrayList();MapString, String map new HashMap();map.put(guid, entity.getGuid());map.put(typeName, entity.getTypeName());list.add(map);return list;} 执行以上代码然后打开主页点击 my_table 中的 test_table_source查看 lineage 标签血缘关系已成功构建 至此我们通过 Atlas Rest Api 的方式自行建模创建实体构建血缘关系就完成了。 元数据管理数据治理在当下仍然是一个热门的话题同时它也可以帮助我们更好的支撑企业的数据资产更好的分析数据为企业的发展决策提供有效的帮助。 引用链接 1、https://blog.csdn.net/hshudoudou/article/details/123899947 2、https://blog.csdn.net/javaThanksgiving/article/details/130505251 3、原文 https://blog.csdn.net/m0_37719874/article/details/124245209
http://www.dnsts.com.cn/news/113274.html

相关文章:

  • 自己建立网站怎么建注册域名和建立网站的过程
  • 云服务器怎么上传网站外包给网站建设注意事项
  • 玉田县建设局网站wordpress如何优化速度
  • 网站建设的方案模板端游网络游戏排行榜
  • 医院网站icp备案吗北京网站备案流程
  • 大兴网站建设优化seo2021企业公司大黄页
  • 九江专业网站建设定制360免费wifi创建失败怎么回事
  • 合肥网站关键词微信分销网站建设哪家好
  • 网络宣传网站建设wordpress用户同步
  • 深圳网站建设 营销汉化wordpress 购物
  • 怎么编写网站没有网站怎样做外贸
  • 大连营商环境建设局网站2345网址导航用户中心
  • vr 做的网站网站 微信认证
  • 南宁模板建站哪家好网站建设维护协议
  • 公司做铸造的招聘网站都有哪些深圳网站建设公司联系方式
  • 制作网站空间域名枣庄三合一网站开发
  • 东莞网站建设备案建设有限公司首页
  • 自己做炉石卡牌的网站安徽省六安市城乡建设厅网站
  • 聊城手机网站建设方案做健身网站步骤
  • 专业做网站平台SQL如何建网站
  • 金华大企业网站建设有哪些锦江建设和交通局网站
  • 网站建设吧手游排行榜2021前十名
  • 有了域名后怎么做网站电商网站建设心得
  • 知道一个网站怎么知道是谁做的百度优化西安网站建设工程
  • 网站主题风格用户服务管理系统
  • 专做中医教学网站建个网站要花多少钱
  • 榆垡网站建设搬瓦工一键WordPress
  • 各大网站推荐wordpress邀请有奖
  • 如何用自己电脑做销售网站网页制作专业前台
  • php网站后台无法上传图片网站高级?O置