华为云用户手册

  • 操作步骤 登录安装客户端的节点。 执行以下命令,切换到客户端安装目录。 cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 如果集群为安全模式,执行distcp命令的用户所属的用户组必须为supergroup组,且执行以下命令进行用户认证。普通模式集群无需执行用户认证。 kinit 组件业务用户 直接执行distcp命令。例如: hadoop distcp hdfs://hacluster/source hdfs://hacluster/target
  • 配置描述 进入Mapreduce服务参数“全部配置”界面,在搜索框中输入参数名称。具体操作请参考修改集群服务配置参数章节。 表1 参数描述 参数 描述 默认值 mapreduce.cluster.acls.enabled 是否开启对Job History Server权限控制的开关。 true mapreduce.cluster.administrators 用于指定MapReduce集群管理员列表,可以配置用户和用户组,用户或者用户组之间用逗号间隔,用户和用户组之间用空格间隔,举例:userA,userB groupA,groupB。当配置为*时表示所有用户或用户组。 mapred supergroup,System_administrator_186
  • 样例 以Hive导出到sqlserver2014数据库为例。 在sqlserver2014上创建一张空表“test_1”用于存储Hive数据。执行以下语句: create table test_1 (id int, name text, value text); 配置“Hive输入”算子,生成三个字段A、B和C: 设置了数据连接器后,单击“自动识别”,系统将自动读取数据库中的字段,可根据需要选择添加,然后根据业务场景手动进行完善或者修正即可,无需逐一手动添加。 此操作会覆盖表格内已有数据。 通过“表输出”算子,将A、B和C输出到“test_1”表中: select * from test_1;
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 Hive数据库 Hive的数据库名称。 String 否 default Hive表名 配置Hive表名。 仅支持一个Hive表。 String 是 无 分区过滤器 配置分区过滤器可以导出指定分区数据,默认为空,导出整个表数据。 例如导出分区字段locale的值为“CN”或“US”的表数据,输入如下: locale = "CN" or locale = "US" String 否 - Hive输入字段 配置Hive输入信息: 列名:配置Hive列名。 字段名:配置输入字段名。 类型:配置字段类型。 长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 map 是 -
  • 前提条件 创建或获取该任务中创建Loader作业的业务用户和密码。 确保用户已授权访问作业执行时操作的HDFS目录和数据。 ClickHouse相关表已创建,并确保用户已授权访问作业执行时操作该表的权限。 检查磁盘空间,确保没有出现告警且余量满足导入、导出数据的大小。 使用Loader从HDFS导入数据时,确保HDFS输入路径目录名、输入路径的子目录名及子文件名不能包含特殊字符/\"':;,中的任意字符。 如果设置的作业需要使用指定YARN队列功能,该用户需要已授权有相关YARN队列的权限。 设置任务的用户需要获取该任务的执行权限,并获取该任务对应的连接的使用权限。
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 逆序转换的字段 配置字符串逆序转换的字段相关信息: 输入字段名:配置输入字段名,需填写上一个转换步骤生成的字段名。 输出字段名:配置输出字段名。 类型:配置字段类型。 输出字段长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 map 是 无
  • 注意事项 Group By数据倾斜 Group By也同样存在数据倾斜的问题,设置“hive.groupby.skewindata”为“true”,生成的查询计划会有两个MapReduce Job,第一个Job的Map输出结果会随机的分布到Reduce中,每个Reduce做聚合操作,并输出结果,这样的处理会使相同的Group By Key可能被分发到不同的Reduce中,从而达到负载均衡,第二个Job再根据预处理的结果按照Group By Key分发到Reduce中完成最终的聚合操作。 Count Distinct聚合问题 当使用聚合函数count distinct完成去重计数时,处理值为空的情况会使Reduce产生很严重的数据倾斜,可以将空值单独处理,如果是计算count distinct,可以通过where子句将该值排除掉,并在最后的count distinct结果中加1。如果还有其他计算,可以先将值为空的记录单独处理,再和其他计算结果合并。
  • 命令说明 该操作主要涉及新增的hbase shell命令如下: get_slowlog_responses:查询慢请求信息。 get_largelog_responses:查询超大请求信息。 clear_slowlog_responses:清理RegionServer缓存中的数据。 可以在hbase shell中执行如下命令查看相关命令如何使用: help 'cmdName' 例如,执行help 'clear_slowlog_responses'查看clear_slowlog_responses命令的使用方法:
  • 操作场景 该章节主要介绍如何在HBase Shell命令行查询慢请求或超大请求信息。慢请求是指通过hbase shell命令查询服务端时,RPC请求响应时长超过阈值(即HBase服务端配置参数“hbase.ipc.warn.response.time”,默认值为“3000”ms)的请求;超大请求是指通过hbase shell命令查询服务端时,RPC请求一次返回数据量大小超过阈值(即HBase服务端配置参数“hbase.ipc.warn.response.size”,默认值为“5MB”)的请求。 每个RegionServer节点默认会缓存最近的256条慢请求和超大请求,可以通过 FusionInsight Manager中HBase服务端配置参数“hbase.regionserver.slowlog.ringbuffer.size”调整缓存的大小。 该章节内容适用于 MRS 3.3.0 及之后版本。
  • 操作步骤 创建工作流,请参考使用Hue创建工作流。 在工作流编辑页面,选择“Fs”按钮,将其拖到操作区中。 在弹出的“Fs”窗口中单击“添加”。 单击“CREATE DIRECTORY+”,添加待创建的HDFS目录。例如“/user/admin/examples/output-data/mkdir_workflow”和“/user/admin/examples/output-data/mkdir_workflow1”。 如果单击了“DELETE PATH+”添加待删除的HDFS路径,该参数不能为空,否则会默认删除HDFS的“/user{提交用户名}”目录,可能会导致其他任务运行异常。 单击Oozie编辑器右上角的。 保存前如果需要修改作业名称(默认为“My Workflow”),可以直接单击该名称进行修改,例如“HDFS-Workflow”。 保存完成后,单击,提交该作业。 作业提交后,可通过Hue界面查看作业的详细信息、日志、进度等相关内容。
  • Clustering架构 Hudi通过其写入客户端API提供了不同的操作,如insert/upsert/bulk_insert来将数据写入Hudi表。为了能够在文件大小和入湖速度之间进行权衡,Hudi提供了一个hoodie.parquet.small.file.limit配置来设置最小文件大小。用户可以将该配置设置为“0”,以强制新数据写入新的文件组,或设置为更高的值以确保新数据被“填充”到现有小的文件组中,直到达到指定大小为止,但其会增加摄取延迟。 为能够支持快速摄取的同时不影响查询性能,引入了Clustering服务来重写数据以优化Hudi 数据湖 文件的布局。 Clustering服务可以异步或同步运行,Clustering会添加了一种新的REPLACE操作类型,该操作类型将在Hudi元数据时间轴中标记Clustering操作。 Clustering服务基于Hudi的MVCC设计,允许继续插入新数据,而Clustering操作在后台运行以重新格式化数据布局,从而确保并发读写者之间的快照隔离。 总体而言Clustering分为两个部分: 调度Clustering:使用可插拔的Clustering策略创建Clustering计划。 识别符合Clustering条件的文件:根据所选的Clustering策略,调度逻辑将识别符合Clustering条件的文件。 根据特定条件对符合Clustering条件的文件进行分组。每个组的数据大小应为targetFileSize的倍数。分组是计划中定义的"策略"的一部分。此外还有一个选项可以限制组大小,以改善并行性并避免混排大量数据。 将Clustering计划以avro元数据格式保存到时间线。 执行Clustering:使用执行策略处理计划以创建新文件并替换旧文件。 读取Clustering计划,并获得ClusteringGroups,其标记了需要进行Clustering的文件组。 对于每个组使用strategyParams实例化适当的策略类(例如:sortColumns),然后应用该策略重写数据。 创建一个REPLACE提交,并更新HoodieReplaceCommitMetadata中的元数据。
  • 配置描述 参考修改集群服务配置参数进入Yarn服务参数“全部配置”界面,在搜索框中输入参数名称。 根据表1,对如下参数进行设置。 表1 AM作业保留相关参数 参数 说明 默认值 yarn.app.mapreduce.am.work-preserve 是否开启AM作业保留特性。 false yarn.app.mapreduce.am.umbilical.max.retries AM作业保留特性中,运行的容器尝试恢复的最大次数。 5 yarn.app.mapreduce.am.umbilical.retry.interval AM作业保留特性中,运行的容器尝试恢复的时间间隔。单位:毫秒。 10000 yarn.resourcemanager.am.max-attempts ApplicationMaster的重试次数。增加重试次数可以避免当资源不足时造成AM启动失败。 适用于所有ApplicationMaster的全局设置。每个ApplicationMaster都可以使用API设置一个单独的最大尝试次数,但这个次数不能大于全局的最大次数。如果大于了,那ResourceManager将会覆写这个单独的最大尝试次数。取值范围大于等于1。 2
  • 配置场景 在YARN中,ApplicationMaster(AM)与Container类似,都运行在NodeManager(NM)上(本文中忽略未管理的AM)。AM可能由于多种原因崩溃、退出或关闭。如果AM停止运行,ResourceManager(RM)会关闭ApplicationAttempt中管理的所有Container,其中包括当前在NM上运行的所有Container。RM会在另一计算节点上启动新的ApplicationAttempt。 对于不同类型的应用,希望以不同方式处理AM重启的事件。MapReduce类应用的目标是不丢失任务,但允许丢失当前运行的Container。但是对于长周期的YARN服务而言,用户可能并不希望由于AM的故障而导致整个服务停止运行。 YARN支持在新的ApplicationAttempt启动时,保留之前Container的状态,因此运行中的作业可以继续无故障的运行。 图1 AM作业保留
  • 操作场景 Hive业务还可能需要关联使用其他组件,例如HQL语句触发MapReduce任务需要设置Yarn权限,或者Hive over HBase的场景需要HBase权限。以下介绍Hive关联Yarn和Hive over HBase两个场景下的权限操作。 安全模式下Yarn和HBase的权限管理默认是开启的,因此在安全模式下默认需要配置Yarn和HBase权限。 在普通模式下,Yarn和HBase的权限管理默认是关闭的,即任何用户都有权限,因此普通模式下默认不需要配置Yarn和HBase权限。如果用户修改了Yarn或者HBase的配置来开启权限管理,则修改后也需要配置Yarn和HBase权限。 如果当前组件使用了Ranger进行权限控制,须基于Ranger配置相关策略进行权限管理,具体操作可参考添加Hive的Ranger访问权限策略。
  • Flink作业大小表Join去重 在双流关联的业务模型中,关联算子接收到其中一个流发送的大量重复数据,则会导致下游算子需要处理大量重复数据,影响作业性能。 如A表字段(P1,A1,A2)使用如下方式关联B表字段(P1,B1,B2,B3)生成C的场景中,B表信息发生大量更新,但是B中的所需字段没有更新,在该关联中仅用到了B表的B1和B2字段,对于B表,每个记录更新只更新B3字段,B1和B2不更新,因此当B表更新,可以忽略更新后的数据。 select A.A1,B.B1,B.B2 from A join B on A.P1=B.P1 为解决如上问题可通过使用hint单独为左表(duplicate.left)或右表(duplicate.right)设置去重: 格式 为左表设置去重 /*+ OPTIONS('duplicate.left'='true')*/ 为右表设置去重 /*+ OPTIONS('duplicate.right'='true')*/ 同时为左表和右表设置去重 /*+ OPTIONS('duplicate.left'='true','duplicate.right'='true')*/ 在SQL语句中配置 如同时为左表“user_info”和右表“user_score”设置去重。 CREATE TABLE user_info (`user_id` VARCHAR, `user_name` VARCHAR) WITH ( 'connector' = 'kafka', 'topic' = 'user_info_001', 'properties.bootstrap.servers' = '192.168.64.138:21005', 'properties.group.id' = 'testGroup', 'scan.startup.mode' = 'latest-offset', 'value.format' = 'csv' ); CREATE table print( `user_id` VARCHAR, `user_name` VARCHAR, `score` INT ) WITH ('connector' = 'print'); CREATE TABLE user_score (user_id VARCHAR, score INT) WITH ( 'connector' = 'kafka', 'topic' = 'user_score_001', 'properties.bootstrap.servers' = '192.168.64.138:21005', 'properties.group.id' = 'testGroup', 'scan.startup.mode' = 'latest-offset', 'value.format' = 'csv' ); INSERT INTO print SELECT t.user_id, t.user_name, d.score FROM user_info as t JOIN -- 为左表和右表设置去重 user_score /*+ OPTIONS('duplicate.left'='true','duplicate.right'='true')*/ as d ON t.user_id = d.user_id;
  • Flink作业大小表Join Flink作业双流Join时存在大小表数据,通过内核broadcast策略确保小表数据发送到Join的task中,通过rebalance策略将大表数据打散到Join中,提高Flink SQL易用性,增强作业稳定性。 图1 Flink作业大小表Join 在使用Flink SQL时,该特性通过hints方法指定Join的左表或右表为广播表,另一张表为rebalance表,SQL语句实例如下,分别以A\C作为小表实例: 以A表作为广播表 使用Join方式 SELECT /*+ BROADCAST(A) */ a2, b2 FROM A JOIN B ON a1 = b1 使用Where方式 SELECT /*+ BROADCAST(A) */ a2, b2 FROM A, B WHERE a1 = b1 以A和C表作为广播表 SELECT /*+ BROADCAST(A, C) */ a2, b2, c2 FROM A JOIN B ON a1 = b1 JOIN C ON a1 = c1 支持通过“/*+ BROADCAST(smallTable1, smallTable2) */”方式使用该特性,兼容开源双流Join逻辑。 不支持开源双流Join和该特性的切换,因为该特性会将数据广播到每个Join算子。 不支持LEFT JOIN时小表为左表,RIGHT JOIN时小表为右表。
  • 集群外节点安装客户端 根据在集群外节点安装客户端前提条件,创建一个满足要求的弹性云服务器。 执行ntp时间同步,使集群外节点的时间与MRS集群时间同步。 执行vi /etc/ntp.conf命令编辑NTP客户端配置文件,并增加MRS集群中Master节点的IP并注释掉其他server的地址。 server master1_ip prefer server master2_ip 图2 增加Master节点的IP 执行service ntpd stop命令关闭NTP服务。 执行如下命令,手动同步一次时间: /usr/sbin/ntpdate 192.168.10.8 192.168.10.8为主Master节点的IP地址。 执行service ntpd start或systemctl restart ntpd命令启动NTP服务。 执行ntpstat命令查看时间同步结果。 参考以下步骤,从FusionInsight Manager下载集群客户端软件包并复制到E CS 节点后安装客户端。 访问集群Manager,参考集群内节点安装客户端下载集群客户端到主管理节点的指定目录。 使用root用户登录主管理节点,执行以下命令复制客户端安装包到待安装客户端的节点: scp -p /tmp/FusionInsight-Client/FusionInsight_Cluster_1_Services_Client.tar 待安装客户端节点的IP地址:/tmp 使用待安装客户端的用户登录待安装客户端节点。 执行以下命令安装客户端,如果当前用户无客户端软件包以及客户端安装目录的操作权限,需使用root用户进行赋权: cd /tmp tar -xvf FusionInsight_Cluster_1_Services_Client.tar tar -xvf FusionInsight_Cluster_1_Services_ClientConfig.tar cd FusionInsight_Cluster_1_Services_ClientConfig ./install.sh /opt/client 执行以下命令,切换到客户端目录并配置环境变量: cd /opt/client source bigdata_env 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户。如果当前集群未启用Kerberos认证,则无需执行此命令。 kinitMRS集群用户 例如,kinit admin。 直接执行组件的客户端命令。 例如使用HDFS客户端命令查看HDFS根目录文件,执行hdfs dfs -ls /。
  • 使用客户端 在已安装客户端的节点,执行sudo su - omm命令切换用户。执行以下命令切换到客户端目录: cd /opt/client 执行以下命令配置环境变量: source bigdata_env 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户。如果当前集群未启用Kerberos认证,则无需执行此命令。 kinitMRS集群用户 例如,kinit admin。 启用Kerberos认证的MRS集群默认创建“admin”用户账号,用于集群管理员维护集群。 直接执行组件的客户端命令。 例如:使用HDFS客户端命令查看HDFS根目录文件,执行hdfs dfs -ls /。
  • 在集群外节点安装客户端前提条件 已准备一个Linux弹性云服务器,主机操作系统及版本建议参见表1。 表1 参考列表 CPU架构 操作系统 支持的版本号 x86计算 Euler EulerOS 2.5 SUSE SUSE Linux Enterprise Server 12 SP4(SUSE 12.4) Red Hat Red Hat-7.5-x86_64(Red Hat 7.5) CentOS CentOS-7.6版本(CentOS 7.6) 鲲鹏计算(ARM) Euler EulerOS 2.8 CentOS CentOS-7.6版本(CentOS 7.6) 同时为弹性云服务分配足够的磁盘空间,例如“40GB”。 弹性云服务器的VPC需要与MRS集群在同一个VPC中。 弹性云服务器的安全组需要和MRS集群Master节点的安全组相同。 弹性云服务器操作系统已安装NTP服务,且NTP服务运行正常。 如果未安装,在配置了yum源的情况下,可执行yum install ntp -y命令自行安装。 需要允许用户使用密码方式登录Linux弹性云服务器(SSH方式)。 MRS集群安全组入方向将所有端口对客户端节点放开,具体操作请参考添加安全组规则。
  • 跨域关键技术和优势 无单点瓶颈:HSFabric可进行水平扩展,多通道并行传输,速率最大化,跨地域延迟不再成为瓶颈。 更好地计算资源利用:将数据压缩,序列化的任务下推到Worker并行计算。 高效序列化:优化数据序列化格式,同等数据量级下,更低的数据传输量。 流式传输:基于HTTP 2.0 stream, 保证HTTP协议通用性的同时,减少大量数据传输中RPC 重复调用。 断点续传:防止数据传输过程中连接异常断开后重传大量数据。 流量管控:支持按地区限制数据传输所占用的网络带宽,避免在跨地域有限带宽场景下因流量独占而影响其他业务的正常使用。
  • 跨源功能使用指导 HetuEngine能够支持多种数据源的快速联合查询并提供可视化的数据源配置、管理页面,可通过HSConsole界面快速添加如下数据源,配置数据源前请先参考HetuEngine交互查询引擎概述: 添加Hive数据源 添加Hudi数据源 添加ClickHouse数据源 添加GAUSSDB数据源 添加HBase数据源 添加跨集群HetuEngine数据源 添加IoTDB数据源 添加MySQL数据源
  • 配置场景 Spark SQL Adaptive Execution特性用于使Spark SQL在运行过程中,根据中间结果优化后续执行流程,提高整体执行效率。当前已实现的特性如下: 自动设置shuffle partition数。 在启用Adaptive Execution特性前,Spark SQL根据spark.sql.shuffle.partitions配置指定shuffle时的partition个数。此种方法在一个应用中执行多种SQL查询时缺乏灵活性,无法保证所有场景下的性能更优。开启Adaptive Execution后,Spark SQL将自动为每个shuffle过程动态设置partition个数,而不是使用通用配置,使每次shuffle过程自动使用最合理的partition数。 动态调整执行计划。 在启用Adaptive Execution特性前,Spark SQL根据RBO和CBO的优化结果创建执行计划,此种方法忽略了数据在运行过程中的结果集变化。比如基于某个大表创建的视图,与其他大表join时,即便视图的结果集很小,也无法将执行计划调整为BroadcastJoin。启用Adaptive Execution特性后,Spark SQL能够在运行过程中根据前面stage的运行结果动态调整后续的执行计划,从而获得更好的执行性能。 自动处理数据倾斜。 在执行SQL语句时,如果存在数据倾斜,可能导致单个executor内存溢出、任务执行缓慢等问题。启动Adaptive Execution特性后,Spark SQL能自动处理数据倾斜场景,对倾斜的分区,启动多个task进行处理,每个task读取部分shuffle输出文件,再对这部分任务的Join结果进行Union操作,以达到消除数据倾斜的效果。
  • 操作步骤 要使用CBO优化,可以按照以下步骤进行优化。 需要先执行特定的SQL语句来收集所需的表和列的统计信息。 SQL命令如下(根据具体情况选择需要执行的SQL命令): 生成表级别统计信息(扫表): ANALYZE TABLE src COMPUTE STATIS TICS 生成sizeInBytes和rowCount。 使用ANALYZE语句收集统计信息时,无法计算非HDFS数据源的表的文件大小。 生成表级别统计信息(不扫表): ANALYZE TABLE src COMPUTE STATISTICS NOSCAN 只生成sizeInBytes,如果原来已经生成过sizeInBytes和rowCount,而本次生成的sizeInBytes和原来的大小一样,则保留rowCount(如果存在),否则清除rowCount。 生成列级别统计信息: ANALYZE TABLE src COMPUTE STATISTICS FOR COLUMNS a, b, c 生成列统计信息,为保证一致性,会同步更新表统计信息。目前不支持复杂数据类型(如Seq, Map等)和HiveStringType的统计信息生成。 显示统计信息: DESC FORMATTED src 在Statistics中会显示“xxx bytes, xxx rows”分别表示表级别的统计信息。也可以通过如下命令显示列统计信息: DESC FORMATTED src a 使用限制:当前统计信息收集不支持针对分区表的分区级别的统计信息。 在Spark客户端的“spark-defaults.conf”配置文件中进行表1设置。 表1 参数介绍 参数 描述 默认值 spark.sql.cbo.enabled CBO总开关。 true表示打开, false表示关闭。 要使用该功能,需确保相关表和列的统计信息已经生成。 false spark.sql.cbo.joinReorder.enabled 使用CBO来自动调整连续的inner join的顺序。 true:表示打开 false:表示关闭 要使用该功能,需确保相关表和列的统计信息已经生成,且CBO总开关打开。 false spark.sql.cbo.joinReorder.dp.threshold 使用CBO来自动调整连续inner join的表的个数阈值。 如果超出该阈值,则不会调整join顺序。 12
  • 回答 针对avro格式表查询报错,根本原因是avro格式表schema不匹配导致,需要考虑增量和存量avro格式表查询两个场景: 增量avro格式表,需要创建表之前设置参数spark.sql.forceConvertSchema.enabled=true,会将avro表格式强转指定数据类型,一次性修改schema。 存量avro格式表,查询avro表之前设置参数spark.sql.forceConvertSchema.enabled=true,如果查询失败,可能avro格式表schema被缓存,执行refresh table命令,清除缓存后再设置参数进行查询,会将avro表格式强转指定数据类型,客户端临时修改schema。
  • 注意事项 Join数据倾斜问题。执行任务的时候,任务进度长时间维持在99%,这种现象叫数据倾斜。 数据倾斜是经常存在的,因为有少量的Reduce任务分配到的数据量和其他Reduce差异过大,导致大部分Reduce都已完成任务,但少量Reduce任务还没完成的情况。 解决数据倾斜的问题,可通过设置“set hive.optimize.skewjoin=true”并调整“hive.skewjoin.key”的大小。“hive.skewjoin.key”是指Reduce端接收到多少个key即认为数据是倾斜的,并自动分发到多个Reduce。
  • Sort Merge Bucket Map Join 使用Sort Merge Bucket Map Join必须满足以下2个条件: join的两张表都很大,内存中无法存放。 两张表都按照join key进行分桶(clustered by (column))和排序(sorted by(column)),且两张表的分桶数正好是倍数关系。 通过如下设置,启用Sort Merge Bucket Map Join: set hive.optimize.bucketmapjoin=true; set hive.optimize.bucketmapjoin.sortedmerge=true; 这种Map Join也没有Reduce任务,是在Map任务前启动MapReduce Local Task,将小表内容按桶读取到本地,在本机保存多个桶的HashTable备份并写入HDFS,并保存在Distributed Cache中,在Map Task中从本地磁盘或者Distributed Cache中按桶一个一个读取小表内容,然后与大表做匹配直接得到结果并输出。
  • Map Join Hive的Map Join适用于能够在内存中存放下的小表(指表大小小于25MB),通过“hive.mapjoin.smalltable.filesize”定义小表的大小,默认为25MB。 Map Join的方法有两种: 使用/*+ MAPJOIN(join_table) */。 执行语句前设置如下参数,当前版本中该值默认为“true”。 set hive.auto.convert.join=true; 使用Map Join时没有Reduce任务,而是在Map任务前起了一个MapReduce Local Task,这个Task通过TableScan读取小表内容到本机,在本机以HashTable的形式保存并写入硬盘上传到DFS,并在Distributed Cache中保存,在Map Task中从本地磁盘或者Distributed Cache中读取小表内容直接与大表join得到结果并输出。 使用Map Join时需要注意小表不能过大,如果小表将内存基本用尽,会使整个系统性能下降甚至出现内存溢出的异常。
  • Hudi表类型 Copy On Write 写时复制表也简称cow表,使用parquet文件存储数据,内部的更新操作需要通过重写原始parquet文件完成。 优点:读取时,只读取对应分区的一个数据文件即可,较为高效。 缺点:数据写入的时候,需要复制一个先前的副本再在其基础上生成新的数据文件,这个过程比较耗时。且由于耗时,读请求读取到的数据相对就会滞后。 Merge On Read 读时合并表也简称mor表,使用列格式parquet和行格式Avro两种方式混合存储数据。其中parquet格式文件用于存储基础数据,Avro格式文件(也可叫做log文件)用于存储增量数据。 优点:由于写入数据先写delta log,且delta log较小,所以写入成本较低。 缺点:需要定期合并整理compact,否则碎片文件较多。读取性能较差,因为需要将delta log和老数据文件合并。
  • Loader宏定义 目前Loader默认支持以下时间宏定义: 表1 Loader常用宏定义 名称 替换后效果 说明 @{dateformat("yyyy-MM-dd")}@ 2016-05-17 当前日期。 @{dateformat("yyyy-MM-dd HH:mm:ss")}@ 2016-05-17 16:50:00 当前日期和时间。 @{timestamp()}@ 1463476137557 从1970年到现在的毫秒数。 @{dateformat("yyyy-MM-dd HH:mm:ss",-7,DAYS)}@ 2016-05-10 16:50:00 最近7天,即当前时间减7天。 第二个参数支持加减运算。 第三个参数为时间运算的单位,参考“java.util.concurrent.TimeUnit.java”定义,分为DAYS、HOURS 、MINUTES、SECONDS。 在以下场景中,可以使用宏进行配置参数: 指定以当天时间命名的数据目录 参数项配置为“/user/data/inputdate_@{dateformat("yyyy-MM-dd")}@”。 通过SQL语句查询最近7天的数据 select * from table where time between '@{dateformat("yyyy-MM-dd HH:mm:ss",-7,DAYS)}@' and '@{dateformat("yyyy-MM-dd HH:mm:ss")}@' 指定当天的表名 参数项配置为“table_@{dateformat("yyyy-MM-dd")}@”。
  • HetuEngine权限角色介绍 安全模式的集群,在使用HetuEngine服务前,需集群管理员创建用户并指定其操作权限以满足业务使用需求。 HetuEngine用户分为管理员用户和普通用户,系统默认的HetuEngine管理员用户组为“hetuadmin”,HetuEngine普通用户对应用户组为“hetuuser”。 关联了“hetuadmin”用户组的用户可获得HetuEngine的HSConsole WebUI界面和HetuEngine计算实例WebUI的运维管理员权限。 关联了“hetuuser”用户组的用户可获得SQL执行权限。可以访问HSConsole WebUI界面,查看当前用户关联租户的集群信息以及所有数据源的基本信息,可以访问计算实例的WebUI界面,并对当前用户的SQL有查询和运维的权限。 启用了Ranger鉴权时,如果用户创建后需要继续为用户配置操作数据源的数据库、表、列的管理权限,请参考添加HetuEngine的Ranger访问权限策略。 在使用HetuEngine服务请确保已提前规划并创建HetuEngine用户待关联的租户。
共100000条