云服务器内容精选

  • 使用HBase客户端 安装客户端,具体请参考安装客户端章节。 以客户端安装用户,登录安装客户端的节点。 执行以下命令切换到客户端目录。 cd /opt/hadoopclient 执行以下命令配置环境变量。 source bigdata_env 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户,当前用户需要具有创建HBase表的权限,具体请参见角色管理配置拥有对应权限的角色,参考创建用户章节,为用户绑定对应角色。如果当前集群未启用Kerberos认证,则无需执行此命令。 kinit 组件业务用户 例如,kinit hbaseuser。 直接执行HBase组件的客户端命令。 hbase shell
  • 前提条件 已安装客户端。例如安装目录为“/opt/hadoopclient”,以下操作的客户端目录只是举例,请根据实际安装目录修改。 各组件业务用户由MRS集群管理员根据业务需要创建。 “机机”用户需要下载keytab文件,“人机”用户第一次登录时需修改密码。 非root用户使用HBase客户端,请确保该HBase客户端目录的属主为该用户,否则请参考如下命令修改属主。 chown user:group -R 客户端安装目录/HBase
  • 查看监控信息 登录表格存储服务管理控制台。 单击管理控制台左上角的,选择区域。 在左侧导航树,单击集群管理。 在集群列表中找到需要查看的集群,在对应的操作列中,单击查看监控信息,系统会跳到该集群的“云服务监控”页面。 待查看集群,其状态必须为“服务中”。 图1 查看监控信息 在集群的“云服务监控”页面中,单击集群ID前的按钮展开计算单元列表,选择对应节点查看监控信息。 图2 监控页面 ID:所监控的实例ID,即CloudTable集群ID。 查看监控指标:如图监控页面所示的计算单元列表中,找到所需查看的计算单元,单击“查看监控指标”进入该计算单元的监控指标页面。 如果您查看监控页面的指标太多,可以对指标进行设置,设置自己需要查看的指标。 如果指标太多,可以通过设置监控指标页面对指标进行删除。 如果页面显示的指标没有您想看的指标,可以在设置监控指标页面进行添加。 选择您在页面中要展示的指标名称,拖动选中指标可以对指标进行排序。 图3 设置指标图
  • 一键部署客户端 准备Linux弹性云服务器。 使用一键部署客户端工具,建议Linux弹性云服务器的操作系统类型为EulerOS,CentOS,Ubuntu和SUSE。具体操作请参见准备弹性云服务器。 下载客户端一键部署工具。 使用SSH登录工具(如PuTTY)通过“弹性IP”远程登录到Linux弹性云服务器,然后执行如下命令,获取客户端一键部署工具: curl -O -k "https://cloudtable-publish.obs.myhuaweicloud.com/cloudtable-client/quick_start_hbase_shell.sh" 此命令适用于HBase 2.x版本。 准备集群访问地址。 登录表格存储服务管理控制台,在左侧导航树单击集群管理,然后在集群列表中找到所需要的集群,并获取相应的“ZK链接地址(内网)”。该参数值就是集群访问地址,如图1所示。 图1 ZK链接地址 使用工具部署客户端。 请将以下命令中的"$zookeeper_address"参数替换为3获取的ZK链接地址,然后在弹性云服务器命令行窗口,执行该命令一键部署客户端。 source quick_start_hbase_shell.sh $zookeeper_address 启动Shell访问集群。 在上一步执行source命令自动部署客户端后,就已自动启动了HBase Shell。在后续使用过程中,您也可以执行“bin/hbase shell”命令启动Shell访问集群。
  • 在CloudTable中查看导入的数据 准备Linux弹性云服务器。 假设该弹性云服务器名称为“ecs_20170916”,准备的具体操作请参见准备弹性云服务器章节。 安装客户端并启动Shell访问CloudTable集群。 使用HBase Shell访问集群的具体操作请参见使用HBase Shell访问集群章节。 在CloudTable客户端中执行查询命令,查看使用CDM迁移到CloudTable的数据。 命令示例如下,其中table_name请替换为在CDM集群中新建作业时指定的表名。 scan 'table_name'
  • 为Linux弹性云服务器配置DNS地址和hosts文件 当您通过一键部署客户端的方法安装HBase Shell时,不需要执行本操作。其他情况下,请参照以下方法为Linux弹性云服务器配置DNS地址和hosts。 配置/etc/hosts。 将主机IP配置到/etc/hosts文件,可以加速访问CloudTable集群。 为Linux弹性云服务器配置"/etc/hosts"的操作方法如下: 以root用户登录Linux弹性云服务器。 执行“hostname”,查询主机名。 [root@euler ~]# hostname euler.novalocal 执行“ifconfig”,查询本机IP。 图2 查询IP 执行“vi /etc/hosts”命令,编辑文件,增加主机配置。 192.168.0.58 euler.novalocal 127.0.0.1 euler.novalocal 按“Esc”键,并输入“:wq”,保存退出。 执行如下命令,查看IP地址是否写入成功。 cat /etc/hosts 执行如下命令,验证是否能够解析主机名。 ping 主机名 配置DNS。 DNS服务器用于解析CloudTable集群相关链接地址(例如ZK链接地址)中的域名。请根据CloudTable集群所在的区域,设置相应区域的内网DNS地址,各个区域的DNS地址请参见《云解析服务常见问题》中的内网DNS地址是多少?。 为Linux弹性云服务器配置DNS的操作方法如下: 以root用户登录Linux弹性云服务器。 执行“vi /etc/resolv.conf”命令,编辑“/etc/resolv.conf”文件,增加“nameserver”配置。 在已有的公网IP地址之前新增两行写入DNS服务器IP地址,格式如下: nameserver 100.125.1.250 按“Esc”键,并输入“:wq”,保存退出。 执行如下命令,查看IP地址是否写入成功。 cat /etc/resolv.conf 执行如下命令,验证访问域名是否可以解析到IP地址。 ping 访问域名 访问域名请输入CloudTable集群的相关链接地址(例如ZK链接地址)中的域名。请在表格存储服务管理控制台,单击集群名称,进入集群基本信息页面,获取CloudTable的相关链接地址。所获取的链接地址包含了以逗号分隔的3个内网域名,您可以ping其中任意一个内网域名。 图3 查看链接地址
  • 原因分析 当一个block size大于2G时,hdfs在seek的时候会出现读取异常,持续频繁写入regionserver时出现了full gc,且时间比较久,导致hmaster与regionserver之间的心跳异常,然后hmaster把regionserver标记为dead状态,强制重启了Regionserver,重启后触发servercrash机制开始回滚wal日志。现在这个splitwal的文件已经达到将近2.1G,且其仅有一个block块,导致hdfs seek异常,引起splitwal失败,regionserver检测到当前这个wal日志还需要split,又会触发splitwal日志的机制进行回滚,就这样在split与split失败之间不停循环,导致无法上线该regionserver节点上的region,最后出现查询该RS上某一个region时会报region not online的异常。
  • 常见问题 Q:Flink作业运行失败,作业运行日志中如下报错信息,应该怎么解决? java.lang.IllegalArgumentException: offset (0) + length (8) exceed the capacity of the array: 6 A:如果HBase表中的数据是以其他方式导入的话,那么其存储是以String格式存储的,所以使用其他的数据格式将会报该错误。需要将Flink创建HBase源表中非string类型的字段的字段类型重新改为String即可。
  • 注意事项 创建Flink OpenSource SQL作业时,在作业编辑界面的“运行参数”处,“Flink版本”需要选择“1.15”,勾选“保存作业日志”并设置保存作业日志的OBS桶,方便后续查看作业日志。 认证用的username和password等硬编码到代码中或者明文存储都有很大的安全风险,建议使用DEW管理凭证。配置文件或者环境变量中密文存放,使用时解密,确保安全。Flink Opensource SQL使用DEW管理访问凭据 创建HBase源表的列簇必须定义为ROW类型,字段名对应列簇名(column family),嵌套的字段名对应列限定符名(column qualifier)。 用户只需在表结构中声明查询中使用的的列簇和列限定符。除了ROW类型的列,剩下的原子数据类型字段(比如,STRING, BIGINT)将被识别为HBase的rowkey,一张表中只能声明一个rowkey。rowkey字段的名字可以是任意的,如果是保留关键字,需要用反引号进行转义。
  • 前提条件 该场景作业需要运行在DLI的独享队列上,因此要与HBase建立增强型跨源连接,且用户可以根据实际所需设置相应安全组规则。 如何建立增强型跨源连接,请参考《数据湖探索用户指南》中增强型跨源连接章节。 如何设置安全组规则,请参见《虚拟私有云用户指南》中“安全组”章节。 如果使用MRS HBase,请在增强型跨源的主机信息中添加MRS集群所有节点的主机ip信息。 详细操作请参考《数据湖探索用户指南》中的“修改主机信息”章节描述。
  • 语法格式 create table hbaseSource ( attr_name attr_type (',' attr_name attr_type)* (',' watermark for rowtime_column_name as watermark-strategy_expression) ','PRIMARY KEY (attr_name, ...) NOT ENFORCED) ) with ( 'connector' = 'hbase-2.2', 'table-name' = '', 'zookeeper.quorum' = '' );
  • 数据类型映射 HBase以字节数组存储所有数据,在读和写过程中要序列化和反序列化数据。 Flink的HBase连接器利用HBase(Hadoop) 的工具类org.apache.hadoop.hbase.util.Bytes进行字节数组和Flink数据类型转换。 Flink的HBase连接器将所有数据类型(除字符串外)null值编码成空字节。对于字符串类型,null值的字面值由null-string-literal选项值决定。 表2 数据类型映射表 Flink数据类型 HBase转换 CHAR/VARCHAR/STRING byte[] toBytes(String s) String toString(byte[] b) BOOLEAN byte[] toBytes(boolean b) boolean toBoolean(byte[] b) BINARY/VARBINARY 返回 byte[]。 DECIMAL byte[] toBytes(BigDecimal v) BigDecimal toBigDecimal(byte[] b) TINYINT new byte[] { val } bytes[0] // returns first and only byte from bytes SMALLINT byte[] toBytes(short val) short toShort(byte[] bytes) INT byte[] toBytes(int val) int toInt(byte[] bytes) BIGINT byte[] toBytes(long val) long toLong(byte[] bytes) FLOAT byte[] toBytes(float val) float toFloat(byte[] bytes) DOUBLE byte[] toBytes(double val) double toDouble(byte[] bytes) DATE 从 1970-01-01 00:00:00 UTC 开始的天数,int 值。 TIME 从 1970-01-01 00:00:00 UTC 开始天的毫秒数,int 值。 TIMESTAMP 从 1970-01-01 00:00:00 UTC 开始的毫秒数,long 值。 ARRAY 不支持 MAP/MULTISET 不支持 ROW 不支持
  • 回答 问题分析 当HBase服务端出现问题,HBase客户端进行表操作的时候,会进行重试,并等待超时。该超时默认值为Integer.MAX_VALUE (2147483647 ms),所以HBase客户端会在这么长的时间内一直重试,造成挂起表象。 解决方法 HBase客户端提供两个配置项来控制客户端的重试超时方式,如表1。 在“客户端安装路径/HBase/hbase/conf/hbase-site.xml”配置文件中配置如下参数。 表1 HBase客户端操作重试超时相关配置 配置参数 描述 默认值 hbase.client.operation.timeout 客户端操作超时时间。需在配置文件中手动添加。 2147483647 ms hbase.client.retries.number 最大重试次数。用于表示所有可重试操作所支持的最大重试次数。 35 这两个参数的重试超时的配合方式如图1所示。 图1 HBase客户端操作重试超时流程 从该流程可以看出,如果未对这两个配置参数根据具体使用场景进行配置,会造成挂起迹象。建议根据使用场景,配置合适的超时时间,如果是长时间操作,则把超时时间设置长一点;如果是短时间操作,则把超时时间设置短一点。而重试次数可以设置为:“(hbase.client.retries.number)*60*1000(ms)”。刚好大于“hbase.client.operation.timeout”设置的超时时间。
  • 日志级别 HBase中提供了如表2所示的日志级别。日志级别优先级从高到低分别是FATAL、ERROR、WARN、INFO、DEBUG。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表2 日志级别 级别 描述 FATAL FATAL表示当前事件处理出现严重错误信息,可能导致系统崩溃。 ERROR ERROR表示当前事件处理出现错误信息,系统运行出错。 WARN WARN表示当前事件处理存在异常信息,但认为是正常范围,不会导致系统出错。 INFO INFO表示记录系统及各事件正常运行状态信息 DEBUG DEBUG表示记录系统及系统的调试信息。 如果您需要修改日志级别,请执行如下操作: 进入HBase服务参数“全部配置”界面,具体操作请参考修改集群服务配置参数。 左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别。 保存配置,在弹出窗口中单击“确定”使配置生效。 配置完成后立即生效,不需要重启服务。
  • 操作步骤 写数据服务端调优 参数入口: 进入HBase服务参数“全部配置”界面,具体操作请参考修改集群服务配置参数章节。 表1 影响实时写数据配置项 配置参数 描述 默认值 hbase.wal.hsync 控制HLog文件在写入到HDFS时的同步程度。如果为true,HDFS在把数据写入到硬盘后才返回;如果为false,HDFS在把数据写入OS的缓存后就返回。 把该值设置为false比true在写入性能上会更优。 true hbase.hfile.hsync 控制HFile文件在写入到HDFS时的同步程度。如果为true,HDFS在把数据写入到硬盘后才返回;如果为false,HDFS在把数据写入OS的缓存后就返回。 把该值设置为false比true在写入性能上会更优。 true GC_OPTS HBase利用内存完成读写操作。提高HBase内存可以有效提高HBase性能。GC_OPTS主要需要调整HeapSize的大小和NewSize的大小。调整HeapSize大小的时候,建议将Xms和Xmx设置成相同的值,这样可以避免JVM动态调整HeapSize大小的时候影响性能。调整NewSize大小的时候,建议把其设置为HeapSize大小的1/8。 HMaster:当HBase集群规模越大、Region数量越多时,可以适当调大HMaster的GC_OPTS参数。 RegionServer:RegionServer需要的内存一般比HMaster要大。在内存充足的情况下,HeapSize可以相对设置大一些。 说明: 主HMaster的HeapSize为4G的时候,HBase集群可以支持100000 region数的规模。根据经验值,集群每增加35000个region,HeapSize增加2G,主HMaster的HeapSize不建议超过32GB。 HMaster -server -Xms4G -Xmx4G -XX:NewSize=512M -XX:MaxNewSize=512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=65 -XX:+PrintGCDetails -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFE -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFE -XX:-OmitStackTraceInFastThrow -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M Region Server -server -Xms6G -Xmx6G -XX:NewSize=1024M -XX:MaxNewSize=1024M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=65 -XX:+PrintGCDetails -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFE -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFE -XX:-OmitStackTraceInFastThrow -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M hbase.regionserver.handler.count 表示在RegionServer上启动的RPC侦听器实例数。如果设置过高会导致激烈线程竞争,如果设置过小,请求将会在RegionServer长时间等待,降低处理能力。根据资源情况,适当增加处理线程数。 建议根据CPU的使用情况,可以选择设置为100至300之间的值。 200 hbase.hregion.max.filesize HStoreFile的最大大小(单位:Byte)。如果任何一个列族HStoreFile超过此参数值,则托管Hregion将会一分为二。 10737418240 hbase.hregion.memstore.flush.size 在RegionServer中,当写操作内存中存在超过memstore.flush.size大小的memstore,则MemStoreFlusher就启动flush操作将该memstore以hfile的形式写入对应的store中。 如果RegionServer的内存充足,而且活跃Region数量也不是很多的时候,可以适当增大该值,可以减少compaction的次数,有助于提升系统性能。 同时,这种flush产生的时候,并不是紧急的flush,flush操作可能会有一定延迟,在延迟期间,写操作还可以进行,Memstore还会继续增大,最大值为“memstore.flush.size” * “hbase.hregion.memstore.block.multiplier”。当超过最大值时,将会阻塞操作。适当增大“hbase.hregion.memstore.block.multiplier”可以减少阻塞,减少性能波动。单位:字节。 134217728 hbase.regionserver.global.memstore.size 更新被锁定以及强制冲洗发生之前一个RegionServer上支持的所有MemStore的大小。RegionServer中,负责flush操作的是MemStoreFlusher线程。该线程定期检查写操作内存,当写操作占用内存总量达到阈值,MemStoreFlusher将启动flush操作,按照从大到小的顺序,flush部分相对较大的memstore,直到所占用内存小于阈值。 阈值 = “hbase.regionserver.global.memstore.size” * “hbase.regionserver.global.memstore.size.lower.limit” * “HBase_HEAPSIZE” 说明: 该配置与“hfile.block.cache.size”的和不能超过0.8,也就是写和读操作的内存不能超过HeapSize的80%,这样可以保证除读和写外其它操作的正常运行。 0.4 hbase.hstore.blockingStoreFiles 在region flush前首先判断file文件个数,是否大于hbase.hstore.blockingStoreFiles。 如果大于需要先compaction并且让flush延时90s(这个值可以通过hbase.hstore.blockingWaitTime进行配置),在延时过程中,将会继续写从而使得Memstore还会继续增大超过最大值 “memstore.flush.size” * “hbase.hregion.memstore.block.multiplier”,导致写操作阻塞。当完成compaction后,可能就会产生大量写入。这样就导致性能激烈震荡。 增加hbase.hstore.blockingStoreFiles,可以减低BLOCK几率。 15 hbase.regionserver.thread.compaction.throttle 大于此参数值的压缩将被大线程池执行,单位:Byte。控制一次Minor Compaction时,进行compaction的文件总大小的阈值。Compaction时的文件总大小会影响这一次compaction的执行时间,如果太大,可能会阻塞其它的compaction或flush操作。 1610612736 hbase.hstore.compaction.min 每次执行minor compaction的HStoreFile的最小数量。当一个Store文件超过该值时,会进行compact,适当增大该值,可以减少文件被重复执行compaction。但是如果过大,会导致Store文件数过多而影响读取的性能。 6 hbase.hstore.compaction.max 每次执行minor compaction的HStoreFile的最大数量。与“hbase.hstore.compaction.max.size”的作用基本相同,主要是控制一次compaction操作的时间不要太长。 10 hbase.hstore.compaction.max.size 如果一个HFile文件的大小大于该值,那么在Minor Compaction操作中不会选择这个文件进行compaction操作,除非进行Major Compaction操作。 这个值可以防止较大的HFile参与compaction操作。在禁止Major Compaction后,一个Store中可能存在几个HFile,而不会合并成为一个HFile,这样不会对数据读取造成太大的性能影响。单位:字节。 9223372036854775807 hbase.hregion.majorcompaction 单个区域内所有HStoreFile文件主压缩的时间间隔,单位:毫秒。由于执行Major Compaction会占用较多的系统资源,如果正在处于系统繁忙时期,会影响系统的性能。 如果业务没有较多的更新、删除、回收过期数据空间时,可以把该值设置为0,以禁止Major Compaction。 如果必须要执行Major Compaction,以回收更多的空间,可以适当增加该值,同时配置参数“hbase.offpeak.end.hour”和“hbase.offpeak.start.hour”以控制Major Compaction发生在业务空闲的时期。单位:毫秒。 604800000 hbase.regionserver.maxlogs hbase.regionserver.hlog.blocksize 表示一个RegionServer上未进行Flush的Hlog的文件数量的阈值,如果大于该值,RegionServer会强制进行flush操作。 表示每个HLog文件的最大大小。如果HLog文件大小大于该值,就会滚动出一个新的HLog文件,旧的将被禁用并归档。 这两个参数共同决定了RegionServer中可以存在的未进行Flush的hlog数量。当这个数据量小于MemStore的总大小的时候,会出现由于HLog文件过多而触发的强制flush操作。这个时候可以适当调整这两个参数的大小,以避免出现这种强制flush的情况。单位:字节。 32 134217728 写数据客户端调优 写数据时,在场景允许的情况下,更适合使用Put List的方式,可以极大的提升写性能。每一次Put的List的长度,需要结合单条Put的大小,以及实际环境的一些参数进行设定。建议在选定之前先做一些基础的测试。 写数据表设计调优 表2 影响实时写数据相关参数 配置参数 描述 默认值 COMPRESSION 配置数据的压缩算法,这里的压缩是HFile中block级别的压缩。对于可以压缩的数据,配置压缩算法可以有效减少磁盘的IO,从而达到提高性能的目的。 说明: 并非所有数据都可以进行有效压缩。例如一张图片的数据,因为图片一般已经是压缩后的数据,所以压缩效果有限。常用的压缩算法是SNAPPY,因为它有较好的Encoding/Decoding速度和可以接受的压缩率。 NONE BLOCKSIZE 配置HFile中block块的大小,不同的block块大小,可以影响HBase读写数据的效率。越大的block块,配合压缩算法,压缩的效率就越好;但是由于HBase的读取数据是以block块为单位的,所以越大的block块,对于随机读的情况,性能可能会比较差。 如果要提升写入的性能,一般扩大到128KB或者256KB,可以提升写数据的效率,也不会影响太大的随机读性能。单位:字节 65536 IN_MEMORY 配置这个表的数据优先缓存在内存中,这样可以有效提升读取的性能。对于一些小表,而且需要频繁进行读取操作的,可以设置此配置项。 false