• [大赛资讯] 多文件
    请问挑战赛题目是否可以在 zip 里打包多个文件,运行时从里面读入?
  • [行业动态] 【行业动态】MWC2023 | 华为首次呈现城市智能体系列海外解决方案
    2023年世界移动大会(MWC2023)期间,华为政务一网通军团将携城市智能体解决方案亮相,向全球分享华为助力城市数字化和政务数字化转型的实践经验。数字时代,科技与应用的协同、智慧增效是城市在数字化转型背景下的新发展路径。城市智能体聚合联接、云、计算、大数据、AI、物联感知、行业应用等数字技术,构成云网边端协同的一体化智能系统,再融汇、治理城市全域数据、持续运营,从而让城市顺畅运行、均衡发展、自我优化、生生不息。让城市更聪明、更智慧,这是华为助力城市数字化转型的方案和目标,华为持续充实城市智能体架构,切身践行对象数字化、过程数字化、规则数字化,服务广大政府客户,助力城市数字化转型。在中东,华为数字孪生技术助力某城市实现了数字世界的一比一建模和映射,态势感知帮助管理人员实时掌握城市的每一次脉动。在非洲,华为数字技术助力新城建设,提高政府运转效能,加速国家数字化转型进程,缩小数字世界差距。在中国,华为将数字孪生技术应用在深圳福田区城市管理、社会治理中,大大提高了政府管理效率,打造了数字时代技术与应用深度融合的优秀典范。华为密切关注城市数字化和政务数字化转型的需求和挑战,在本次大会期间,华为重点展示了城市数字孪生、IOC态势感知、智能视频会议3大场景化解决方案:城市数字孪生把通过AI分析获取的城市环境信息、全域感知信息、热点事件等进行融合,并结合时空计算服务、全域感知服务、可视计算服务,构建时空融合的城市智能底座,形成感知-认知-仿真-优化-可视的全链路城市智能中枢技术体系,为城市打造一个智能孪生空间。IOC态势感知即智能运营中心,是华为公司基于数字孪生、大数据、人工智能等技术,同时集成GIS信息数据、BIM建筑信息、物联网感知数据、业务及告警等数据打造的城市治理解决方案。其将态势监测、应急指挥等多重功能汇聚一身。让数字融入业务,助力城市管理者“看得清晰”,“管理高效”。智能视频会议基于华为自身近30年的音视频技术沉淀以及十余万员工无数次会议的经验积累,通过运用高清稳定的音视频技术、清晰流畅的数据共享协作技术,同时对众多形态各异终端设备的无缝衔接支持,最终为客户提供全场景覆盖、简单易用、快速部署、智慧高效的视频会议方案。未来,华为愿携手各方力量一起,深度融合数字技术与行业场景,“共筑城市智能体,深耕城市数字化”,共同助力建设善感知、会思考、可进化、有温度的“生命之城”。——转自“华为中国”公众号
  • [解决方案] 【解决方案】华为云DLI实时数据湖解决方案介绍
    本文主要分析并介绍传统实时数据湖解决方案、华为云DLI实时数据湖解决方案和相关的客户案例。云服务介绍:DLI Flink:是完全兼容Flink开源生态,提供基于Flink 1.12开源深度优化的流处理服务DWS:兼容PostgreSQL/Oracle生态的分析型数据库服务RDS:提供基于MySQL/PostgreSQL/SQL Server的在线关系型云数据库服务CSS: 提供托管的分布式搜索能力,兼容Elasticsearch、Kibana、Cerebro等软件 1.   传统实时数据湖解决方案采用 Debezium 订阅 MySQL 的 Binlog  传输到 Kafka,后端是由计算程序从 Kafka 里消费,最后将数据写入到其他存储。Kafka 消息队列做消峰、解耦,经Flink进行流式ETL后,再将数据写入到目的端。目的端可以是各种DB,数据湖,实时数仓和离线数仓。 但是该方案也有明显缺陷:部署难度大:方案中数据采集链路长,额外增加了组件部署、运维成本,技术门槛较高,无法做到可视化操作。数据重复:云原生Debezium可能存在消息重复。数据一致性:由于Kafka中接收的消息存在重复,导致Flink sink端在保证数据的一致性上存在难度。 2.   华为云现有实时数据湖解决方案与业界传统的实时数据湖解决方案相比,华为云现有实时数据湖解决方案采用 DRS 数据复制服务订阅 MySQL 的 Binlog  传输到 分布式消息服务DMS,再由DLI Flink从 DMS 里消费,最后将数据写入到其他存储。同时,支持的源端较丰富,DLI Flink除了支持开源存储引擎外,同时对于华为云云服务等进行了深度优化,能够更好的支撑客户实时数据分析和同步。 方案优势:操作可视化:全程可视化操作,上手门槛低支持源端丰富: DRS支持对应的数据库种类繁多,包括Mysql、PostgreSQL、Oracle、GaussDB、MongoDB等。低时延:在金融、科技等一系列对数据处理实时性方面有非常高要求的行业,至关重要数据一致性:DLI Flink结合DMS确保数据最终一致性。 3.   Flink CDC介绍在 DLI Flink 1.12 版本中引入了 CDC 机制,CDC 的全称是 Change Data Capture,用于捕捉数据库表的增删改查操作,是目前成熟的同步数据库变更方案。Flink CDC Connectors 是 Apache Flink 的一组源连接器,是可以从 MySQL、PostgreSQL 数据直接读取全量数据和增量数据的 Source Connectors。 4.   华为云DLI实时数据湖解决方案方案优势:流程简便:省去了传统CDC,采集数据库binlog到Kafka的过程,将采集、计算都在DLI flink中完成。全程可视化操作,上手门槛低,集成进入DGC作业调度,与Spark离线、openLooKeen交互式作业数据复用、元数据统一降低成本、减少数据冗余:与传统华为云实时大数据方案相比,数据库与DLI flink链路中间,可以省去DRS数据复制服务于DMS kafka分布式消息服务的成本,并减少了数据冗余。缩短时延:在金融、科技等一系列对数据处理实时性方面有非常高要求的行业,至关重要 5.   实时日志分析解决方案介绍一句话应用场景:在复杂业务场景下,存在海量繁杂的日志信息,需要拥有能够实时更新的强大全文信息检测能力。 CSS云搜索服务,是一个基于Elasticsearch且完全托管的在线分布式搜索服务。能为用户提供结构化、非结构化文本的多条件检索、统计、BI报表功能。5.1 实时日志分析解决方案方案优势:无需Flink本身提供CDC变更数据捕获功能。历史、变更数据统一输出到DMS/Kafka中,DLI Flink再订阅DMS/Kafka进行实时消费。此外,DRS支持对应的数据库种类繁多,包括Mysql、PostgreSQL、Oracle、GaussDB、MongoDB等。 5.2 进阶CDC实时日志分析解决方案方案优势:Flink 支持读取CDC源表,会先读取数据库的历史全量数据,并平滑切换到Binlog读取上,保证数据的完整读取。链路简洁、时延降低、节省总体成本。 6.   实时数仓解决方案介绍一句话应用场景:该方案旨在为客户分析师团队提供可实时追加更新数据的秒级增强型简单ETL+实时BI分析的场景化解决方案。 DWS数据仓库服务是一种基于华为云基础架构和平台的在线数据处理数据库,能够为各行业提供有竞争力的PB级海量大数据分析能力。6.1 实时数仓解决方案方案优势:无需Flink本身提供CDC变更数据捕获功能。历史、变更数据统一输出到DMS/Kafka中,DLI Flink再订阅DMS/Kafka进行实时消费。此外,DRS支持对应的数据库种类繁多,包括Mysql、PostgreSQL、Oracle、GaussDB、MongoDB等。 6.2 进阶CDC实时数仓解决方案方案优势:Flink 支持读取CDC源表,会先读取数据库的历史全量数据,并平滑切换到Binlog读取上,保证数据的完整读取。链路简洁、时延降低、节省总体成本。 7.   当前客户实时解决方案介绍目前点触科技、爱库存、能链、富米等多家NA客户均采用该实时解决方案方案价值:免运维:Serverless云服务,无需客户运维,聚焦业务开发,降低人力投入成本,优化基础IT设施易开发:全链路可视化开发,DLI Flink提供简单易用的Flink SQL开发和调试能力,轻松掌握实时数据湖统一引擎:DLI Flink统一提供引擎运维、升级能力,全兼容开源Flink能力 客户诉求:运维难度高:自建Kafka、Flink等自运维难度高,需要投入额外人力进行组件升级维护开发效率低:开源Flink不具备可视化开发界面,作业开发依赖命令行+jar,管理复杂实时引擎混乱:自建实时引擎版本较多,存在历史遗留问题,多版本管理和升级都比较复杂维表管理混乱:维表存放位置较多,没有很好的统一,导致数据源连接多,维护复杂 
  • [技术干货] 部署ELK采集k8s日志
    ELK代表三个开源软件的缩写,提供一套完整的企业级日志平台解决方案。分别是:Elasticsearch:搜索、分析和存储数据Logstash :采集日志、格式化、过滤,最后将数据推送到Elasticsearch存储Kibana:数据可视化还包括一个日志文件处理的插件Beats :集合了多种单一用途数据采集器,用于实现从边缘机器向Logstash和Elasticsearch发送数据。里面应用最多的是Filebeat,是一个轻量级日志采集器。
  • [基础组件] ElasticSearch 单节点入库性能测试
    【验收目的】 验证Elasticsearch单节点入库性能指标 【前置条件】 1.集群已经安装完成并正常运行。 2.每个实例分配内存30G,且单节点所有实例内存不超过节点内存的一半(比如节点为128内存,则部署2个实例)。 3.客户端安装在管理控制节点(例安装目录为“/opt/client"),客户端数量与数据节点数量保持一致。 4.获取相应测试工具,解压后对应目录获取Elasticsearch性能工具esarrayGA.rar,解压esarrayGA.rar,解压后将esarrayGA上传到所有客户端节点 (例如目录为“/opt/client",其中用于性能测试的jar包为es-sec-1K.jar、es-sec-5K.jar)。 【测试过程】 1.在Elasticsearch集群创建索引,每个客户端创建1个索引,如:myindex-001、myindex-002和myindex-003,设置索引mapping信息,mapping设 置请参考附件esperf-mapping.txt , 根据不同性能指标创建索引时修改esperf-mapping.txt文件中对应参数。 number_of_replicas:副本数 enabled:是否存储原始数据。 2.在FusionInsight Manager界面选择“系统 > 权限 > 用户 > 添加用户”,创建用户estest,加入elasticsearch、supergroup组,主组为 supergroup。 3.使用root用户登录客户端所在节点,进入客户端安装目录执行 cd /opt/client source bigdata_env kinit estest,初始化及修改密码 4.“系统 > 权限 > 用户 > 更多”,下载estest用户凭证。 5.解压用户凭证,上传至“/opt/client/esarrayGA/conf” 6.修改测试工具esarrayGA的配置文件/opt/esarrayGA/conf/espara.properties。 isindex:设置为1,表示写入索引 httpUrl:指定实例IP和端口及索引信息(IP和端口,每个节点选择一个即可) index:写入的索引名称,各客户端节点中工具分别设置为myindex-001到myindex-003 issecurity:设置为1,表示为安全模式 threadNum:并发线程数,可以逐步增加线程数,工具运行后CPU达到100%为最佳 processRecordNum:写入的索引数量,设置为2亿 其他设置不需要修改。 7.修改测试工具esarrayGA的配置文件/opt/esarrayGA/conf/jaas.conf principal:用户名,修改为estest@HADOOP.COM keyTab:用户凭证目录,修改为"/opt/esarrayGA/conf/user.keytab" 8.在每个客户端节点同时执行java -jar es-sec-1K.jar或java -jar es-sec-5K.jar启动工具写入,数据写入完成后会输出写入耗时。 9.写入完成后,执行,统计3个索引的store.size,记录写入索引的总大小(X.X.X.X修改为集群的Elasticsearch节点IP)。 curl --tlsv1.2 --negotiate -k -v -u: -XGET https://X.X.X.X:24102/_cat/indices?v 10.单节点文件大小写入速率(MB/Sec/Node):所有索引写入数据大小/客户端写入时间的平均值/数据节点数。 11.单节点文件数写入速率(doc/Sec/Node):所有索引写入数据总条数/客户端写入时间平均值/数据节点数。 【测试结果】 1.成功写入数据,记录写入耗时 2.成功查看写入索引总的大小 curl -XGET --tlsv1.2 --negotiate -k -u : 'https://10.24.102.14:24100/_cat/indices?v' (https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202102/23/110423tiibgjvw5qmln5dn.png) 3.计算得到Elasticsearch单节点文件大小写入速率。 所有索引写入数据大小/客户端写入时间的平均值/数据节点数: 3.3 x 1024 x 1024 / 8430.008 / 6 = 68.4123M/Sec 4.计算得到Elasticsearch单节点文件数写入速率。 600000000/8430.008/6 = 11862.385 doc/Sec
  • [生态对接] FusionInsight Elasticsearch对接Kibana
    ## 对接场景 Kibana提供了图形化操作界面,通过可视化界面对Elasticsearch进行索引构建、查询、分析等操作。 本指导适用FusionInsight HD 6.5.1版本 ## 前提条件 已下载安装Kibana。 - 下载Kibana安装包“kibana-oss-6.7.1-linux-x86_64.tar.gz”并上传至任意EsMaster实例所在节点,例如`/opt`目录下。 开源社区下载地址:https://www.elastic.co/cn/downloads/past-releases/kibana-oss-6-7-1。 - 解压安装包,并进入对应解压目录。 ``` cd /opt tar -zxvf kibana-oss-6.7.1-linux-x86_64.tar.gz cd kibana-6.7.1-linux-x86_64/ ``` > - 使用Dev Tools功能的用户,需要在elasticsearch组内。 > - 使用其他功能的用户,需要在supergroup组内。 ## 操作步骤 修改配置并启动Kibana。 - 如果当前系统为TaiShan服务器,需要下载Nodejs的ARM版本替换kibana解压目录下的node目录 下载node-v10.15.2-linux-arm64.tar.gz,解压后替换kibana-6.7.1-linux-x86_64下的node。下载地址:https://nodejs.org/dist/v10.15.2/ ``` tar -zxvf node-v10.15.2-linux-arm64.tar.gz -C /opt rm -rf /opt/kibana-6.7.1-linux-x86_64/node/* mv /opt/node-v10.15.2-linux-arm64/* /opt/kibana-6.7.1-linux-x86_64/node/ ``` - 修改`config/kibana.yml`配置,示例如下: ``` #Kibana在Elasticsearch中使用的索引名称。 #若需要启动多个Kibana,请确保不同用户的该配置项内容不重复。 kibana.index: ".kibana" #Kibana服务端口。 server.port: 5601 #当前节点ip,默认localhost。 server.host: "10.1.1.1" #需要访问的Elasticsearch节点IP及端口号,建议配置EsNode1实例的IP和端口号。普通模式下,请将https修改为http。 elasticsearch.hosts: ["https://10.1.1.1:24100"] #直接填写none即可。 elasticsearch.ssl.verificationMode: none #修改xxxxxx为“用户名:密码”的base64转码结果;普通模式不需要此项配置。 elasticsearch.customHeaders: {"custom-proxy-username":"xxxxxx"} #Kibana日志目录,根据实际场景自定义即可,请提前手动创建该文件。 logging.dest: /opt/kibana-6.7.1-linux-x86_64/log/kibana.log #Kibana健康检查周期,请根据实际使用场景合理填写,单位ms。 elasticsearch.healthCheck.delay: 60000 ``` > - elasticsearch.hosts禁止配置EsMaster节点的IP和Port。EsMaster实例为重要的管理进程,为确保Elasticsearch集群稳定性,不允许配置EsMaster节点IP和Port。 > - 因部分java库仍遵循RFC的Base64规定,在进行加密时会增加换行符,请保证elasticsearch.customHeaders配置项中的信息无换行符。 > - 可下载Elasticsearch客户端,导入RestClient二次开发样例,使用com.huawei.fusioninsight.elasticsearch.example.util.Base64Utils工具类进行Base64加密。 > - 请确保Base64转码结果在填写时,只替换“xxxxxx”部分。 例如,当前用户名为test,密码为123,“test:123”转base64后为“dGVzdDoxMjM=”,则配置项填写为:elasticsearch.customHeaders: {"custom-proxy-username":"dGVzdDoxMjM="} - 使用命令`./bin/kibana`启动Kibana > 如需后台运行,可执行如下命令`nohup ./bin/kibana &`启动Kibana: - 查看Kibana日志,确认启动成功后,登录Kibana界面。 在配置的Kibana日志文件中,找到如下类似日志,即表明Kibana已经启动成功,在浏览器输入日志中打印的链接即可,如http://10.1.1.1:5601。 ``` "type":"log","@timestamp":"2019-06-07T07:07:32Z","tags":["status","plugin:elasticsearch@6.7.1","info"],"pid":44252,"state":"green","message":"Status changed from yellow to green - Ready","prevState":"yellow","prevMsg":"Waiting for Elasticsearch"} {"type":"log","@timestamp":"2019-06-07T07:07:32Z","tags":["listening","info"],"pid":44252,"message":"Server running at http://10.1.1.1:5601"} ``` > - create index pattern等操作,Kibana会创建相关索引,默认为".kibana"开头。 > - Kibana会根据健康检查状态进行信息反馈,如果在healthCheck周期内,信息发生变化(例如切换登录用户),可能需要等到下一次healthCheck的反馈结果才会生效;同时,健康检查会发送多个http请求到Elasticsearch,为防止增加Elasticsearch集群的压力,请根据使用场景,合理配置kibana.yml中的健康检查周期,即参数elasticsearch.healthCheck.delay。
  • [其他] 事件梳理----自建kibana之node_modules目录导致访问非安全模式css集群失败
    自建kibana 之 node_modules下x-pack目录导致访问非安全模式css集群失败报错信息: 由于CSS服务暂不支持x-pack,自建kibana会存在以上报错;处理方式:删除node_modules下x-pack目录;验证过程:1、购买ECS服务器;1)与需要访问CSS集群在同一个vpc,安全组;2、安装kibana与配置;1)kibana的版本与CSS相同;(避免版本的不兼容导致访问不同)2)修改kibana配置文件参数:server.port:  kibana的端口号server.host: 访问kibana的地址;当前为本地Elasticsearch.hosts:  用于所有查询的Elasticsearch实例的URL;可配置多个,使用逗号隔开 3)把node_modules目录下的x-pack目录;(由于CSS不支持x-pack,直接连接)    至此    重启启动kibana成功;
  • [热门活动] 实时流计算1元体验购~限流500名进专家驻场交流群抽50件纪念衫
     支撑媒体大屏背后的数据技术和产品,你想不想跃跃欲试?每秒处理亿级数据量的神奇秘密实时流计算CS开启了数据计算美丽的瞬间这次,CS推出了1元购,为了让大家畅玩体现企业级流式大数据平台。除此之外,你还可以实操日志分析、实时数据监控、数据可视化(数据大屏)…… 【活动时间】2019年6月15日至2019年7月15日【活动整体流程】添加活动小助手微信号-进入活动页面-购买1元体验包-提交购买截图(在资源-我的套餐中查看)-获取抽奖码-活动正式开始!【社群福利】1、 活动期间,每天21:00-21:30华为云CS专家在线解答任何与CS技术相关的问题。2、 活动期间,只为社群成员开设直播课程比如十分钟搭建数据大屏、深入了解实时检测,日志分析等等……进群与专家沟通交流Flink/Spark,手把手教你玩转CS,还可添加微信小助手,参加抽奖哦!(左图:群二维码有效期7月17日有效,定期更新;右图:活动小助手微信号:huaweisecretary)CS官方产品页:https://www.huaweicloud.com/product/cs.htmlCS1元购链接:https://console.huaweicloud.com/cs/?region=cn-south-1#/activity测评有礼:https://bbs.huaweicloud.com/forum/thread-18648-1-1.htmlTips:1元体验包购买入口~确定购买成功就可以直接使用,本次开放华南区,使用资源前请确认区域!活动相关FAQ【抽奖奖品图示】CloudStream纪念衫,限量50件;技术类书籍,6本。【活动套餐包事宜】套餐包:1元可购买336小时*SPU资源的CS;使用时间30天(6月15日开放购买,自购买之日起有效期1个月)使用范围:实时流计算服务(CS)购买成功可登入登录华为云官网:https://www.huaweicloud.com/ 。点击控制台-我的资源-我的套餐-即可查看。注意:购买套餐的区域和集群选择的区域要保持一致 【1元购买的CS资源包无法购买问题:】1.用户实名制当天无法购买,需要等待最多24小时2.用户欠费无法购买,或者缴费也无法立即购买,需要等待约三小时3.用户下单没有支付,再次无法购买,可以在订单页面查找订单完成支付
  • [热门活动] 【回帖有礼】——参与实时流计算CS测评赢华为运动手环,噢耶!
    此贴专门为帅气又善于发现的你准备事情是这样的:我们的CS博士想和你来次精神和肉体的摩擦如果你在使用华为云实时流计算服务的时候【直接通道:https://www.huaweicloud.com/product/cs.html(新用户可以购买1元体验包哦)】遇到很爽或者很不爽的体验比如说功能不稳定、状态更新不及时,体验感很差啊~必须到了不吐不快的时候!(CS博士已恭候多时)1、 你来测评:跟帖发表不可少于150字的测评体验即可(与体验产品无关、非原创、恶意评论等内容将视作无效内容)2、 博士测评:根据你提交测评内容的完整度、专业度及价值意义三方面综合评分,赠送相应礼品(1)本期活动共设置3个奖项(100%有礼),分别是:建议采纳奖:华为运动手环优质测评奖:技术类书籍一本参与奖:三合一数据线(2)领取流程:活动结束3天后,留意社区回帖,提供收货信息(3)发放流程:如无意外因素,所有奖品将在活动结束后10个工作日内发出。    【本期活动时间:2019.6.15-2019.7.15】感谢您对华为云的支持!!这些测评都是华为云实时流计算前进的动力和方向。—————————————————————————————————— 加入实时流计算交流群,面对面吐槽,畅所欲言,还有优惠和课程信息哦……福利多多,不可错过!(群二维码7月17日前有效,定期更新)Tips:1元体验包购买入口~确定购买成功就可以直接使用(可在资源-我的套餐中查看),本次开放华南区,使用资源前请确认区域!
  • [技术干货] Elasticsearch 2.x版本往5.x版本迁移数据
    Elasticsearch 2.x版本往5.x版本迁移数据迁移前准备1. String类型: 2.x版本跟 5.x版本有一个比较大的改动就是ES的基本类型string字段。5.x版本中使用text/keyword字段替代了2.x版本的string类型。text表示使用分词的string(即之前默认的string),keyword为不使用分词的string(即not_analyzed),keyword类型的数据只能完全匹配,适合那些不需要分词的数据,对过滤、聚合非常友好。 如下2.x版本中的mappin**段: "content" : { "properties" : { "status" : { "type" : "string" }, "tgroup" : { "type" :"string", "index" :"not_analyzed" }, } }5.x版本中可以修改为如下: "content" : { "properties" : { "status" : { "type" : "text" }, "tgroup" : { "type" : "keyword", }, } },Status字段类型变为使用分词的text,tgroup字段类型变为不分词的keyword。 2. index下面的type映射之logstash配置 从2.x版本的Elasticsearch往5.x的elasticsearch导入数据,一个index下面有多个type,导入到5.x中如果要求type一一对应,需要指定type映射,使用如下logstash配置: input{ elasticsearch{ hosts=> 2.xES地址 index=>xx docinfo=>true }}filter{}output{ elasticsearch{ hosts => 5.xES地址 index => xx document_type=>"%{[@metadata][_type]}" }}如上标黄部分中,指定了2.x版本index下的type会一一映射到5.x版本,使用docinfo打开一些原始数据如 迁移后使用遇到的比较多的查询错误如下,2.x可以使用如下查询语句进行查询GET _search{ "query": { "filtered": { "query": { "match": { "text": "quick brown fox" } }, "filter": { "term": { "status": "published" } } } }}但是这个语句如果在5.x中执行将会报错no[query] registered for [filtered]"root_cause": [ { "type":"parsing_exception", "reason": "no [query] registered for[filtered]", …….. } ],在5.x版本中filtered 查询已经被废弃了,如果要实现过滤可以使用constant_score或在bool子句下filter实现。这两者都不会计算文档得分,使查询更高效。改为如下方式GET_search{ "query": { "bool": { "must": { "match": { "text": "quick brownfox" } }, "filter": { "term": { "status":"published" } } } }}关于filtered query 具体可以参考elastic官网https://www.elastic.co/guide/en/elasticsearch/reference/5.0/query-dsl-filtered-query.html 5.x Eleasticsearch版本的一些改进增加了一些document API,可以使得操作更加方便。如:_update_by_query,可以根据查询到的结果进行更新。_delete_by_query,可以根据查询删除某些文档。_reindex ,可以使用_reindex迁移索引。如下POST /_reindex{ "source":{ "index":"cars" }, "dest":{ "index":"cars_new" }}其他的关于性能方面的改进可以参考: http://cwiki.apachecn.org/pages/viewpage.action?pageId=4260605
  • [技术干货] 华为云EI—实时流计算和时空数据库助力用户打开IoT无限可能
    随着技术的发展与市场需求的深入,IoT物联网已进入快速发展期,给ICT行业带来了广阔的市场空间。在刚刚过去的2018华为中国生态伙伴大会期间,通过展区展示不难发现,在汽车、水、电、气、工业设备等等领域,越来越多的终端联接网络,源源不断的产生海量时序和时空数据,这些数据往往具有很强的时效性,随着时间的推移,其价值也就急速衰减,因此如何应对海量时序/时空数据的高速存储和查询、如何对数据进行实时的检测和监控、如何实时的挖掘出数据背后的价值都是很大的挑战。那么,华为云EI企业智能又是如何帮助用户与伙伴应对这些挑战呢?车联网正成为IoT行业应用的先锋IoT典型场景根据笔者在IoT领域的一些实践经验,将IoT领域的在线应用场景归纳为如下:物联网IoT数据源产生的数据大多是时序和时空数据,那么什么是时序数据和时空数据。我们一般认为时序数据是某个时间点发生了某件事情,但是在时序数据这个领域里定义的时序数据全都是跟数值有关的。举一个简单例子,一辆汽车在上午9点在某个加油站加油这条记录,相当于一条日志,本身不能构成一个时序数据,但是如果今天我们每一秒钟都记录了该汽车的油箱里具体油量的值,那么今天的86400条油量记录数据再加上每秒的时间点则构成了一个时序数据。那什么是时空数据呢?简单来说,如果今天我们每一秒钟都记录了该汽车的位置信息(X\Y坐标),这些位置数据则构成了二维空间数据,那么这86400条的坐标记录数据加上每秒的时间点则构成了一个时空数据。对于这些时序和时空数据的在线业务可以简单的分为三大类,实时检测、实时查询和实时分析。实时检测是期望可以实时的对异常数据、异常行为和故障进行检测,快速返回给管理系统或者通知相关人员等。比如车队管理则要求进行电子围栏的检测,一旦发现车辆行驶或停止的范围超出了规定的地理空间范围,则可以进行告警。或者货运公司发现某货运汽车并没有按照正常的路线行驶,偏离了正常航道,也可以进行告警,从而进行实时纠偏。实时查询,主要是对于这些时序数据或者时空数据进行查询以进行下一步的分析或进行展现,比如查询早上7点到9点早高峰期间车的轨迹、车辆本周的油量变化曲线、用户用电曲线等。由于IoT采集数据的频率非常高,可能还需要绘制低精度的曲线。实时分析,主要是对于采集到的指标数据进行分析,得到基于某些行业的知识,比如对于驾驶员的行为分析,对于汽车油耗的统计分析等。IoT数据实时分析方案在IoT领域,对于IoT数据的实时处理流程包括以下几个步骤:1) 通过IoT Hub进行数据采集或者通过GPS的接入;2) 对数据进行实时检测,或者预处理;3) 数据写入数据库/文件系统;4) 对数据库/文件系统中的数据进行查询、分析。基于华为云服务来实现上述的处理流程,主要会如下图所示的几个服务:IoT Hub可以对接物联网终端进行数据采集;DIS(数据接入服务)采用kafka内核将数据接入到华为云,并和CloudStream(实时流计算服务)无缝对接;CloudStream从DIS消费数据进行实时检测或分析,返回检测结果给在线应用,或者增加一些分析数据写入到CloudTable时序/时空数据库中;CloudTable(表格存储服务)作为毫秒级NoSQL数据库可以支持海量的数据存储,并提供时序/时空数据的查询和实时分析;对于一些近实时的查询分析可以通过spark内核的UQuery服务来进行。下面详细介绍核心服务CloudStream实时流计算和CloudTable时序/时空数据库能给企业带来什么价值。实时流计算,IoT的核心引擎对于IoT场景的海量时序/时空数据,华为云CloudStream作为实时流式大数据分析服务,微秒级的计算性能为企业挖掘实时数据价值提供了核心能力,具体体现有以下显著优势:1. 双引擎IoT场景海量的数据实时计算必须需要有高性能的计算引擎支撑,既要满足低时延高吞吐的性能要求,又要满足数据一致性要求。另外,IoT场景多种多样的业务也要求计算引擎能够运行批量,流式,交互式,图处理,机器学习等应用。目前业界主流的流计算引擎Flink和Spark Streaming都非常适合IoT场景,两者以不同的设计思想(前者是原生流式计算,后者是微批处理计算)各领风骚,都有着活跃的开源社区支撑。CloudStream集成了Flink和Spark Streaming,双引擎方式很好的连接了开源生态,完全兼容开源版本Flink1.4和Spark2.2,方便业务人员平滑迁移线下业务上云。2. 基于地理位置分析的SQL 扩展IoT大量业务场景需要对时空数据进行实时的地理位置分析,如电子围栏、偏航检测等。CloudStream扩展了Flink SQL,提供了基于地理位置分析的一系列Time GeoSpatial语法,方便业务人员使用SQL快速开发地理位置分析业务,其中DDL for Time GeoSpatial可以快速定义基本元素,例如点、线、多边形、圆等;SQL Geospatial Scalar Functions可以对基本元素进行基本操作,例如计算两点间距离、判断区域是否覆盖、判断点是否在区域内、移动位置计算、分析距离相交包含关系等;SQL Time Geospatial可以在窗口中对基本元素进行基本操作,例如计算多种窗口的平均速度和距离。图示为实时流计算服务的IoT算子轻松实现电子围栏检测3. CEP on SQLIoT大量业务场景需要实时检测无尽数据流中的复杂模式,例如车辆异常行为检测、工业设备异常运行状态检测。CloudStream扩展了Flink SQL,提供了非常高效的CEP on SQL的能力,提供了基于Match Recognize的模式匹配检测,可以帮助业务人员使用SQL实现基于复杂事件规则的异常检测业务,无需开发Flink PATTERN API自定义业务,只需要一行SQL查询语句搞定,大大降低此类业务开发难度。CloudTable时序/时空数据库,为IoT数据而生CloudTable是华为云上毫秒级的NoSQL数据库,提供了HBase、OpenTSDB、GeoMesa接口,其中OpenTSDB和GeoMesa作为时序和时空数据库为IoT行业而生,为时序和时空数据的高吞吐量的写入和查询提供了解决方案。高性能时序数据库基于对分布式架构系统的良好支持和完善的生态,CloudTable选择了OpenTSDB作为时序数据库内核,并做了软硬件的垂直性能优化,可以支持千万级别的写入吞吐量和百万数据点3秒之内的读取性能,很好的解决物联网领域海量数据写入和读取性能的问题。同时,时序数据库还提供了三种常用计算:插值、降精度和聚合。对于每秒都上报的数据,其中某一秒的数据因为某些原因丢失了,则可以通过插值进行补齐。如下图红色框内的点(图a),对绿色线条和红色线条的值进行求和聚合计算,如果没有插值,则会出现结果突变的情况,如果进行了插值则是比较好的效果(图b)图a 无插值求和结果 图b 插值求和结果降精度有助于提升查询效率,同时可以提供更加清晰的曲线信息给在线应用。图a 原始时序数据 图b 降精度之后数据时序数据库中的聚合和传统数据库的聚合还有一些差异。时序数据库中聚合是将多个独立的时间线聚合成一个数据时间序列,类似于SQL里面的group by,但是此处的aggregation是按照每个时间戳和分组进行聚合。降精度计算中也可以使用不同的聚合函数进行降精度,而每个聚合函数中不仅会包含聚合的函数,也会包含插值的函数,对于缺失的数据,可以采用插值后的数据进行聚合。时空数据库华为云CloudTable引入了地理大数据处理套件GeoMesa,可以帮助物联网存储和分析海量时空(spatio-temporal)数据,提供轨迹查询、区域分布统计、区域查询、密度分析、聚合、OD分析等功能。GeoMesa基于Geohash编码以及空间填充曲线的理论基础,做到了将二维经纬度转换成一维字符串,将三维时空(经纬度和时间)转换成一维字符串,为高性能查询打下了基础。通过CloudTable中GeoMesa,对于物联网中时空维度的查询简单有效,举个例子,比如1) 早上7点-9点,有哪些人/车出现在深圳市龙岗区坂田?2) 早上7点-9点,从深圳市南山区到深圳市龙岗区坂田的人/车的轨迹是怎么样的?3) 晚上5:30-7:30,深圳市龙岗区坂田的人/车的轨迹是怎么样的?图示为基于时空数据库服务用CQL实现区域分析通过以上的一些查询,可以分析出行人/车的出行规律,进而进行附近的健身房、餐馆、娱乐设施的推荐;分析出住宅区、工作区的聚集地;分析出同行的人的数量,抽象出公共巴士的路线,优化公共交通路线等等。通过时空数据的查询和分析可以进一步挖掘出时空数据背后的价值。Cloud2.0时代,越来越多的企业关注如何提升应用上云效率的同时,也在聚焦新技术给现行业务带来的创新与改变。华为云实时流计算和时空数据库帮助行业伙伴与客户轻松实现IoT场景下时空时序数据的实时计算、存储和查询,为IoT海量数据和业务应用之间架起一道桥梁。除此之外,IoT场景还有很多即有趣又丰富的业务,华为云EI企业智能提供了丰富的大数据和AI服务,比如机器学习服务、图引擎服务、深度学习服务等,将携手与行业伙伴共同扩展更多能力,丰富更多算法和模型,从而打开IoT无限可能。点击了解华为云EI: https://www.huaweicloud.com/ei
  • [技术干货] Elasticsearch 使用建议
    本帖最后由 风云令 于 2017-11-9 15:39 编辑操作场景 Elasticsearch是开源搜索引擎,在深入使用Elasticsearch搜索引擎过程中,积累了一些经 验和技巧,建议用户在使用Elasticsearch服务时,作为参考。 提高索引效率 1. 使用多进程或多线程发送数据到Elasticsearch一个单线程发送bulk请求不能够发挥一个集群的索引能力。为了更好地利用集群的资源,应该使用多线程或多进程来发送数据,同时这将有助于减少每次fsync的成本。 对于相同大小的bulk请求,通过测试可以得到最优的线程数量。可以逐步增加线程数量直至到集群中的机器IO或CPU饱和。 2. 增加refresh_interval刷新的间隔时间 默认情况下,每个分片每秒自动刷新一次。但并不是所有场景都需要每秒刷新。在使用Elasticsearch索引大量的日志文件,想优化索引速度而不是近实时搜索,可以通过设置refresh_interval,降低每个索引的刷新频率。 [code]PUT /my_logs { "settings": { "refresh_interval": "30s" } }[/code] 3. 在初始化索引时,可以禁用refresh和replicas数量如果需要一次加载较大数据量的数据进index里面时,可以先禁用refresh,把“refresh_interval”设置成为“-1”,把“number_of_replicas”设置成“0”。暂时把多个shard副本关闭(即如果当前index发生损坏便用丢失数据),但是这样做可以大大加快索引速度。当初始化索引完成,可以将refresh_interval和number_of_replicas设置回原来的值。 选择合适的分片数和副本数 在创建索引数据时,最好指定相关的分片数和副本数,否则会使用服务器中的默认配置参数“shards=5, replicas=1”,即分片数为5,副本数为1。分片数,与检索速度非常相关的的指标,如果分片数过少或过多都会导致检索比较慢。分片数过多会导致检索时打开比较多的文件,且会导致多台服务器之间通讯慢。而分片数过少会导致单个分片索引过大,所以检索速度慢。 1. 根据机器数、磁盘数、索引大小等设置分片数,单个分片最好不要超过10GB。 2. 一个机器上的分片数最好不好超过3个,配置“total_shards_per_nodes”参数,限 制每个index每个节点最多分片多少个分片。 [code]PUT /my_index { "settings": { "number_of_shards": 1, "number_of_replicas": 0 } }[/code] [indent] 将数据存放在不同的索引 Elasticsearch是基于Lucene进行索引和存储数据的,最佳的工作方式是密集的数据,即是所有的document拥有相同的字段。 1. 避免把无关联的数据放在同一个index 不要把完全不同的数据结构document放在同一个index里。最好是放到不同的index里,可以考虑创建一些较小的index,用较少的shard去存储。 2. 避免不同的type放在同一个index 多个type放在单个index看起来是个简单的方法,但是Elasticsearch并不是基于type来存储的,不同的type在单个index会影响效率。如果type没有非常相似的mapping,建议放到一个单独的index。 3. 同一个index里面不同type之间字段不能冲突 如果有两个不同的type,每个type都有同名的字段,但映射不同,这在Elasticsearch是不允许的。 按照时间范围创建索引 在Elasticsearch用于存储跟时间相关的数据时,如日志数据,建议按照时间范围创建索引,而不是把所有数据都存放到一个超级大的索引里面。基于时间范围索引。可以开始于一个按年的索引(logs_2014)或按月的索引(logs_2014-10)。当数据量变得非常庞大的时候切换到一个按天的索引(logs_2014-10-24)。 1. 扩容的时候根据当前数据量选择合适的shard和副本 针对时间范围创建的每个索引都可以灵活的设置Shard数和副本,这样就不需要在 一开始设置一个很大的shard来考虑扩容的情况。在集群扩容之后也可以方便的挑 战时间范围周期来适配集群规模。 2. 删除旧数据只需要删除旧的索引 [/indent]DELETE /logs_2014-09 3. 利用alias机制可以在索引间灵活切换 [code]POST /_aliases { "actions": [ { "add": { "alias": "logs_current", "index": "logs_2014-10" }}, { "remove": { "alias": "logs_current", "index": "logs_2014-09" }} ] }[/code] [indent] 4. 针对不再更新的索引,如上周或者上月的索引,进行索引优化以提高查询效率 [/indent][code]POST /logs_2014-09-30/_settings { "number_of_replicas": 0 } POST /logs_2014-09-30/_optimize?max_num_segments=1 POST /logs_2014-09-30/_settings { "number_of_replicas": 1 }[/code] 优化索引配置 1. 禁用_all字段 当索引一个文档的时候,Elasticsearch取出所有字段的值拼接成一个大的字符串,作为_all字段进行索引。如果搜索时用指定字段来代替_all字段,将会更好控制搜索结果。当_all字段不再有用的时候,可以将它置为失效。 [indent][code]PUT /my_index { "mappings": { "_default_": { "_all": { "enabled": false } } } }[/code] 2. 区分text和keyword 在Elasticsearch 5.x版本string字段被拆分成两种新的数据类型:text用于全文搜索的,而keyword用于关键词搜索。对于不需要分词的字符串精确值字段,如标签或枚举,建议配置为keyword类型。[code]PUT my_index { "mappings": { "my_type": { "properties": { "tags": { "type": "keyword" }, "full_name": { "type": "text" } } } } }[/code] [/indent][indent] 3. 基于text字段的聚合统计 分词字段的聚合统计不是一种常见的需求。在Elasticsearch对于分词字段的聚合统计需要用到fielddata,默认是禁用的,开启fielddata会带来较大的内存负担。建议的做法是分词字符串进行多字段映射,映射为一个text字段用于全文检索,和一个keyword字段用于聚合统计。[code]PUT my_index { "mappings": { "my_type": { "properties": { " full_name": { "type": "text", "fields": { "raw": { "type": "keyword" } } } } } } }[/code] [/indent] 使用索引模板 Elasticsearch支持通过索引模板控制一些新建索引的设置(settings)和映射(mappings),如限制分片数为1,并且禁用_all域。索引模板可以用于控制何种设置(settings)应当被应用于新创建的索引: 1.索引模板可以通过template字段指定通配符。 2.多个索引模板可以通过order指定覆盖顺序。 [code]PUT /_template/my_logs { "template": "logstash-*", "order": 1, "settings": { "number_of_shards": 1 }, "mappings": { "_default_": { "_all": { "enabled": false } } }, "aliases": { "last_3_months": {} } }[/code] 数据备份和恢复 Elasticsearch副本提供了高可靠性,让您可以容忍零星的节点丢失而不会中断服务。但是,副本并不提供对灾难性故障的保护。对这种情况,你需要的是对集群真正的备份,在某些东西确实出问题的时候有一个完整的拷贝。 备份集群,您可以使用snaps** API。这个会拿到集群里当前的状态和数据然后保存到一个共享仓库里。其备份过程是智能的。第一个快照会是一个数据的完整拷贝,后续的快照会保留的是已存快照和新数据之间的差异。随着你不时的对数据进行快照,备份也在增量的添加和删除。这意味着后续备份会相当快速,因为它们只传输很小的数据量。 用过滤提高查询效率 过滤器的执行速度非常快,不会计算相关度(直接跳过了整个评分阶段),而且很容易被缓存。通常当查找一个精确值的时候,我们不希望对查询进行评分计算。只希望对文档进行包括或排除的计算,所以我们会使用constant_score查询以非评分模式来执行term查询并以一作为统一评分。 [code]GET /my_store/products/_search { "query" : { "constant_score" : { "filter" : { "term" : { "city" : “London” } } } } }[/code] 采用scroll API 返回大量数据 1. 避免深度翻页 先查后取的过程支持用from和size参数分页,但有限制。结果集在返回之前需要在每个分片上先进行排序,然后合并之后再排序输出。 使用足够大的from值,排序过程可能会变得非常沉重,使用大量的CPU、内存和带宽。因此,强烈建议不要使用深分页。 2. 采用scroll查询返回大量数据 scroll查询可以用来对Elasticsearch有效地执行大批量的文档查询,而又不用付出深度分页那种代价。scroll查询允许我们 先做查询初始化,然后再批量地拉取结果。