• [文档] 【新特性】GDE 2.3.0 - ADC 数据编排
         查看详情>>  新增01 DataFactory支持自定义函数02 DataFactory支持批/轻量化ETL控制流在线调测03 DataFactory批处理能力增强1) 适配Impala改造,新增“Impala加载”和“Impala抽取”算子。2) spark引擎支持jdbc PG抽取加载3) 轻量化ETL支持jdbc PG抽取加载4) DataFactory批处理运行态历史监控支持算子回显5) DataFactory批处理运行态历史监控支持手动恢复和执行流程6) 轻量化ETL模块文本抽取算子“文件压缩类型”属性支持zip格式。7) Hadoop SQL执行器与SQL执行器算子支持GaussDB数据库类型的SQL语句8) 批处理JDBC加载支持所有数据源按数据时间分表9) Spark引擎jdbc支持clickhouse抽取加载10) 外部程序使用远程执行用户执行脚本11) 支持对接CDM SSH数据源04 DataFactory统一调度相关能力增强1) 新增流程别名查询功能。2) 支持修改“失败重试次数”。3) 新增支持轻量化ETL算子4) 支持通用编排流程和多维汇聚计算任务混编5) 模块增加机器学习算子,增加数据质量稽核算子05 DataFactory数据集成相关能力增强1) 数据集成模块Kafka生产者算子增加“压缩算法”属性2) 数据集成模块新增MED客户端算子。3) 数据集成模块CEP客户端算子新增分发属性。06 DataFactory支持集成数据质量服务:1) 数据质量服务实现自定义校验、告警订阅以及任务执行明输出能力。2) DataFactory新增数据质量入口菜单和统一调度算子。3) DataFactory新增支持数据质量服务的编译打包。4) DataFactory统一调度支持跨引擎调度DQ算子。07 DataFactory易用性优化1) Effective DataFactory提供在线帮助入口。2) 流处理的算子支持一键设置、过滤、导入导出等功能3) 流处理开发过程中,复杂表支持批量复制,提升开发效率4) DataFactory批处理与BFS批计算能力融合,HDFS抽取、HDFS加载算子增加“业务领域”属性。5) SQL类算子,引入SQL校验防护能力6) 支持调度视角的流程血缘图
  • [其他] MapReduce 使用hue提交自己的spark jar 包不能执行成功,
    【功能模块】【操作步骤&问题现象】1、请问有具体的配置操作吗?2、产品文档的介绍太粗糙了【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 【论文分享】多源异构航班航迹数据流实时融合方法研究
    多源异构航班航迹数据流实时融合方法研究张瞩熹1,2, 田旺1,3, 朱少川1,4, 刘洪岩1,4, 朱熙1,51 北京航空航天大学综合交通大数据应用技术国家工程实验室,北京 1000832 中国人民解放军32751单位,北京 1000393 北京航空航天大学大型飞机高级人才培训班,北京 1000834 北京航空航天大学电子信息工程学院,北京 1000835 北京航空航天大学前沿科学技术创新研究院,北京 100083摘要二次雷达和广播式自动相关监视(ADS-B,automatic dependent surveillance-broadcast)是在空域监视系统中共存的两种主要监视手段,为了提高监视的精度和稳定性,实现二次雷达和 ADS-B 航迹实时融合至关重要。针对现有方法难以满足大规模航迹的实时融合需求,设计了一种使用大数据技术的二次雷达与 ADS-B 数据流实时融合的方法。该方法基于微批处理的大数据处理框架,遵循MapReduce编程模型,在得到较高质量融合航迹的同时,保障了系统数据处理的高并发能力与实时性。最后,基于真实航班数据开展了航迹实时融合仿真实验,验证了方法的可行性。关键词: 航迹融合 ; 多源异构 ; 微批处理 ; MapReduce ; 流式大数据1 引言近年来,我国民用航空发展迅猛[1],航班体量不断增加。截至 2019年年底,我国在册运输飞机数量为3 818架,定期航线数量为5 155条,这两个数据在过去5年的平均增长率均达10%[2]。民用航空流量的迅速增长,使空中交通管制自动化系统面临显著的航班监视压力[3]。飞机航迹实时监视是支撑空中交通管制的基础能力,管制中心获得的航迹信息的准确性和及时性,直接关系到发出管制指令的准确性与及时性,决定了空中交通安全有序的运行,因而十分重要。为了提升空域监视能力、维护运行秩序,多种监视手段被应用于空中交通管制系统。早期,空域监视主要依靠二次雷达[4]完成。2007年,我国引入了第一部S模式雷达,随后S模式雷达在我国得到全面推广。目前,二次雷达监视技术较成熟可靠,但也存在建设维护成本高、易受恶劣天气影响等缺点。近年来,民用航空领域开始推广新型空域监视技术ADS-B[5],ADS-B主要基于全球导航卫星系统(GNSS,Global Navigation Satellite System),利用空对地、空对空数据链实现监控和信息传递。ADS-B具有建设维护成本低、使用寿命长、定位精度高、更新频率快等特点,但也具有较大的局限性:1) 依赖GNSS对目标进行定位,本身不具备对目标位置的验证;2) 现阶段ADS-B设备的覆盖率远不及二次雷达的覆盖率。因此,二次雷达和 ADS-B 将在相当长的时间内共存。为了实现优势互补,更精准地监视与管控空域,同时使用二次雷达和 ADS-B 作为监视信号源实现航迹的融合是一项非常重要的工作。在已有的研究中,文献[678]指出多源航迹融合对提升航迹监视精度、增强空中交通安全的作用,分析了现有空域监视系统中二次雷达与ADS-B的数据融合方案,论述了协同式的空域监视技术框架,研究了基于二次雷达和 ADS-B 的数据流控体系结构。在算法层面,文献[9]提出了调整二次雷达与 ADS-B 航迹融合权重因子的可变周期更新算法;文献[10]提出了在传统的地心地固(ECEF,earth-centered,earth-fixed)坐标系下二次雷达与ADS-B的航迹误差校准算法;文献[11]系统处理了航迹融合中的时间对准、空间对准、目标跟踪、数据融合等关键技术。在系统实现架构层面,文献[12]使用串行方式依次处理多部雷达的数据;文献[13]指出在现有的空中交通管制自动化系统中,针对单个目标航迹融合的流程是先将单雷达航迹融合为多雷达航迹,再将雷达的航迹与 ADS-B 的航迹融合为系统航迹;文献[14]提到,现有空中交通管制系统中封闭式的网络结构、复杂的通信终端、落后的传输协议给空中交通管制系统的全面信息化、网络化、系统化带来了困难;文献[15]验证了消息通信库不同的通信模式对提高异构信源数据传输与交互能力的有效性。综上所述,现有的研究主要侧重对单个目标的航迹融合算法的设计与改进,虽然有较好的融合精度,但设计的处理流程没有较好地考虑在实际运行时,系统承受高并发与灵活扩展计算性能的能力。现有空中交通管制系统对多源二次雷达与 ADS-B数据的处理融合仍以较低效的串行方式为主,在面对大规模航迹带来的对计算性能的挑战时,低效的串行方式将限制空域的监视能力,难以满足在航班体量不断增长的未来,空中交通管制系统对空域实时监视与反馈的需求。如何在保障航迹融合精度的前提下对大规模二次雷达与 ADS-B 数据实现并行化快速处理、提高航迹数据流的实时融合效率,是一个具有挑战性的课题。针对这一问题,本文基于微批处理的大数据处理框架,遵循 MapReduce 编程模型,设计了二次雷达与ADS-B 数据流实时融合方法。在多数据源、多目标、多维度的航迹数据之间采用并行处理模式,在提高航迹融合质量的同时,保障数据处理的实时性与高并发能力。在处理算法上,融合航迹由原始记录经过最小二乘法建模和拟合,再经过考虑决定系数的动态加权算法获得。在处理流程上,首先由分布式消息队列接收多源航迹数据,再按一定大小的滑动窗口划分批次,每一个批次数据的处理流程则包含多个Map和Reduce过程。最后,基于真实航班数据进行航迹实时融合仿真实验,对方法进行验证。2 结束语本文提出了一种二次雷达与 ADS-B 航迹实时融合的方法,针对现有研究和工程实现中对处理大规模航迹带来的计算压力关注度不足的问题,借鉴了互联网领域中较成熟的大数据技术,综合使用了分布式消息队列、微批处理框架、MapReduce编程模型,设计了包括航迹建模和拟合、考虑决定系数的加权融合的处理流程,并通过实验验证了方法的可行性与有效性。相比于传统的以串行为主的处理流程,本文方法使用的以并行为主的处理流程能够显著地提升系统的并发能力,显著增强了系统处理大规模航班监视流式数据的效率,是应对我国民航行业快速发展、航班监视需求“井喷式”增加的亟需技术。本文方法的整体框架也适用于航班航迹实时预测、流量信息实时统计、航班异常航迹实时判断等基于历史数据进行实时计算的场景,有助于进一步提升空中交通管制自动化、智能化的水平。The authors have declared that no competing interests exist.作者已声明无竞争性利益关系。3 原文链接http://www.infocomm-journal.com/wlw/article/2020/2096-3750/2096-3750-4-3-00060.shtml
  • [生态空间] MRS数据连通GaussDB(DWS)问题
    请问一下啊,根据操作手册,MRS中Hive的数据需要导入或者被DWS查询。需要建立外部服务器-->创建hdfs的外表CREATE SERVER hdfs_server_hds_dev FOREIGN DATA WRAPPER HDFS_FDW OPTIONS ( address '192.168.1.245:25000,192.168.1.218:25000', hdfscfgpath '/MRS/hds_dev', type 'hdfs' );请问示例中hdfscfgpath说的集群配置文件到底是啥?当全部操作完后,用dws查询外表,提示/MRS/hds_dev不存在。随后,我在hdfs上创建了这个目录(/MRS/hds_dev),里面放了core-xml hdfs-xml等配置文件,重新创建外部服务器和外表,依然提示/MRS/hds_dev不存在。请问大神,到底是啥问题。
  • [知识分享] 基于云服务MRS构建DolphinScheduler2调度系统
    >摘要:本文介绍如何搭建DolphinScheduler并运行MRS作业。 本文分享自华为云社区《[基于云服务MRS构建DolphinScheduler2调度系统](https://bbs.huaweicloud.com/blogs/355194?utm_source=csdn&utm_medium=bbs-ex&utm_campaign=ei&utm_content=content)》,作者: 啊喔YeYe 。 # 为什么写这篇文章? 1. 网上关于DolphinScheduler的介绍很多但是都缺少了与实际大数据平台结合的案例指导。 2. DolphinScheduler1.x版本,2.x重构了内核实现,性能提升20倍!但是因为重构导致2.x与1.x部署过程存在差异,按照1.x部署2.x版本存在不少坑。 3. 选择轻量化、免运维、低成本的大数据云服务是业界趋势,如果搭建DolphinScheduler再同步自建一套Hadoop生态成本太高!因此我们通过结合华为云MRS服务构建数据中台。 # 环境准备 - dolphinscheduler2.0.3安装包 - MRS 3.1.0普通集群 - Mysql安装包 5.7.35 - ECS centos7.6 # 安装MRS 客户端 MRS客户端提供java、python开发环境,也提供开通集群中各组件的环境变量:Hadoop、hive、hbase、flink等。 参见登录ECS安装集群外客户端 # 安装MySQL服务 ## 1. 创建ECS用户 为了方便数据库管理,对于安装的MySQL数据库,生产上建立了一个mysql用户和mysql用户组: ``` # 添加mysql用户组 groupadd mysql # 添加mysql用户 useradd -g mysql mysql -d /home/mysql # 修改mysql用户的登陆密码 passwd **** ``` ## 2.解压安装包 ``` cd /usr/local/ tar -xzvf mysql-5.7.13-linux-glibc2.5-x86_64.tar.gz # 改名为mysql mv mysql-5.7.13-linux-glibc2.5-x86_64 mysql ``` 赋予用户读写权限 chown -R mysql:mysql mysql/ ## 3. 配置文件初始化 ### 1. 创建配置文件my.cnf ``` vim /etc/my.cnf [client] port = 3306 socket = /tmp/mysql.sock [mysqld] character_set_server=utf8 init_connect='SET NAMES utf8' basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid #不区分大小写 lower_case_table_names = 1 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION max_connections=5000 default-time_zone = '+8:00' ``` ### 2. 初始化log文件,防止没有权限 ``` #手动编辑一下日志文件,什么也不用写,直接保存退出 cd /var/log/ vim mysqld.log :wq 退出保存 chmod 777 mysqld.log chown mysql:mysql mysqld.log ``` ### 3. 初始化pid文件,防止没有权限 ``` cd /var/run/ mkdir mysqld cd mysqld vi mysqld.pid :wq保存退出 # 赋权 cd .. chmod 777 mysqld chown -R mysql:mysql /mysqld ``` ## 4. 初始化数据库 初始化数据库,并指定启动mysql的用户,否则就会在启动MySQL时出现权限不足的问题 ``` /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --lc_messages_dir=/usr/local/mysql/share --lc_messages=en_US ``` 初始化完成后,在my.cnf中配置的datadir目录(/var/log/mysqld.log)下生成一个error.log文件,里面记录了root用户的随机密码。 cat /var/log/mysqld.log 执行后记录最后一行:root@localhost: xxxxx 。 这里的xxxxx就是初始密码。后面登入数据库要用到。 # 4. 启动数据库 ``` #源目录启动: /usr/local/mysql/support-files/mysql.server start ``` 设置开机自启动服务 ``` # 复制启动脚本到资源目录 cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld # 增加mysqld服务控制脚本执行权限 chmod +x /etc/rc.d/init.d/mysqld # 将mysqld服务加入到系统服务 chkconfig --add mysqld # 检查mysqld服务是否已经生效 chkconfig --list mysqld # 切换至mysql用户,启动mysql,或者稍后下一步再启动。 service mysqld start # 从此就可以使用service mysqld命令启动/停止服务 su mysql service mysqld start service mysqld stop service mysqld restart ``` # 5.登陆,修改密码,预置dolphinscheduler的用户 **1. 修改密码** ``` # 系统默认会查找/usr/bin下的命令;建立一个链接文件。 ln -s /usr/local/mysql/bin/mysql /usr/bin # 登陆mysql的root用户 mysql -uroot -p # 输入上面的默认初始密码(root@localhost: xxxxx) # 修改root用户密码为XXXXXX set password for root@localhost=password("XXXXXX"); ``` **2. 预置dolphinscheduler的用户** ``` mysql -uroot -p mysql>CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; # 修改 {user} 和 {password} 为你希望的用户名和密码,192.168.56.201是我的主机ID mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'%' IDENTIFIED BY 'dolphinscheduler'; mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'localhost' IDENTIFIED BY 'dolphinscheduler'; mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'192.168.56.201' IDENTIFIED BY 'dolphinscheduler'; #刷新权限 mysql> flush privileges; #检查是否创建用户成功 mysql> show databases; #出现dolphinscheduler,查看创建的用户 mysql> use mysql; mysql> select User,authentication_string,Host from user; ``` # 安装dolphinscheduler服务 **1. 建立本机id免密** 在任意文件夹下进行这一步均可,为防止误会,我在dolphinscheduler203进行这一步,创建用户dolphinscheduler,后面所有操作都是再这个用户下做的。设置root免密登录该用户: ``` # 创建用户需使用 root 登录 useradd dolphinscheduler # 添加密码 echo "dolphinscheduler" | passwd --stdin dolphinscheduler # 配置 sudo 免密 sed -i '$adolphinscheduler ALL=(ALL) NOPASSWD: NOPASSWD: ALL' /etc/sudoers sed -i 's/Defaults requirett/#Defaults requirett/g' /etc/sudoers # 修改目录权限,在这一步前将jdbcDriver(我的mysql版本5.6.1,driver版本8.0.16)放入lib里,一并修改权限 chown -R dolphinscheduler:dolphinscheduler dolphinscheduler203 #进入新用户 su dolphinscheduler ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys ``` **2. 修改配置参数** 修改install-config.conf文件 ``` [dolphinscheduler@km1 dolphinscheduler203]$ vi conf/config/install-config.conf 修改: ips="192.168.56.201" masters="192.168.56.201" workers="192.168.56.201:default" alertServer="192.168.56.201" apiServers="192.168.56.201" pythonGatewayServers="192.168.56.201" # DolphinScheduler安装路径,如果不存在会创建,这里不能放你解压后的ds路径,放置后在运行代码时同名文件、文件夹会冲突导致消失 installPath="/opt/dolphinscheduler203" # 部署用户,填写在 **配置用户免密及权限** 中创建的用户 deployUser="dolphinscheduler" # --------------------------------------------------------- # DolphinScheduler ENV # --------------------------------------------------------- # 安装的JDK中 JAVA_HOME 所在的位置 javaHome="/opt/hadoopclient/JDK/jdk1.8.0_272" # --------------------------------------------------------- # Database # --------------------------------------------------------- # 数据库的类型,用户名,密码,IP,端口,元数据库db。其中 DATABASE_TYPE 目前支持 mysql, postgresql, H2 # 请确保配置的值使用双引号引用,否则配置可能不生效 DATABASE_TYPE="mysql" SPRING_DATASOURCE_URL="jdbc:mysql://192.168.56.201:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8" # 如果你不是以 dolphinscheduler/dolphinscheduler 作为用户名和密码的,需要进行修改 SPRING_DATASOURCE_USERNAME="dolphinscheduler" SPRING_DATASOURCE_PASSWORD="dolphinscheduler" # --------------------------------------------------------- # Registry Server # --------------------------------------------------------- # 注册中心地址,zookeeper服务的地址 registryServers="192.168.56.201:2181" ``` zk地址获取方式: 登录manager,访问zookeeper服务,copy管理ip即可(前提ECS与MRS集群网络已打通): ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133576612207353.png) **2. 修改 conf/env 目录下的 dolphinscheduler_env.sh** 以相关用到的软件都安装在/opt/Bigdata/client下为例: ``` • export HADOOP_HOME=/opt/Bigdata/client/HDFS/Hadoop • export HADOOP_CONF_DIR=/opt/Bigdata/client/HDFS/Hadoop • export SPARK_HOME2=/opt/Bigdata/client/Spark2x/spark • export PYTHON_HOME=/usr/bin/pytho • export JAVA_HOME=/opt/Bigdata/client/JDK/jdk1.8.0_272 • export HIVE_HOME=/opt/Bigdata/client/Hive/Beeline • export FLINK_HOME=/opt/Bigdata/client/Flink/flink • export DATAX_HOME=/xxx/datax/bin/datax.py • export PATH=$HADOOP_HOME/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH:$FLINK_HOME/bin:$DATAX_HOME:$PATH ``` **说明** 这一步非常重要,例如 JAVA_HOME 和 PATH 是必须要配置的,没有用到的可以忽略或者注释掉 环境变量查找方式说明:假设MRS客户端安装在/opt/Bigdata/client ``` source /opt/client/bigdata_env HADOOP_HOME环境地址:通过echo $HADOOP_HOME获得 /opt/Bigdata/client/HDFS/Hadoop HADOOP_CONF_DIR:/opt/Bigdata/client/HDFS/Hadoop SPARK_HOME: 通过echo $SPARK_HOME获得/opt/Bigdata/client/Spark2x/spark JAVA_HOME: 通过echo $JAVA_HOME获得/opt/Bigdata/client/JDK/jdk1.8.0_272 HIVE_HOME:通过echo $HIVE_HOME获得/opt/Bigdata/client/Hive/Beeline FLINK_HOME:通过echo $FLINK_HOME 获得/opt/Bigdata/client/Flink/flink ``` **3. 将mysql 驱动包放入lib下** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133621101450379.png) ``` tar -zxvf mysql-connector-java-5.1.47.tar.gz ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133631910359480.png) ``` cp mysql-connector-java-5.1.47.jar /opt/dolphinscheduler203/lib/ ``` **4.创建元数据库数据表** 执行sh script/create-dolphinscheduler.sh **5. 服务安装、启停** 每次启停都可以重新部署一次:sh install.sh # 启停命令 ``` # 一键停止集群所有服务 sh ./bin/stop-all.sh # 一键开启集群所有服务 sh ./bin/start-all.sh # 启停 Master sh ./bin/dolphinscheduler-daemon.sh stop master-server sh ./bin/dolphinscheduler-daemon.sh start master-server # 启停 Worker sh ./bin/dolphinscheduler-daemon.sh start worker-server sh ./bin/dolphinscheduler-daemon.sh stop worker-server # 启停 Api sh ./bin/dolphinscheduler-daemon.sh start api-server sh ./bin/dolphinscheduler-daemon.sh stop api-server # 启停 Logger sh ./bin/dolphinscheduler-daemon.sh start logger-server sh ./bin/dolphinscheduler-daemon.sh stop logger-server # 启停 Alert sh ./bin/dolphinscheduler-daemon.sh start alert-server sh ./bin/dolphinscheduler-daemon.sh stop alert-server # 启停 Python Gateway sh ./bin/dolphinscheduler-daemon.sh start python-gateway-server sh ./bin/dolphinscheduler-daemon.sh stop python-gateway-server ``` # 6. 登录系统 访问前端页面地址:http://xxx:12345/dolphinscheduler 用户名密码:admin/dolphinscheduler123 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133680031334513.png) # 提交MRS任务 ## 1.登录进入dolphinscheduler webui ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133700613528376.png) ## 2. 配置MRS-hive连接 登录mrs manager查看hiveserver ip: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133712536337444.png) 创建Hive数据连接,普通集群没有权限可以使用默认用户hive,如有需要可以使用在MRS里面已经创建的用户: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133721059767204.png) ## 3. 创建任务 1、创建项目 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133734699156508.png) 2、创建工作流 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133754452224620.png) 3、在工作流编辑任务 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133762457725059.png) 4、任务上线 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133768968925033.png) 5、启动任务流之后可以查询工作流实例和任务实例 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133776277689121.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133786553699823.png) 6、登录Manager页面,选择“集群 > 服务 > Yarn > 概览” 7、单击“ResourceManager WebUI”后面对应的链接,进入Yarn的WebUI页面,查看Spark任务是否运行 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/2/1654133797822703249.png)
  • [问题求助] 【MRS产品】【kinit认证功能】MRS安全认证报错
    【功能模块】安全认证【操作步骤&问题现象】1、登录MRS客户端2、MRS进入安装目录3、source bigdata_env4、kinit [账号]5、输入密码6、出现kinit: Failed to store credentials: No credentials cache found (filename: ) while getting initial credentials错误【截图信息】【日志信息】(可选,上传日志内容或者附件)kinit: Failed to store credentials: No credentials cache found (filename: ) while getting initial credentials
  • [技术干货] windows清理系统垃圾bat脚本及使用步骤(转载)
    目录bat (批处理文件类型)一、针对电脑小白的系统垃圾清理二、使用步骤总结bat (批处理文件类型)批处理文件,在DOS和Windows(任意)系统中,.bat文件是可执行文件,由一系列命令构成,其中可以包含对其他程序的调用。这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 或cmd。比较常见的批处理包含两类:DOS批处理和PS批处理。PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。更复杂的情况,需要使用if、for、goto等命令控制程式的运行过程,如同C、Basic等高级语言一样。如果需要实现更复杂的应用,利用外部程式是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。批处理程序虽然是在命令行环境中运行,但不仅仅能使用命令行软件,任何当前系统下可运行的程序都可以放在批处理文件中运行。一、针对电脑小白的系统垃圾清理12345678910111213141516171819@echo off      echo 正在进行系统垃圾清除,请耐心等待......      del /f /s /q %systemdrive%\*.tmp      del /f /s /q %systemdrive%\*._mp      del /f /s /q %systemdrive%\*.log      del /f /s /q %systemdrive%\*.gid      del /f /s /q %systemdrive%\*.chk      del /f /s /q %systemdrive%\*.old      del /f /s /q %systemdrive%\recycled\*.*      del /f /s /q %windir%\*.bak      del /f /s /q %windir%\prefetch\*.*      rd /s /q %windir%\temp & md %windir%\temp      del /f /q %userprofile%\cookies\*.*      del /f /q %userprofile%\recent\*.*      del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"     del /f /s /q "%userprofile%\Local Settings\Temp\*.*"     del /f /s /q "%userprofile%\recent\*.*"     echo 清除系统垃圾完成!      echo. & pause二、使用步骤1.新建文本 “垃圾清理.txt”2.复制如上代码3.更改后缀名为.bat “垃圾清理.bat”4.运行即可
  • [环境搭建] 【MRS产品】大数据MRS 对接Streamx安装配置教程
    想要通过使用Streamx提交大数据MRS 集群spark/flink作业,是否有相关的安装配置教程?
  • [交流吐槽] 聊聊 MongoDB 时间序列集合
    名词解释bucket:带有相同的元数据且在一段有限制的间 隔区间内的测量值组。bucket collection :用于存储时序型集合的底层的分组桶的系统集合。复制、分片和索引都是在桶级别上完成的。measurement:带有特定时间序列的K-V集合。meta-data:时序序列里很少随时间变化的K-V对,同时可以用于识别整个时序序列。time-series:一段间隔内的一系列测量值。time-series collection:一种表示可写的非物化的视图的集合类型,它允许存储和查询多个时间序列,每个序列可以有不同的元数据。MongoDB 在5.0中支持了新的timeseries collection类型的选项,该类型用于存储时序型数据。timeseries collection提供了一组用于插入和查询测量值的简单接口,同时底层实际的数据是存储在以bucket形式的集合中。在创建timeseries collection时,timeField字段是最小必备的配置项。metaField是另一个可选的、可被指定的元数据字段,它是用于在bucket中对测量值分组的依据。MongoDB通过提供expireAfterSeconds字段选项,也支持了对测量值的过期机制。在mydb数据库中有个以mytscoll 命名的timeseries collection,该集合在MongoDB内部的catelog(用于存储集合或视图的信息)里是由一个视图和一个系统集合组成的。mydb.mytscoll 是个视图,它在MongoDB底层是用bucket collection作为包含特定属性的原始集合实现的:该视图就是通过aggregation里的$_internalUnpackBucket来实现展开bucket里数据的。该视图是可写的(仅支持插入)。同时每个被插入的文档必须包含时间字段。在查询视图时,它会隐式地展开底层在bucket collection中存储的数据,然后返回原始的非bucket形式的文档数据。该系统集合的命名空间是mydb.system.buckets.mytscoll,它是用来存储实际数据的。每一个在bucket collection里的文档,都表示了一组区间间隔的时序型数据。如果在创建timeseries collection时,定义了metaField元数据字段,那么所有在bucket里的测量值都会有这个通用的元数据字段。除了时间范围,bucket还限制了每个文档数据的总条数以及测量值的大小。Bucket Collection Schema{ _id: <Object ID with time component equal to control.min.<time field>>, control: { // <Some statistics on the measurements such min/max values of data fields> version: 1, // Version of bucket schema. Currently fixed at 1 since this is the // first iteration of time-series collections. min: { <time field>: <time of first measurement in this bucket, rounded down based on granularity>, <field0>: <minimum value of 'field0' across all measurements>, <field1>: <maximum value of 'field1' across all measurements>, ... }, max: { <time field>: <time of last measurement in this bucket>, <field0>: <maximum value of 'field0' across all measurements>, <field1>: <maximum value of 'field1' across all measurements>, ... }, closed: <bool> // Optional, signals the database that this document will not receive any // additional measurements. }, meta: <meta-data field (if specified at creation) value common to all measurements in this bucket>, data: { <time field>: { '0', <time of first measurement>, '1', <time of second measurement>, ... '<n-1>': <time of n-th measurement>, }, <field0>: { '0', <value of 'field0' in first measurement>, '1', <value of 'field0' in first measurement>, ... }, <field1>: { '0', <value of 'field1' in first measurement>, '1', <value of 'field1' in first measurement>, ... }, ... } }索引为了保证timeseries collection的查询可以受益于索引扫描而不是全表扫描,timeseries collection允许索引可以被创建在时间上,元数据上以及元数据的子属性上。从MongoDB5.2开始,在timeseries collection也允许索引被创建在测量值上。用户使用createIndex命令提供的索引规范被转换为底层buckets collection的模式。timeseries collection与底层的buckets collection之间的索引映射转换关系细节,你可以参考timeseries_index_schema_conversion_functions.h.在v5.2及以上版本的最新支持的索引类型,timeseries collection会存储用户原始的索引定义到变换后的索引定义上。当从底层的bucket collection的索引映射到timeseries collections的索引时,会返回用户原始的索引定义。当索引被创建后,可以通过listIndexes命令或$indexStats聚合计划来检查。listIndexes 和$indexStats是作用于timeseries collections的,执行时,它们会在内部将底层的bucket collection的索引转化成timeseries格式的索引,并返回。比如,当我们在元数据字段中定义有mm的timeseries collection上执行listIndexes命令时,底层的bucket collection的{meta:1}索引,将会以{mm:1}格式返回。dropIndex 和collMod (hidden: , expireAfterSeconds: ) 也同样支持在timeseries collection上。时间字段上支持的索引类型:单字段索引组合索引哈希索引通配符索引稀疏索引多键索引带排序的索引元数据字段和元数据子字段支持的索引类型:支持所有时间字段上支持的索引类型v5.2及以上版本支持2d 索引v5.2及以上版本支持2dsphere 索引v5.2及以上版本支持 Partial索引仅在v5.2及以上版本,测量值字段支持的索引类型:单字段索引组合索引2dsphere部分条件索引`timeseries collections 上不支持的索引类型,包括 唯一索引以及文本索引。桶目录为了保证高效地桶(分组)操作,我们在BucketCatalog里维护了一组开启的桶,你可以在bucket_catalog.h找到。在更高的级别,我们尝试着把并发写程序的写操作分组合并为可以一起提交地批处理,以减少对底层文档的写次数。写程序会插入它的输入批处理里的每一个文档到BucketCatalog,然后BucketCatalog会返回一个BucketCatalog::WriteBatch的处理器。一旦完成上面那些插入操作后,写程序就会检查每个写批处理。如果没有其他的写程序已经对批处理声明提交的权利,那么它会声明权利,并会提交它的批处理。否则,写程序将会稍后再提交处理。当它检查完所有的批处理,写程序将会等待其他的写程序提交每个剩下的批处理。在内部,BucketCatalog维护一组对每个bucket 文档的更新操作。当批处理被提交时,它会将这些插入转换到成buckets的列格式,并确保任何control字段的更新(例如control.min 和 control.max)。当bucket文档在没有通过BucketCatalog的情况下被更新时,写程序就需要为有问题的文档或命名空间去调用BucketCatalog::clear ,这样它就可以更新它的内部状态,避免写入任何可能破坏bucket 格式的数据。这通常由OP观察者处理,但可能需要通过其他地方去调用。bucket既可以通过手动设置选项control.closed 标识来关闭,也可以在许多场景下通过 BucketCatalog 自动关闭。如果BucketCatalog使用了超出给定的阈值(可通过服务器参数timeseriesIdleBucketExpiryMemoryUsageThreshold控制)的更多内存,此时它将会开始去关闭空闲的bucket。如果bucket是开启的且它没有任何未处于等待中未提交的测量值时,那么它就会被视为空闲的bucket。在下面这些场下 BucketCatalog 也会关闭bucket: 如果它拥有超过最大阈值(timeseriesBucketMaxCount)的测量值数据的数量;如果它拥有过大的数据量大小(timeseriesBucketMaxSize);又或者一个新的测量值数据是否是会导致bucket在其最旧的时间戳和最新的时间戳之间跨度比允许的间隔更长的时间(当前硬编码为一小时)。如果传入的测量值在原理上与已经到达给定bucket的度量不兼容,该bucket将被关闭,同时可以使用numBucketsClosedDueToSchemaChange度量进行跟踪。在第一次提交给定bucket的写批处理时,就会生成新的完整的文档。后续的批处理提交中,我们只执行更新操作,不再生成新的完整的文档(因此称为‘经典’更新),是直接创建DocDiff(“delta”或者v2的更新)。粒度timeseries collection的granularity 选项在集合创建的时候,可以被设置成seconds,minutes或者hours。后期可通过colMod操作来修改这个选项从seconds到minutes或者从minutes到hours,除此之外的转化修改目前都是不支持的。该参数想要表示在已给定的时序型测量数据之间的粗略的时间间隔,同时也用于调节其他内部参数对分组的影响。单个bucket被允许的最大时间跨度,是由granularity选项控制,对于seconds,最大的时间跨度被设置成1小时,对于minutes就是24小时,对于hours就是30天。当通过BucketCatalog开启新的bucket时,_id里的时间戳就是等同于control.min.的值,该值是从第一个插入bucket的测量数据中根据granularity选项来向下近似舍入而得到的。对于seconds,它将向下舍入到最接近的分钟,对于minutes,将向下舍入到最接近的小时,对于hours,它将向下舍入到最接近的日期。在闰秒和日历中的其他不规则情况下,这种舍入可能并不完美,并且通常通过对自纪元以来的秒数进行基本模运算来完成,假设每分钟 60 秒,每小时 60 分钟,以及每天 24 小时。更新和删除timeseries collection 支持符合以下限制的删除语句:仅支持metaField的属性的查询语句支持批量操作同时更新满足上面同样的条件,另外遵循:仅支持metaField对应的属性值更新操作指定一个带有更新运算符表达式的更新文档(而不是替换文档或者更新的pipeline操作)不支持upsert:true 操作这些更新与删除的执行都会被转换成相对应的底层的bucket collection的更新或删除操作。特别是,对于查询和更新文档,我们会使用真正的字段meta 替换集合的metaField。(参见 Bucket 集合规范)例如,对于一个使用 metaField: "tag"创建的timeseries集合db.ts,考虑一个对这个集合的更新操作,其查询语句是{"tag.tag.a": "a"} ,同时更新文档语句是 {$set: {"tag.tag.a": "A"}, $rename: {"tag.tag.b": "tag.tag.c"}}。这个更新操作在 db.system.buckets.ts上会被转换成,查询语句是{"meta.tag.a": "a"},更新语句是 {$set: {"meta.tag.a": "A"}, $rename: {"meta.tag.b": "meta.tag.c"}}。然后这个转换后的更新语句就可以像普通的更新操作一样执行。上面这些转换流程也适用于删除操作。参考文献MongoDB Blog: Time Series Data and MongoDB: Part 2 - Schema Design Best Practices关于作者:黄璜
  • [教程指导] 论 《基于Spark实现车主驾驶行为分析》 实验避坑,100%完成
                                                              已完成1. 实验链接:沙箱实验室_在线实验_上云实践_云计算实验_AI实验_华为云官方实验平台-华为云 (huaweicloud.com)1. 问题处理1实验要求关闭高可用,且节点为1个,实际购买为高可用,加最低2个,MRS创建部署成功后不会自动删除,不影响实验2.问题处理2注意OBS的压缩包上传,批量文件是上传到input文件中,而压缩包是直接上传到桶的目录下,否则作业运行的时候会失败3.问题处理2实验界面是S3的抬头路径,实际上选择OBS即可,并且不要忽略了AK SK后面的这个  1输出路径请手动输入一个不存在的目录,例如obs://obs-demo-analysis-hwt4/output/最佳实践链接:  使用Spark2x实现车联网车主驾驶行为分析_MapReduce服务 MRS_最佳实践_数据分析_华为云 (huaweicloud.com)
  • [知识分享] HDFS 细粒度锁优化,FusionInsight MRS有妙招
    本文分享自华为云社区《[FusionInsight MRS HDFS 细粒度锁优化实践](https://bbs.huaweicloud.com/blogs/353362?utm_source=csdn&utm_medium=bbs-ex&utm_campaign=ei&utm_content=content)》,作者:pippo。 # 背景 HDFS依赖NameNode作为其元数据服务。NameNode将整个命名空间信息保存在内存中提供服务。读取请求(getBlockLocations、listStatus、getFileInfo)等从内存中获取信息。写请求(mkdir、create、addBlock)更新内存状态,并将日志事务写入到日志服务(QJM)。 HDFS NameNode的性能决定了整个Hadoop集群的可扩展性。命名空间性能的改进对于进一步扩展Hadoop集群至关重要。 - Apache HDFS 整体架构如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653615824071691620.png) - Apache HDFS 交互信息如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653615845153231628.png) # 痛点 HDFS NameNode的写操作的性能受全局命名空间系统锁的限制。每个写操作都会获取锁并保留锁,直到该操作执行完成。这样可以防止写入操作的并发执行,即使它们是完全独立的,例如命名空间中的对象不相交部分。 # 什么是Fine Grained Locking(FGL) FGL【细粒度锁】的主要目的是通过在独立命名空间分区上用多个并发锁替换全局锁,允许写入操作的并发。 # 当前状态 HDFS设计思路为一次写,多次读。读操作使用共享锁,写操作使用独占锁。由于HDFS NameNode元数据被设计为单个内存空间中的命名空间树,因此树的任何级别的写操作都会阻塞其它写操作,直到当前写操作完成。虽然写是一次,但是当涉及大量并发读/写操作时,这就会影响整体性能。 在HDFS NameNode中,内存中的元数据有三种不同的数据结构: - INodeMap: inodeid -> INode - BlocksMap: blockid -> Blocks - DataNodeMap: datanodeId -> DataNodeInfo INodeMap结构中包含inodeid到INode的映射,在整个Namespace目录树种存在两种不同类型的INode数据结构:INodeDirectory和INodeFile。其中INodeDirectory标识的是目录树中的目录,INodeFile标识的是目录树中的文件。 BlocksMap结构中包含blockid到BlockInfo的映射。每一个INodeFile都会包含数量不同的Block,具体数量由文件大小以及每个Block大小来决定,这些Block按照所在文件的先后顺序组成BlockInfo数组,BlockInfo维护的是Block的元数据;通过blockid可以快速定位Block。 DataNodeMap结果包含datanodeid到DataNodeInfo的映射。当集群启动过程中,通过机架感知逐步建立起整个集群的机架拓扑结构,一般在NameNode的生命周期内不会发生大变化。 通过INodeMap和BlocksMap共同标识存储在HDFS中的每个文件及其块的信息。随着文件数量的增加,此数据结构大小也会随之增加,并对单个全局锁的性能产生很大影响。下面我们采用简单的文件目录树结构来演示现有的单一全局锁在文件系统的缺点。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653615920936272267.png) HDFS NameNode 内存目录树结构 如上图所示,/D11/D21/D31/F2 和 /D12/D24/D38/F16是不相交的文件,即有不同的父节点和祖父节点。可以看到F2和F16是两个独立的文件,对其中一个文件的任何操作都不应该影响另一个文件。 # 设计 如前所述,HDFS NameNode将文件信息和元数据结构在内存中保存为一个目录树结构。当修改任意两个独立的文件时,第二次操作需要等到第一次操作完成并释放锁。释放锁以后,只有第二个操作获取锁后才能继续修改文件系统。类似的,后续操作也会阻塞,直到第二次操作释放锁。 在下面的例子中,我们考虑2个文件并发写入(创建、删除、追加。。。)操作。F2和F16是文件系统下的2个独立文件(具有不同的父节点和祖父节点)。在将内容追加到F2时,F16也可以同时进行修改。但是由于整个目录树全局对象锁,对F16的操作必须等对F2的操作完成后才能执行。 代替全局锁,可以将锁分布在一组名为“分区”的文件中,每个分区都可以有自己的锁。现在F2属于分区-1,F16属于分区-2。F2文件操作可以通过获取分区-1的锁来进行修改,F16文件操作可以通过获取分区-2的锁来进行修改。 和以前一样,需要先获取全局锁,然后搜索每个文件属于哪个分区。找到分区后,获取分区锁并释放全局锁。因此全局锁并不会完全被删除。相反,通过减少全局锁时间跨度,一旦释放全局锁,则其它写操作可以获取全局锁并继续获取分区锁来进行文件操作。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653615954378433039.png) 分区的数量如何决定?如果有效的定义分区从而获得更高的吞吐量? 默认情况下,分区大小为65K,溢出系数为1.8。一旦分区达到溢出条件,将会创建新分区并加入到分区列表中。理想情况下,可以拥有等于NameNode可用CPU核数的分区数,过多的分区数量将会使得CPU过载,而过少的分区数量无法充分利用CPU。 # 实现 引入新的数据结构-PartitionedGSet,它保存命名空间创建的所有分区信息。PartitionEntry是一个分区的对象结构。LatchLock是新引入的锁,用于控制两级锁--顶层锁和子锁。 # PartitionedGSet PartitionedGSet是一个两级层次结构。第一层RangeMap定义了INode的范围,并将它们映射到相应的分区中。分区构成了层次结构的第二级,每个分区存储属于指定范围的INode信息。为了根据键值查找INode,需要首先在RangeMap中找到对应键值的范围,然后在对应的RangeSet,使用哈希值获取到对应的INode。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653615992450186918.png) HDFS NameNode 两级层次结构 RangeGSet的容量有一定的阈值。当达到阈值后,将创建新的RangeGSet。空的或者未充分利用的RangeGSet由后台RangeMonitor守护程序来进行垃圾回收。 HDFS NameNode启动时,根据镜像中的INode数量计算合理的初始分区数。同时还需要考虑CPU核数,因为将分区数量提高到远超CPU核数并不会增加系统的并行性。 - 动态分区:分区的大小有限,可以像平衡树一样可以进行分裂和合并。 - 单个分区:只有一个分区,且只有一个与之相对应的锁,并且应和全局锁类似。这适用于小型集群或写入负载比较轻的集群。 - 静态分区:有一个固定的RangeMap,不添加或者合并现有分区。这适用于分区均匀增长的文件系统。而且这将消除锁定RangeMap的要求,允许并行使用锁。 # Latch Lock RangeMap与RangeGSet分别有单独的锁。Latch Lock是一种锁模式,其中首先获取RangeMap的锁,以查找与给定INode键对应的范围,然后获取与分区对应的RangeGSet的锁,同时释放RangeMap锁。这样针对任何其它范围的下一个操作都可以开始并发执行。 在RangeMap上持有锁类似于全局锁。目录删除、重命名、递归创建目录等几个操作可能需要锁定多个RangeGSet。这要确保当前HDFS语义所要求的操作的原子性。例如,如果重命名将文件从一个目录移动到另一个目录,则必须锁定包含文件、源和目标目录的RangeMap,以便使重命名成为原子。此锁定模式的一个理想优化是允许某些操作的Latch Lock与其他操作的全局锁结合使用。 # INode Keys HDFS中的每个目录和文件都有一个唯一的INode,即使文件被重命名或者移动到其它位置,该INode会保持不变。INode键是以文件INode本身结尾,前面包含父INode的固定长度序列。 Key Definition: key(f) = selfId是文件的INodeId,pId是父目录的INodeId,ppId是父目录的父目录的INodeId。INode键的这种表达不仅保证了同级,同时也保证了表亲(相同祖父节点)在大多数情况下被分区到相同的范围中。这些键基于INodeId而非文件名,允许简单的文件和目录进行重命名,称为就地重命名,而无需重新进行分区。 # 效果 经过测试验证使用和不使用FGL功能性能,在主要写入操作情况下,吞吐量平均提高了25%左右。 ## 详细性能对比 使用Hadoop NN Benchmarking工具(NNThroughputBenchmark)来验证NameNode的性能。每个写入API验证并观察到平均25%的性能提升。有很少一部分轻微或者没有提升的API,分析并发现这些API均是轻量级API,因此没有太大的提升。 NNThroughputBenchmark是用于NameNode性能基准测试工具。该工具提供了非常基本的API调用,比如创建文件,创建目录、删除。在这个基础上进行了增强,从而能够支持所有写入API,并能够捕获使用和不使用FGL的版本的性能数据。 用于测试的数据集:线程数 1000、文件数 1000000、每个目录文件数 40。 # 写入调用频率高的API ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653616077867487794.png) # 其它内部写API ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653616090511168604.png) # 常用读取API: 通过完整的FGL实现,读取API也有很好的性能提升。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653616112137858409.png) # 运行基准测试工具的命令: ./hadoop org.apache.hadoop.hdfs.server.namenode.NNThroughputBenchmark -fs file:/// -op create -threads 200 -files 1000000 -filesPerDir 40 –close ./hadoop org.apache.hadoop.hdfs.server.namenode.NNThroughputBenchmark -fs hdfs:x.x.x.x:dddd/hacluster -op create -threads 200 -files 1000000 -filesPerDir 40 -close # 参考 与FGL相关的社区讨论 Hadoop Meetup Jan 2019 — HDFS Scalability and Consistent Reads from Standby Node, which covers Three-Stage Scalability Plan. Slides 21–25 社区中跟踪与NameNode可扩展性相关的其它Jira HDFS-5453. Support fine grain locking in FSNamesystem HDFS-5477. Block manager as a service HDFS-8286. Scaling out the namespace using KV store HDFS-14703. Namenode Fine Grained Locking (design inspired us to implement it fully) # 总结 华为云FusionInsight MRS云原生数据湖为政企客户提供湖仓一体、云原生的数据湖解决方案,构建一个架构可持续演进的离线、实时、逻辑三种数据湖,支撑政企客户全量数据的实时分析、离线分析、交互查询、实时检索、多模分析、数据仓库、数据接入和治理等大数据应用场景。 华为云FusionInsight MRS通过FGL对HDFS NameNode锁机制进行优化,有效提升了NameNode的读写吞吐量,从而能够支持更多数据,更多业务请求访问,从而更好的支撑政企客户高效用数,业务洞见更准,价值兑现更快。
  • [技术干货] 开源工作流引擎Azkaban在MRS中的实践[转载]
    环境输入实践版本:Apache azkaban 4.0.0 (以单机版举例,集群版本配置过程类似),MRS 3.1.0 普通集群。Azkaban 插件地址Azkaban 官网Azkaban 源码地址安装azkaban-solo-serverAzkaban不提供二进制包,需要用户下载源码编译打包,获取到“azkaban-solo-server.zip”和“azkaban-db.zip”。环境准备。在华为云购买Linux弹性云服务器ECS,用于安装运行MRS集群客户端和Azkaban,并绑定弹性公网IP。在弹性云服务器ECS上安装运行MRS集群客户端,例如安装目录为“/opt/client”。准备数据表,参考MySQL教程。安装MySQL并授予本机访问权限。注意:Azkaban 4.0.0版本默认适配MySQL 5.1.28版本。创建Azkaban数据库,解压“azkaban-db.zip”获取“create-all-sql-*.sql”,并初始化。上传安装包并解压上传“azkaban-solo-server.zip”至“/opt/azkaban”目录执行以下命令解压并删除安装包unzip azkaban-solo-server.zip rm -f unzip azkaban-solo-server.zip修改配置文件“azkaban-solo-server/conf/azkaban.properties”配置端口根据实际情况修改,“jetty.port”和“mysql.port”端口号可使用默认值jetty.port=8081 database.type=mysql mysql.port=3306 mysql.host=x.x.x.x mysql.database=azkaban mysql.user=xxx mysql.password=xxx启动azkaban-solo-serversource /opt/client/bigdata_env cd /opt/azkaban/azkaban-solo-server sh bin/start-solo.sh访问Azkaban WEB UI在浏览器输入“http://ECS弹性IP:port”网址,进入Azkaban WebUI登录界面,输入用户信息登录Azkaban服务。说明默认端口(port):8081;用户名/密码:azkaban/azkaban;用户账号配置文件: /opt/azkaban/azkaban-solo-server/conf/azkaban-users.xmlazkaban-hdfs-viewer plugin配置指导连接HDFS需要用户下载源码编译获取“az-hdfs-viewer.zip”,并已完成安装azkaban-solo-server。环境准备配置Azkaban用户,添加supergroup用户组授予访问HDFS权限在HDFS的配置文件“core-stie.xml”中增加Azkaban代理用户a. 登录Manager页面,选择“集群 > 服务 > HDFS > 配置 > 全部配置 > HDFS(服务) > 自定义”b. 在参数文件“core-site.xml”中添加如下配置项: 名称值hadoop.proxyuser.azkaban.groups*hadoop.proxyuser.azkaban.hosts*c. 配置完成后,单击左上角“保存”d. 选择“概览 > 更多 > 重启服务”输入密码后重启HDFS服务上传安装包并解压上传“az-hdfs-viewer.zip”至“/opt/azkaban/azkaban-solo-server/plugins/viewer”目录执行以下命令解压并删除安装包unzip az-hdfs-viewer.zip rm -f az-hdfs-viewer.zip重命名解压后的文件名为"hdfs"mv az-hdfs-viewer hdfs修改并保存配置文件修改"azkaban-solo-server/plugins/viewer/hdfs/conf/plugin.properties"文件中的代理用户为步骤1中配置的Azkaban代理用户。修改"execute-as-user"的存放目录为Azkaban安装目录,如"opt/azkaban/azkaban-solo-server"。viewer.name=HDFS viewer.path=hdfs viewer.order=1 viewer.hidden=false viewer.external.classpaths=extlib/* viewer.servlet.class=azkaban.viewer.hdfs.HdfsBrowserServlet hadoop.security.manager.class=azkaban.security.HadoopSecurityManager_H_2_0 azkaban.should.proxy=false proxy.user=azkaban // mrs集群中配置的azkaban代理用户名 allow.group.proxy=true file.max.lines=1000 #Specifying the error message we want user to get when they don't have permissionsviewer.access_denied_message=The folder you are trying to access is protected. execute.as.user=false // execute-as-user存放目录 azkaban.native.lib=/opt/azkaban/azkaban-solo-server若不存在该文件需手动创建并配置以上内容拷贝HDFS插件所需包至"/opt/azkaban/azkaban-solo-server/extlib"目录cp /opt/client/HDFS/hadoop/share/hadoop/hdfs/*.jar /opt/azkaban/azkaban-solo-server/extlib cp /opt/client/HDFS/hadoop/share/hadoop/client/hadoop-client-api-3.1.1-mrs-2.0.jar /opt/azkaban/azkaban-solo-server/extlib cp /opt/client/HDFS/hadoop/share/hadoop/common/*.jar /opt/azkaban/azkaban-solo-server/extlib不同MRS版本所需Hadoop相关版本不同,通过find /opt/client查询目检查目录结构目录结构应当为:- azkaban-solo-server - bin - conf - extlib (hadoop相关插件第三方包) - lib - logs - plugins - jobtypes(job插件目录) - commonprivate.properties - hive - plugin.properties - private.properties - hadoopJava - plugin.properties - private.properties - viewer - hdfs - conf - plugin.properties - lib (az-hdfs-viewer.zip解压后的lib) - temp - web重启Azkaban-solo-server服务cd /opt/azkaban/azkaban-solo-server sh bin/shutdown-solo.sh sh bin/start-solo.sh访问HDFS Browser在浏览器输入“http://ECS弹性IP:8081”网址,进入Azkaban WebUI登录界面,输入用户信息登录Azkaban服务单击"HDFS"plugins-jobtypes hadoop-job 部署运行安装azkaban-solo-server完成后,再部署验证hadoop-job环境准备获取"azkaban-plugins-3.0.0.zip"压缩包编译获取azkaban提供的hadoopjava-wordcount实例程序包“az-hadoop-jobtype-plugin.jar”上传插件配置文件解压"azkaban-plugins-3.0.0.zip" 获取"azkaban-plugins-3.0.0\plugins\jobtype\jobtypes"下"hadoopJava"文件夹将“hadoopJava”文件夹上传至“/plugin”目录。目录不存在则需新建修改配置文件"azkaban-solo-server/plugins/jobtypes/commonprivate.properties"# set execute-as-user execute.as.user=false hadoop.security.manager.class=azkaban.security.HadoopSecurityManager_H_2_0 azkaban.should.proxy=false obtain.binary.token=false proxy.user=azkaban // MRS集群中配置的Azkaban代理用户名 allow.group.proxy=true // execute-as-user存放目录 azkaban.native.lib=/opt/azkaban/azkaban-solo-server # hadoop hadoop.home=/opt/client/HDFS/hadoop //opt/client为MRS集群客户端安装目录 hive.home=/opt/client/Hive/Beeline spark.home=/opt/client/Spark/spark hadoop.classpath=${hadoop.home}/etc/hadoop,${hadoop.home}/share/hadoop/common/*,${hadoop.home}/share/hadoop/common/lib/*,${hadoop.home}/share/hadoop/hdfs/*,${hadoop.home}/share/hadoop/hdfs/lib/*,${hadoop.home}/share/hadoop/yarn/*,${hadoop.home}/share/hadoop/yarn/lib/*,${hadoop.home}/share/hadoop/mapreduce/*,${hadoop.home}/share/hadoop/mapreduce/lib/* jobtype.global.classpath=${hadoop.home}/etc/hadoop,${hadoop.home}/share/hadoop/common/*,${hadoop.home}/share/hadoop/common/lib/*,${hadoop.home}/share/hadoop/hdfs/*,${hadoop.home}/share/hadoop/hdfs/lib/*,${hadoop.home}/share/hadoop/yarn/*,${hadoop.home}/share/hadoop/yarn/lib/*,${hadoop.home}/share/hadoop/mapreduce/*,${hadoop.home}/share/hadoop/mapreduce/lib/*示例程序验证准备测试数据"input.txt"文件,文件内容可参考如下格式进行自定义,存放路径如"/opt/input.txt"Ross male 33 3674 Julie male 42 2019 Gloria female 45 3567 Carol female 36 2813通过HDFS客户端将测试数据"input.txt"上传至"hdfs /tmp/azkaban_test"a. 以客户端安装用户,登录安装客户端的节点b. 执行以下命令,切换到客户端安装目录 cd /opt/clientc. 执行以下命令配置环境变量 source bigdata_envd. 执行HDFS Shell命令上传文件 hdfs dfs -put /opt/input.txt /tmp/azkaban_test用户在本地编写并保存“wordcount.job”文件,内容如下type=hadoopJava job.extend=false job.class=azkaban.jobtype.examples.java.WordCount classpath=./lib/*,/opt/azkaban-solo-server-0.1.0-SNAPSHOT/lib/* force.output.overwrite=true input.path=/tmp/azkaban_test output.path=/tmp/azkaban_test_out在浏览器输入“http://ECS弹性IP:port”网址,进入Azkaban WebUI登录界面,输入用户信息登录Azkaban服务,提交job运行验证Spark command job—参考客户端命令spark任务有两种运行方式,一种是command方式,另一种是spark jobtype方式。Command方式:需要指定spark_home为/opt/client/Spark/spark/在MRS集群客户端节点可以通过echo $SPARK_HOME获取实际Spark安装地址。设置azkanban所在ECS全局环境变量,添加source {MRS客户端}后需要重启azkaban才可生效jobtype方式:参考plugins-jobtypes hadoop-job 部署运行。链接:https://bbs.huaweicloud.com/blogs/352933
  • [问题求助] 【abc产品】【批处理功能】导入导出页面接口报401
    【功能模块】导入导出【操作步骤&问题现象】1、打开导入导出页面 访问接口/native/CommonServices__BatchFileProcess/0.1.0/processlog/queryByCondition  高频率出现4012、接口401后  返回登录后的默认页面3、abc后台管理页面  打开服务中心》服务管理页面  接口/nasc/v1/services 也返回401【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [教程指导] 如何修改MRS集群安全模式中Kerberos有效时间?
    1. 以root用户登录到集群客户端节点。2. 执行以下命令登录到Kerberos控制台。cd /opt/Bigdata/clientsource bigdata_envkadmin -p kadmin/admin首次登录需要修改密码默认密码为Admin@123,kadmin密码无法恢复,请一定保存好修改后的密码。3. 登录后使用如下命令修改,此处以admin用户举例,也可以使用其他用户。此参数默认是24小时,最短可修改为15分钟。modprinc -maxlife 15min admin  正确的话会提示修改成功:Principal "admin@HADOOP.COM" modified.完成后执行q退出控制台。如果要修改为24小时,则执行:modprinc -maxlife 24h admin 4. 在环境中使用上述用户进行kinit操作,之后进行klist,可以看到有效期已经修改为15分钟,如下kinit adminklist 显示如下:Ticket cache: FILE:/tmp/l00146419Default principal: admin@HADOOP.COMValid starting      Expires             Service principal05/13/2022 12:00:00  05/14/2022 12:15:00  krbtgt/HADOOP.COM@HADOOP.COM
  • [基础组件] 【MRS】【jar包】华为MRS的jar包版本和开源的有差异吗?
    以flink为例,华为的1.12.2-hw-ei-312005和开源的1.12.2版本有差异吗?有没有途径获取完整的华为MRS所有依赖jar包(客户端中jar包不全)在8.1.2客户端中只有flink-connector-kafka_2.11_1.12.2-hw-ei-312005,但是没找到flink-java、flink-streaming-java_2.11对应的1.12.2-hw-ei-312005版本。