华为云用户手册

  • 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时需要注意小表不能过大,如果小表将内存基本用尽,会使整个系统性能下降甚至出现内存溢出的异常。
  • 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中按桶一个一个读取小表内容,然后与大表做匹配直接得到结果并输出。
  • 配置场景 当前版本对于parquet表的压缩格式分以下两种情况进行配置: 对于分区表,需要通过parquet本身的配置项“parquet.compression”设置parquet表的数据压缩格式。如在建表语句中设置tblproperties:"parquet.compression"="snappy"。 对于非分区表,需要通过“spark.sql.parquet.compression.codec”配置项来设置parquet类型的数据压缩格式。直接设置“parquet.compression”配置项是无效的,因为它会读取“spark.sql.parquet.compression.codec”配置项的值。当“spark.sql.parquet.compression.codec”未做设置时默认值为“snappy”,“parquet.compression”会读取该默认值。 因此,“spark.sql.parquet.compression.codec”配置项只适用于设置非分区表的parquet压缩格式。
  • 使用Kafka客户端 以客户端安装用户,登录安装客户端的节点。 执行以下命令,切换到客户端安装目录。 cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 执行以下命令,进行用户认证。(普通模式跳过此步骤) kinit 组件业务用户 执行以下命令切换到Kafka客户端安装目录。 cd Kafka/kafka/bin 执行以下命令使用客户端工具查看帮助并使用。 ./kafka-console-consumer.sh:Kafka消息读取工具 ./kafka-console-producer.sh:Kafka消息发布工具 ./kafka-topics.sh:Kafka Topic管理工具 MRS 3.x之前版本:执行以下命令,管理Kafka主题。 创建主题 sh kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份个数 --zookeeper ZooKeeper角色实例所在节点IP地址:clientPort/kafka 删除主题 sh kafka-topics.sh --delete --topic 主题名称 --zookeeper ZooKeeper角色实例所在节点IP地址:clientPort/kafka 主题分区数和主题备份个数不能大于Kafka角色实例数量。 默认情况下,ZooKeeper的“clientPort”为“2181”。 ZooKeeper角色实例所在节点IP地址,填写三个角色实例其中任意一个的IP地址即可。 MRS 3.x及后续版本:使用kafka-topics.sh管理Kafka主题。 创建主题: Topic的Partition自动划分时,默认根据节点及磁盘上已有的Partition数进行均衡划分,如果期望根据磁盘容量进行Partition划分,那么需要修改Kafka服务配置“log.partition.strategy”为“capacity”。 Kafka创建Topic时,支持基于“机架感知” 和 “跨AZ特性” 两种选项组合生成分区及副本的分配方案且支持 “--zookeeper” 和 “--bootstrap-server”两种方式 禁用机架策略 & 禁用跨AZ特性 (默认策略)。 基于此策略新建的Topic的副本会完全随机分配到集群中任意节点上。 ./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka ./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties 其中,使用“--bootstrap-server”方式创建Topic时,需配置“rack.aware.enable=false”和“az.aware.enable=false”。 启用机架策略 & 禁用跨AZ特性。 基于此策略新建的Topic的各个Partition的Leader会在集群节点上随机分配,但会确保同一Partition的不同Replica会分配在不同的机架上,所以当使用此策略时,需保证各个机架内的节点个数一致,否则会导致节点少的机架上的机器负载远高于集群平均水平。 ./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka --enable-rack-aware ./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties 其中,使用 “--bootstrap-server”方式创建Topic时,需配置“rack.aware.enable=true”和“az.aware.enable=false”。 禁用机架策略 & 启用跨AZ特性。 基于此策略新建的Topic的各个Partition的Leader会在集群节点上随机分配,但会确保同一Partition的不同Replica会分配在不同的AZ上,所以当使用此策略时,需保证各个AZ内的节点个数一致,否则会导致节点少的AZ上的机器负载远高于集群平均水平。 ./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka --enable-az-aware ./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties 其中,使用 “--bootstrap-server”方式创建Topic时,需配置“rack.aware.enable=false”和“az.aware.enable=true”。 启用机架策略 & 启用跨AZ特性。 基于此策略新建的Topic的各个Partition的Leader会在集群节点上随机分配,但会确保同一Partition的不同Replica会分配到不同AZ内的不同RACK上,使用此策略需保证每个AZ内的每个RACK上的节点个数一致,否则会导致集群内负载不均衡。 ./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka --enable-rack-aware --enable-az-aware ./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties 使用 “--bootstrap-server”方式创建Topic时,需配置“rack.aware.enable=true”和“az.aware.enable=true”。 Kafka创建Topic支持 “--zookeeper” 和 “--bootstrap-server”两种方式,区别如下: “--zookeeper”方式由客户端生成副本分配方案,社区从一开始就支持这种方式,为了降低对Zookeeper组件的依赖,社区将在后续版本中删除对这种方式的支持。基于这种方式创建Topic时,可以通过 "--enable-rack-aware" 和 “--enable-az-aware”这两个选项自由组合来选用副本分配策略。注意:使用“--enable-az-aware”选项的前提是服务端开启了跨AZ特性,即服务端启动参数“az.aware.enable”为“true”,否则会执行失败。 “--bootstrap-server”方式由服务端生成副本分配方案,后续版本,社区将只支持这种方式来进行Topic管理。基于这种方式创建Topic时,不支持 "--enable-rack-aware" 和 "--enable-az-aware"选项来控制副本分配策略,支持 “rack.aware.enable”和“az.aware.enable”这两个服务启动参数组合来控制副本分配策略,需注意的是“az.aware.enable”参数不可修改,在创建集群时,如果开启跨AZ特性,会自动配置为“true”;“rack.aware.enable”参数支持用户自定义修改。 罗列主题: ./kafka-topics.sh --list --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka ./kafka-topics.sh --list --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties 查看主题: ./kafka-topics.sh --describe --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka --topic 主题名称 ./kafka-topics.sh --describe --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties --topic 主题名称 修改主题: ./kafka-topics.sh --alter --topic 主题名称 --config 配置项=配置值 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka 扩展分区: ./kafka-topics.sh --alter --topic 主题名称 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka --command-config Kafka/kafka/config/client.properties --partitions 扩展后分区个数 ./kafka-topics.sh --alter --topic 主题名称 --bootstrap-server Kafka集群IP:21007 --command-config Kafka/kafka/config/client.properties --partitions 扩展后分区个数 删除主题: ./kafka-topics.sh --delete --topic 主题名称 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka ./kafka-topics.sh --delete --topic 主题名称 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties
  • 参数调优 修改服务配置参数,请参考修改集群服务配置参数。调优参数请参考表1。 表1 调优参数 配置参数 缺省值 调优场景 num.recovery.threads.per.data.dir 10 在Kafka启动过程中,数据量较大情况下,可调大此参数,可以提升启动速度。 background.threads 10 Broker后台任务处理的线程数目。数据量较大的情况下,可适当调大此参数,以提升Broker处理能力。 num.replica.fetchers 1 副本向Leader请求同步数据的线程数,增大这个数值会增加副本的I/O并发度。 num.io.threads 8 Broker用来处理磁盘I/O的线程数目,这个线程数目建议至少等于硬盘的个数。 KAFKA_HEAP_OPTS -Xmx6G -Xms6G Kafka JVM堆内存设置。当Broker上数据量较大时,应适当调整堆内存大小。
  • 回答 创建租户的时候需要关联HBase服务和Yarn队列。 例如: 新建用户user并绑定租户同名的角色。 用户user需要使用bulkload功能还需要额外权限。 以下以用户user为例: 参见“批量导入数据”章节举例,以下是一些差异点。 将数据文件目录建在“/tmp”目录下,执行以下命令: hdfs dfs -mkdir /tmp/datadirImport hdfs dfs -put data.txt /tmp/datadirImport 生成HFile的时候使用HDFS的“/tmp”目录: hbase com.huawei.hadoop.hbase.tools.bulkload.ImportData -Dimport.skip.bad.lines=true -Dimport.separator=',' -Dimport.bad.lines.output=/tmp/badline -Dimport.hfile.output=/tmp/hfile configuration.xml ImportTable /tmp/datadirImport 导入HFile的时候使用HDFS的“/tmp”目录: hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /tmp/hfile ImportTable
  • 读取Hudi数据概述 Hudi的读操作,作用于Hudi的三种视图之上,可以根据需求差异选择合适的视图进行查询。 Hudi 支持多种查询引擎Spark和Hive,具体支持矩阵见表1和表2。 表1 cow表 查询引擎 实时视图/读优化视图 增量视图 Hive Y Y Spark(SparkSQL) Y Y Spark(SparkDataSource API) Y Y 表2 mor表 查询引擎 实时视图 增量视图 读优化视图 Hive Y Y Y Spark(SparkSQL) Y Y Y Spark(SparkDataSource API) Y Y Y 当前Hudi使用Spark datasource接口读取时,不支持分区推断能力。比如bootstrap表使用datasource接口查询时,可能出现分区字段不显示,或者显示为null的情况。 增量视图,需设置set hoodie.hudicow.consume.mode = INCREMENTAL;,但该参数仅限于增量视图查询,不能用于Hudi表的其他类型查询,和其他表的查询。 恢复配置可设置set hoodie.hudicow.consume.mode = SNAPSHOT;或任意值。 父主题: Hudi读操作
  • 回答 由于断电,当写操作完成之后,缓存中的block不会立即被写入磁盘,如果要同步地将缓存的block写入磁盘,用户需要将“客户端安装路径/HDFS/hadoop/etc/hadoop/hdfs-site.xml”中的“dfs.datanode.synconclose”设置为“true”。 默认情况下,“dfs.datanode.synconclose”为“false”,虽然性能很高,但是断电之后,存储在缓存中的数据会丢失。将“dfs.datanode.synconclose”设置为“true”,可以解决此问题,但对性能有很大影响。请根据具体的应用场景决定是否开启该参数。
  • 配置场景 在某些场景下,当任务已经启动后,用户想要修改日志级别以定位问题或者查看想要的信息。 用户可以在进程启动前,在进程的JVM参数中增加参数“-Dlog4j.configuration.watch=true”来打开动态设置日志级别的功能。进程启动后,就可以通过修改进程对应的log4j配置文件,来调整日志打印级别。 目前支持动态设置日志级别功能的有:Driver日志、Executor日志、AM日志、JobHistory日志、JD BCS erver日志。 允许设置的日志级别是:FATAL,ERROR,WARN,INFO,DEBUG,TRACE和ALL。
  • 配置描述 在进程对应的JVM参数配置项中增加以下参数。 表1 参数描述 参数 描述 默认值 -Dlog4j.configuration.watch 进程JVM参数,设置成“true”用于打开动态设置日志级别功能。 未配置,即为false。 Driver、Executor、AM进程的JVM参数如表2所示。在Spark客户端的配置文件“spark-defaults.conf”中进行配置。Driver、Executor、AM进程的日志级别在对应的JVM参数中的“-Dlog4j.configuration”参数指定的log4j配置文件中设置。 表2 进程的JVM参数1 参数 说明 默认日志级别 spark.driver.extraJavaOptions Driver的JVM参数。 INFO spark.executor.extraJavaOptions Executor的JVM参数。 INFO spark.yarn.am.extraJavaOptions AM的JVM参数。 INFO JobHistory Server和JDB CS erver的JVM参数如表3所示。在服务端配置文件“ENV_VARS”中进行配置。JobHistory Server和JDBCServer的日志级别在服务端配置文件“log4j.properties”中设置。 表3 进程的JVM参数2 参数 说明 默认日志级别 GC_OPTS JobHistory Server的JVM参数。 INFO SPARK_SUBMIT_OPTS JDBCServer的JVM参数。 INFO 示例: 为了动态修改Executor日志级别为DEBUG,在进程启动之前,修改“spark-defaults.conf”文件中的Executor的JVM参数“spark.executor.extraJavaOptions”,增加如下配置: -Dlog4j.configuration.watch=true 提交用户应用后,修改“spark.executor.extraJavaOptions”中“-Dlog4j.configuration”参数指定的log4j日志配置文件(例如:“-Dlog4j.configuration=file:${BIGDATA_HOME}/ FusionInsight _Spark2x_8.1.0.1/install/FusionInsight-Spark2x-*/spark/conf/log4j-executor.properties”)中的日志级别为DEBUG,如下所示: log4j.rootCategory=DEBUG, sparklog DEBUG级别生效会有一定的时延。
  • 回答 使用操作系统命令lsof或者netstat发现大量TCP连接处于CLOSE_WAIT状态,且连接持有者为HBase RegionServer,可能导致网络端口耗尽或HDFS连接超限,那样可能会导致其他服务不稳定。HBase CLOSE_WAIT现象为HBase机制。 HBase CLOSE_WAIT产生原因:HBase数据以HFile形式存储在HDFS上,这里可以叫StoreFiles,HBase作为HDFS的客户端,HBase在创建StoreFile或启动加载StoreFile时创建了HDFS连接,当创建StoreFile或加载StoreFile完成时,HDFS方面认为任务已完成,将连接关闭权交给HBase,但HBase为了保证实时响应,有请求时就可以连接对应数据文件,需要保持连接,选择不关闭连接,所以连接状态为CLOSE_WAIT(需客户端关闭)。 什么时候会创建StoreFile:当HBase执行Flush时。 什么时候执行Flush:HBase写入数据首先会存在内存memstore,只有内存使用达到阈值或手动执行flush命令时会触发flush操作,将数据写入HDFS。 解决方法: 由于HBase连接机制,若想减小HBase端口占用,则需控制StoreFile数量,具体可以通过触发HBase的compaction动作完成,即触发HBase文件合并,方法如下: 方法1:使用HBase shell客户端,在客户端手动执行major_compact操作。 方法2:编写HBase客户端代码,调用HBaseAdmin类中的compact方法触发HBase的compaction动作。 如果compact无法解决HBase端口占用现象,说明HBase使用情况已经达到瓶颈,需考虑如下几点: table的Region数初始设置是否合适。 是否存在无用数据。 若存在无用数据,可删除对应数据以减小HBase存储文件数量,若以上情况都不满足,则需考虑扩容。
  • SET和UNSET 当使用set命令时,所有新set的属性将会覆盖已存在的旧的属性。 SORT SCOPE SET SORT SCOPE命令示例: ALTER TABLE tablename SET TBLPROPERTIES('SORT_SCOPE'='no_sort') 当UNSET SORT SCOPE后,会使用默认值NO_SORT。 UNSET SORT SCOPE命令示例: ALTER TABLE tablename UNSET TBLPROPERTIES('SORT_SCOPE') SORT COLUMNS SET SORT COLUMNS命令示例: ALTER TABLE tablename SET TBLPROPERTIES('SORT_COLUMNS'='column1') 在执行该命令后,新的导入会使用新的SORT_COLUMNS配置值。 用户可以根据查询的情况来调整SORT_COLUMNS,但是不会直接影响旧的数据。所以对历史的segments的查询性能不会受到影响,因为历史的segments不是按照新的SORT_COLUMNS。 不支持UNSET命令,但是可以使用set SORT_COLUMNS等于空字符串来代替UNSET命令。 ALTER TABLE tablename SET TBLPROPERTIES('SORT_COLUMNS'='') 后续版本会加强自定义合并来对旧的segment重新排序。 流式表不支持修改SORT_COLUMNS。 如果inverted index的列从SORT_COLUMNS里面移除了,该列不会再创建inverted index。但是旧的INVERTED_INDEX配置值不会变化。
  • 日志级别 ZooKeeper中提供了如表2所示的日志级别。日志级别优先级从高到低分别是FATAL、ERROR、WARN、INFO、DEBUG。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表2 日志级别 级别 描述 FATAL FATAL表示当前事件处理出现严重错误信息,可能导致系统崩溃。 ERROR ERROR表示当前事件处理出现错误信息,系统运行出错。 WARN WARN表示当前事件处理存在异常信息,但认为是正常范围,不会导致系统出错。 INFO INFO表示系统及各事件正常运行状态信息。 DEBUG DEBUG表示系统及系统的调试信息。 如果您需要修改日志级别,请执行如下操作: 参考修改集群服务配置参数章节,进入ZooKeeper服务“全部配置”页面。 左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别。 单击“保存”,在弹出窗口中单击“确定”使配置生效。 配置完成后立即生效,不需要重启服务。
  • 参数说明 表1 HDFS参数说明 参数 参数说明 默认值 fs.obs.security.provider 指定获取访问OBS文件系统密钥的实现方式。 参数取值: com.huawei.mrs.MrsObsCredentialsProvider:通过MRS云服务委托获取凭证。 com.obs.services.EcsObsCredentialsProvider:通过ECS云服务获取AK/SK信息。 com.obs.services.BasicObsCredentialsProvider:使用用户传入OBS的AK/SK信息。 com.obs.services.EnvironmentVariableObsCredentialsProvider:从环境变量中读取AK/SK信息。 com.huawei.mrs.MrsObsCredentialsProvider
  • ALTER TABLE修改表数据 建议慎用delete、update的mutation操作 标准SQL的更新、删除操作是同步的,即客户端要等服务端返回执行结果(通常是int值);而ClickHouse的update、delete是通过异步方式实现的,当执行update语句时,服务端立即返回执行成功还是失败结果,但是实际上此时数据还没有修改完成,而是在后台排队等着进行真正的修改,可能会出现操作覆盖的情况,也无法保证操作的原子性。 业务场景要求有update、delete等操作,建议使用ReplacingMergeTree、CollapsingMergeTree、VersionedCollapsingMergeTree引擎,使用方式参见:https://clickhouse.tech/docs/zh/engines/table-engines/mergetree-family/collapsingmergetree/。 建议少或不增删数据列 业务提前规划列个数,如果将来有更多列要使用,可以规划预留多列,避免在生产系统跑业务过程中进行大量的alter table modify列操作,导致不可以预知的性能、数据一致性问题。 父主题: ClickHouse常用SQL语法
  • 日志描述 日志存储路径: Executor运行日志:“${BIGDATA_DATA_HOME}/hadoop/data${i}/nm/containerlogs/application_${appid}/container_{$contid}” 运行中的任务日志存储在以上路径中,运行结束后会基于Yarn的配置确定是否汇聚到HDFS目录中,详情请参见Yarn常用配置参数。 其他日志:“/var/log/Bigdata/spark2x” 日志归档规则: 使用yarn-client或yarn-cluster模式提交任务时,Executor日志默认50MB滚动存储一次,最多保留10个文件,不压缩。 JobHistory2x日志默认100MB滚动存储一次,最多保留100个文件,压缩存储。 JDBCServer2x日志默认100MB滚动存储一次,最多保留100个文件,压缩存储。 IndexServer2x日志默认100MB滚动存储一次,最多保留100个文件,压缩存储。 JDBCServer2x审计日志默认20MB滚动存储一次,最多保留20个文件,压缩存储。 日志大小和压缩文件保留个数可以在FusionInsight Manager界面中配置。 表1 Spark2x日志列表 日志类型 日志文件名 描述 SparkResource2x日志 spark.log Spark2x服务初始化日志。 prestart.log prestart脚本日志。 cleanup.log 安装卸载实例时的清理日志。 spark-availability-check.log Spark2x服务健康检查日志。 spark-service-check.log Spark2x服务检查日志 JDBCServer2x日志 JDBCServer-start.log JDBCServer2x启动日志。 JDBCServer-stop.log JDBCServer2x停止日志。 JDBCServer.log JDBCServer2x运行时,Driver端日志。 jdbc-state-check.log JDBCServer2x健康检查日志。 jdbcserver-omm-pid***-gc.log.*.current JDBCServer2x进程gc日志。 spark-omm-org.apache.spark.sql.hive.thriftserver.HiveThriftProxyServer2-***.out* JDBCServer2x进程启动信息日志。若进程停止,会打印jstack信息。 JobHistory2x日志 jobHistory-start.log JobHistory2x启动日志。 jobHistory-stop.log JobHistory2x停止日志。 JobHistory.log JobHistory2x运行过程日志。 jobhistory-omm-pid***-gc.log.*.current JobHistory2x进程gc日志。 spark-omm-org.apache.spark.deploy.history.HistoryServer-***.out* JobHistory2x进程启动信息日志。若进程停止,会打印jstack信息。 IndexServer2x日志 IndexServer-start.log IndexServer2x启动日志。 IndexServer-stop.log IndexServer2x停止日志。 IndexServer.log IndexServer2x运行时,Driver端日志。 indexserver-state-check.log IndexServer2x健康检查日志。 indexserver-omm-pid***-gc.log.*.current IndexServer2x进程gc日志。 spark-omm-org.apache.spark.sql.hive.thriftserver.IndexServerProxy-***.out* IndexServer2x进程启动信息日志。若进程停止,会打印jstack信息。 审计日志 jdbcserver-audit.log ranger-audit.log JDBCServer2x审计日志。
  • 操作场景 此功能适用于Hive组件。 按如下操作步骤设置参数后,在未安装HBase的环境执行Hive on Spark任务时,可避免任务卡顿。 Hive on Spark任务的Spark内核版本已经升级到Spark2x,可以支持在不安装Spark2x的情况下,执行Hive on Spark任务。如果没有安装HBase,默认在执行Spark任务时,会尝试去连接Zookeeper访问HBase,直到超时,这样会造成任务卡顿。 在未安装HBase的环境,要执行Hive on Spark任务,可以按如下操作处理。如果是从已有HBase低版本环境升级上来的,升级完成之后可不进行设置。
  • 操作步骤 JVM GC参数 RegionServer GC_OPTS参数设置建议: -Xms与-Xmx设置相同的值,需要根据实际情况设置,增大内存可以提高读写性能,可以参考参数“hfile.block.cache.size”(见表2)和参数“hbase.regionserver.global.memstore.size”(见表1)的介绍进行设置。 -XX:NewSize与-XX:MaxNewSize设置相同值,建议低负载场景下设置为“512M”,高负载场景下设置为“2048M”。 -XX:CMSInitiatingOccupancyFraction建议设置为“100 * (hfile.block.cache.size + hbase.regionserver.global.memstore.size + 0.05)”,最大值不超过90。 -XX:MaxDirectMemorySize表示JVM使用的堆外内存,建议低负载情况下设置为“512M”,高负载情况下设置为“2048M”。 GC_OPTS参数中-XX:MaxDirectMemorySize默认没有配置,如需配置,用户可在GC_OPTS参数中自定义添加。 Put相关参数 RegionServer处理put请求的数据,会将数据写入memstore和hlog, 当memstore大小达到设置的“hbase.hregion.memstore.flush.size”参数值大小时,memstore就会刷新到HDFS生成HFile。 当当前region的列簇的HFile数量达到“hbase.hstore.compaction.min”参数值时会触发compaction。 当当前region的列簇HFile数达到“hbase.hstore.blockingStoreFiles”参数值时会阻塞memstore刷新生成HFile的操作,导致put请求阻塞。 表1 Put相关参数 参数 描述 默认值 hbase.wal.hsync 每一条wal是否持久化到硬盘。 参考提升HBase连续Put数据场景性能。 true hbase.hfile.hsync hfile写是否立即持久化到硬盘。 参考提升HBase连续Put数据场景性能。 true hbase.hregion.memstore.flush.size 若MemStore的大小(单位:Byte)超过指定值,MemStore将被冲洗至磁盘。该参数值将被运行每个hbase.server.thread.wakefrequency的线程所检验。建议设置为HDFS块大小的整数倍,在内存足够put负载大情况下可以调整增大。 134217728 hbase.regionserver.global.memstore.size 更新被锁定以及强制冲洗发生之前一个RegionServer上支持的所有MemStore的大小。建议设置为“hbase.hregion.memstore.flush.size * 写活跃region数 / RegionServer GC -Xmx”。默认值为“0.4”,表示使用RegionServer GC -Xmx的40%。 0.4 hbase.hstore.flusher.count memstore的flush线程数,在put高负载场景下可以适当调大。 2 hbase.regionserver.thread.compaction.small 小压缩线程数,在put高负载情况下可以适当调大。 10 hbase.hstore.blockingStoreFiles 若一个Store内的HStoreFile文件数量超过指定值,则针对此HRegion的更新将被锁定直到一个压缩完成或者base.hstore.blockingWaitTime被超过。每冲洗一次MemStore一个StoreFile文件被写入。在put高负载场景下可以适当调大。 15 Scan相关参数 表2 Scan相关参数 参数 描述 默认值 hbase.client.scanner.timeout.period 客户端和RegionServer端参数,表示客户端执行scan的租约超时时间。建议设置为60000ms的整数倍,在读高负载情况下可以适当调大。单位:毫秒。 60000 hfile.block.cache.size 数据缓存所占的RegionServer GC -Xmx百分比,在读高负载情况下可以适当调大以增大缓存命中率以提高性能。表示分配给HFile/StoreFile所使用的块缓存的最大heap(-Xmx setting)的百分比。 当offheap关闭时,默认值为0.25,当offheap开启时,默认值是0.1。 Handler相关参数 表3 Handler相关参数 参数 描述 默认值 hbase.regionserver.handler.count RegionServer上的RPC侦听器实例数,建议设置为200 ~ 400之间。 200 hbase.regionserver.metahandler.count RegionServer中处理优先请求的程序实例的数量,建议设置为200 ~ 400之间。 200
  • 回答 当集群中有超过阈值的节点都被加入黑名单时,黑名单会释放这些节点,其中阈值为故障节点数与集群总节点数的比值。现在每个节点都有其标签表达式,黑名单阈值应根据有效节点标签表达式关联的节点数进行计算,其值为故障节点数与有效节点标签表达式关联的节点数的比值。 假设集群中有100个节点,其中有10个节点为有效节点标签表达式关联的节点(labelA)。其中所有有效节点标签表达式关联的节点都已经故障,黑名单节点释放阈值默认值为0.33,按照传统的计算方式,10/100=0.1,远小于该阈值。这就造成这10个节点永远无法得到释放,Map&Reduce任务一直无法获取节点,应用程序无法正常运行。实际需要根据与Map&Reduce任务的有效节点关联的节点总数进行计算,即10/10=1,大于黑名单节点释放阈值,节点被释放。 因此即使故障节点数与集群总节点数的比值没有超过阈值,也存在黑名单将这些节点释放的情况。
  • Ranger统一鉴权特性 特性说明:在Kafka 2.4.0之前版本,Kafka组件仅支持社区自带的SimpleAclAuthorizer鉴权插件,Kafka 2.4.0及之后版本,MRS Kafka同时支持Ranger鉴权插件和社区自带鉴权插件。默认使用Ranger鉴权,基于Ranger鉴权插件,可进行细粒度的Kafka Acl管理。 服务端使用Ranger鉴权插件时,若“allow.everyone.if.no.acl.found”配置为“true”,使用非安全端口访问时,所有行为将直接放行。建议使用Ranger鉴权插件的安全集群,不要开启“allow.everyone.if.no.acl.found”。
  • Kafka Idempotent 特性 特性说明:Kafka从0.11.0.0版本引入了创建幂等性Producer的功能,开启此特性后,Producer自动升级成幂等性Producer,当Producer发送了相同字段值的消息后,Broker会自动感知消息是否重复,继而避免数据重复。需要注意的是,这个特性只能保证单分区上的幂等性,即一个幂等性Producer能够保证某个主题的一个分区内不出现重复消息;只能实现单会话上的幂等性,这里的会话指的是Producer进程的一次运行,即重启Producer进程后,幂等性不保证。 开启方法: 二次开发代码中添加 “props.put(“enable.idempotence”,true)”。 客户端配置文件中添加 “enable.idempotence = true”。
  • 操作场景 由于底层存储系统的原因,Hive并不能支持对单条表数据进行删除操作,但在Hive on HBase功能中,MRS Hive提供了对HBase表的单条数据的删除功能,通过特定的语法,Hive可以将自己的HBase表中符合条件的一条或者多条数据清除。 表1 删除Hive on HBase表中的单行记录所需权限 集群认证模式 用户所需权限 安全模式 “SELECT”、“INSERT”和“DELETE” 普通模式 无
  • 配置方法 导出集群中的证书: 安装集群客户端,例如安装路径为“/opt/client”。 执行以下命令,切换到客户端安装目录。 cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 生成证书文件 keytool -export -alias fusioninsightsubroot -storepass changeit -keystore /opt/client/JRE/jre/lib/security/cacerts -file fusioninsightsubroot.crt 将集群中的证书导入第三方JDK或者JRE中 将1中生成的fusioninsightsubroot.crt文件拷贝到第三方JRE节点上,设置好该节点的JAVA_HOME环境变量后,执行以下命令导入证书: keytool -import -trustcacerts -alias fusioninsightsubroot -storepass changeit -file fusioninsightsubroot.crt -keystore MY_JRE/lib/security/cacerts 'MY_JRE'表示第三方JRE安装路径,请自行修改。
  • 操作步骤 将业务数据上传到用户的OBS文件系统。 获取用户的AK/SK信息,然后创建一个OBS连接和一个HDFS连接。 具体可参见Loader连接配置说明。 访问Loader页面。 如果是启用了Kerberos认证的分析集群,可参见访问Hue WebUI界面。 单击“新建作业”。 在“基本信息”填写参数。 在“名称”填写一个作业的名称。例如“obs2hdfs”。 在“源连接”选择已创建的OBS连接。 “目的连接”选择已创建的HDFS连接。 在“自”填写源连接参数。 在“桶名”填写业务数据所保存的OBS文件系统名称。 在“源目录或文件”填写业务数据在文件系统的具体位置。 如果是单个文件,需要填写包含文件名的完整路径。如果是目录,填写目录的完整路径 “文件格式”填写业务数据文件的类型。 可参见obs-connector。 在“至”填写目的连接参数。 在“定入目录”填写业务数据在HDFS要保存的目录名称。 如果是启用Kerberos认证的集群,当前访问Loader的用户对保存数据的目录需要有写入权限。 在“文件格式”填写业务数据文件的类型。 需要与6.c的类型对应。 在“压缩格式”填写一种压缩的算法。例如选择不压缩“NONE”。 在“是否覆盖”选择已有文件的处理方式,选择“True”。 单击“显示高级属性”,在“换行符”填写业务数据保存时,系统填充的换行字符。 在“字段分割符”填写业务数据保存时,系统填充的分割字符。 可参见hdfs-connector。 在“任务配置”填写作业的运行参数。 在“抽取并发数”填写map任务的个数。 在“加载(写入)并发数”填写reduce任务的个数。 目的连接为HDFS连接时,不显示“加载(写入)并发数”参数。 “单个分片的最大错误记录数”填写错误记录阈值。 在“脏数据目录”填写一个脏数据的保存位置,例如“/user/sqoop/obs2hdfs-dd”。 单击“保存并运行”。 在“管理作业界面”,查看作业运行结果。可以单击“刷新列表”获取作业的最新状态。
  • 配置场景 当前,在YARN-Client和YARN-Cluster模式下,两种模式的客户端存在冲突的配置,即当客户端为一种模式的配置时,会导致在另一种模式下提交任务失败。 为避免出现如上情况,添加表1中的配置项,避免两种模式下来回切换参数,提升软件易用性。 YARN-Cluster模式下,优先使用新增配置项的值,即服务端路径和参数。 YARN-Client模式下,直接使用原有的三个配置项的值。 原有的三个配置项为:“spark.driver.extraClassPath”、“spark.driver.extraJavaOptions”、“spark.driver.extraLibraryPath”。 不添加表1中配置项时,使用方式与原有方式一致,程序可正常执行,只是在不同模式下需切换配置。
  • 修改在Hue使用“Query Editors”的会话配置 在“Hive”页签,单击。 在“Files”的右侧单击 ,然后单击 指定该文件的存储目录。 可以单击 新增加一个文件资源。 在“Functions”的右侧单击 ,输入用户自定义的名称和函数的类名称。 可以单击 新增加一个自定义函数。 在“Settings”的右侧单击 ,在“Key”输入Hive的参数名,在“Value”输入对应的参数值,则当前Hive会话会以用户定义的配置连接Hive。 可以单击 新增加一个参数。
  • ZooKeeper常用配置参数 参数入口: 请参考修改集群服务配置参数,进入ZooKeeper“全部配置”页面。在搜索框中输入参数名称。 表1 参数说明 配置参数 说明 默认值 skipACL 是否跳过ZooKeeper节点的权限检查。 no maxClientCnxns ZooKeeper的最大连接数,在连接数多的情况下,建议增加。 2000 LOG _LEVEL 日志级别,在调试的时候,可以改为DEBUG。 INFO acl.compare.shortName 当Znode的ACL权限认证类型为SASL时,是否仅使用principal的用户名部分进行ACL权限认证。 true synclimit Follower与leader进行同步的时间间隔(单位为tick)。如果在指定的时间内leader没响应,连接将不能被建立。 15 tickTime 一次tick的时间(毫秒),它是ZooKeeper使用的基本时间单位,心跳、超时的时间都由它来规定。 4000 ZooKeeper内部时间由参数ticktime和参数synclimit控制,如需调大ZooKeeper内部超时时间,需要调大客户端连接ZooKeeper的超时时间。 父主题: 使用ZooKeeper
  • 操作场景 对于Spark应用来说,资源是影响Spark应用执行效率的一个重要因素。当一个长期运行的服务(比如JDBCServer),若分配给它多个Executor,可是却没有任何任务分配给它,而此时有其他的应用却资源紧张,这就造成了很大的资源浪费和资源不合理的调度。 动态资源调度就是为了解决这种场景,根据当前应用任务的负载情况,实时的增减Executor个数,从而实现动态分配资源,使整个Spark系统更加健康。
  • 配置扫描仪线程 扫描仪线程属性决定了每个分割的数据被划分的可并行处理的数据块的数量。如果数量过多,会产生很多小数据块,性能会受到影响。如果数量过少,并行性不佳,性能也会受到影响。因此,决定扫描仪线程数时,需要考虑一个分割内的平均数据大小,选择一个使数据块不会很小的值。经验法则是将单个块大小(MB)除以250得到的值作为扫描仪线程数。 增加并行性还需考虑的重要一点是集群中实际可用的CPU核数,确保并行计算数不超过实际CPU核数的75%至80%。 CPU核数约等于: 并行任务数x扫描仪线程数。其中并行任务数为分割数和执行器数x执行器核数两者之间的较小值。
  • 数据加载性能调优 数据加载性能调优与查询性能调优差异很大。跟查询性能一样,数据加载性能也取决于可达到的并行性。在数据加载情况下,工作线程的数量决定并行的单元。因此,更多的执行器就意味着更多的执行器核数,每个执行器都可以提高数据加载性能。 同时,为了得到更好的性能,可在HDFS中配置如下参数。 表1 HDFS配置 参数 建议值 dfs.datanode.drop.cache.behind.reads false dfs.datanode.drop.cache.behind.writes false dfs.datanode.sync.behind.writes true
共100000条