云服务器内容精选

  • 设置HBase集群告警规则 登录 表格存储服务 管理控制台。 在集群管理列表中的右上角,输入要搜索的集群名称,单击。 在集群列表中,找到所需要集群,在对应的“操作”列中,单击“查看监控信息”,系统将跳转到该集群的“云服务监控”页面。 待查看监控信息的集群状态必须为“服务中”。 单击“创建告警规则”,进入创建告警规则页面进行添加。 具体参数设置请参考创建告警规则和通知。 配置完成后,单击“立即创建”,完成告警规则的创建。告警规则添加完成后,当监控指标触发设定的阈值时, 云监控 会在第一时间通过 消息通知 服务实时告知您资源异常,以免因此造成业务损失。 如果想设置单个指标的告警规则,进入查看监控信息页面: 查看监控指标,单击指标图。 单击右上角的“+”。 进入创建告警规则页面,设置规则。
  • 配置HBase集群监控数据转存OBS 配置数据存储是指对所有监控指标原始数据的保存。如果您尚未配置数据存储的OBS桶,则该项显示为空。在计算单元列表中找到需要配置的计算单元,然后单击“配置数据存储”可以将监控数据永久存储到OBS桶中,配置完成后,“永久数据存储 ”将显示所配置的OBS路径。 登录 表格存储 服务管理控制台。 单击管理控制台左上角的,选择区域。 进入集群管理页面,在集群列表中找到目标集群,在操作列中单击查看监控信息,系统会跳到该集群的云服务监控页面。 在“云服务监控”页面中,单击集群ID前的按钮展开计算单元列表。 单击配置数据存储,弹出配置数据存储页面。 找到目标计算单元,单击“配置数据存储”为该计算单元配置监控数据的存储路径。 在弹出的“配置数据存储”页面,配置如下参数,然后单击“确定”。 表1 数据存储参数说明 参数名称 说明 样例 OBS转储 是否配置OBS转储。首次配置选择“是”。 是 新创建OBS桶 如果已有OBS桶,可不用创建。 如果没有OBS桶,可开启该选项创建新的OBS桶。 是 转储OBS桶 已有OBS桶时,选择已有的桶。 如果没有OBS桶,输入需要创建的OBS桶名。 - 监控数据文件前缀 通过设置监控数据文件前缀可以方便您区分OBS桶中的 云监控服务 数据文件与其他普通文件。 -
  • 为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其中任意一个内网域名。
  • HBase参数说明 CloudTable集群当前可以修改的参数如表1所示。 hbase.regionserver.global.memstore.size和hfile.block.cache.size两个参数值相加不能超过0.8。 表1 HBase参数说明 参数名 参数值 参数范围 参考缺省值 参数描述 hbase.regionserver.thread.compaction.small 1 [1,20] 1 HFile compaction线程数,在put高负载情况下可以适当调大。 hbase.regionserver.global.memstore.size 0.4 (0,0.8) 0.4 建议设置为“hbase.hregion.memstore.flush.size * 写活跃region数 / RegionServer GC -Xmx”。默认值为“0.4”,表示使用RegionServer GC -Xmx的40%。 hbase.hstore.blockingStoreFiles 60 [1,2147483647] 60 当列簇的HFile数达到该阈值,阻塞该region的所有操作,直到compaction完成,在put高负载场景下可以适当调大。 hbase.client.scanner.timeout.period 60000 [1,2147483647] 60000 客户端和RegionServer端参数,表示scan租约的时间,建议设置为60000ms的整数倍,在读高负载情况下可以适当调大。单位:毫秒。 hfile.block.cache.size 0.2 (0,0.8) 0.2 数据缓存所占的RegionServer GC -Xmx百分比,在读高负载情况下可以适当调大以增大缓存命中率以提高性能。默认值为“0.2”,表示使用RegionServer GC -Xmx的20%。 hbase.regionserver.handler.count 100 [1,300] 100 RegionServer上的RPC服务器实例数,建议设置为100 ~ 300之间。 hbase.regionserver.metahandler.count 50 [1,100] 50 RegionServer中处理优先请求的程序实例的数量,建议设置为20 ~ 100之间。 hbase.hstore.flusher.count 2 [1,10] 2 memstore的flush线程数,在put高负载场景下可以适当调大。 hbase.ipc.server.callqueue.read.ratio 0.5 [0,1] 0.5 该配置项用于不同负载模型时,控制读和写操作的RPC队列数量的比例。取值范围为0到1.0,默认值为0.5。 0表示所有RPC队列不区分读和写操作; 小于0.5表示读操作负载少于写操作负载; 0.5表示读操作负载与写操作负载相同; 大于0.5表示读操作负载大于写操作负载; 1.0表示除了一个RPC队列外,其余所有RPC队列都用于读操作。 hbase.regionserver.hotregion.handler.count 66 [1,65535] 66 在RegionServer上启动的用于热点Region的RPC侦听器实例数。 hbase.ipc.server.hotregion.max.callqueue.length 330 [1,65535] 330 RegionServer处理热点Region的请求队列长度最大值,当接收到新的请求时,会检查是否会导致队列长度超过此阈值,如果超过阈值,会直接丢弃此请求。 hbase.metric.controller.analysis.period 60 [1,2147483647] 60 MetricController服务热点分析周期,单位:秒。 hbase.metric.controller.analysis.threads.max 10 [1,100] 10 热点分析任务线程池最大线程数。 hbase.metric.controller.collect.threads.max 16 [1,100] 16 热点分析流量收集线程池最大线程数。 hbase.metric.regionserver.hotspot.threshold 20000 [1,2147483647] 20000 单RegionServer热点阈值,单位为每秒请求数。 hbase.metric.region.hotspot.threshold 10000 [1,2147483647] 10000 单Region热点阈值,单位为每秒请求数。 hbase.hotspot.enable true [true,false] true 是否开启热点自愈功能,true为开启,false为关闭。开启后如有出现访问热点,会自动处理热点。 hbase.tries.cache.enabled false [true,false] false 设置为true时,使用LoudsTriesLruBlockCache缓存索引块和数据块。 hbase.write.tries false [true,false] false 设置为true时,开启succinct tries特性,它将使用一种新的数据结构来提升index block的利用率。 hbase.hfile.hsync false [true,false] false 设置是否启用Hfile耐久性以将数据持久化到磁盘。若将该参数设置为true,则性能将受到影响,原因是每个Hfile写入时都会被同步到磁盘上。 hbase.wal.hsync false [true,false] false 设置是否启用WAL文件耐久性以将WAL数据持久化到磁盘。若将该参数设置为true,则性能将受到影响,原因是每个WAL的编辑都会被同步到磁盘上。
  • 操作步骤 登录表格存储服务管理控制台。 单击管理控制台左上角的,选择区域。 在左侧导航树,单击集群管理。 选中需要修改参数的集群,单击对应的集群名称,跳转到该集群详情页面。 在“参数配置”中单击“参数配置”页签,对HBase参数进行修改。 CloudTable集群当前可以修改的HBase参数请参见HBase参数说明。 选中需要修改的参数,在“参数值”列单击。 在修改框中输入新值,单击,系统提示“参数修改为xx成功,请保存本次修改值”,并且修改的参数值后显示红色*。 如果单击,则取消修改。 图1 修改HBase参数 单击参数列表左上方的“保存修改”,弹出“保存修改”对话框。 在“保存修改”对话框中,确认参数修改信息正确后,勾选“是否立即重启”,然后单击“确定”。 图2 保存修改 当勾选“是否立即重启”并单击“确定”后,集群将立即重启,重启完成后,修改后的参数才能生效。单击参数列表右上方的,参数列表左上方将显示“新值已应用”。 在“保存修改”对话框中可以先不勾选“是否立即重启”,单击“确定”后,参数列表上方将显示“新值未应用”。此时用户需要自行重启集群,才能使修改的参数值生效。重启集群操作请参见重启HBase集群。 如果修改的参数值不正确,可以在“保存修改”对话框中单击“一键还原”,取消修改参数值。 参数修改完成后,可以单击“修改历史”页签查看参数修改的历史。 在“修改历史”页签中可以查看如下信息: 参数名:被修改过的参数名。 旧值:修改前的参数值。 新值:修改后的参数值。 修改时间:记录用户修改参数值的时间。
  • 批量构建全局二级索引数据 只有处于INACTIVE状态的索引才能进行批量构建,如需重建索引数据,请先修改索引状态。 数据表中存在大量数据时,构建耗时较长,建议将nohup命令放在后台执行,避免操作被意外中断。 在HBase客户端执行以下命令可批量构建已有数据的索引数据: hbase org.apache.hadoop.hbase.hindex.global.mapreduce.GlobalTableIndexer -Dtablename.to.index='table' -Dindexnames.to.build='idx1' 相关参数介绍如下: tablename.to.index:表示需修改索引状态的数据表的名称。 indexnames.to.build:指定的需要批量生成数据的索引名,可以同时指定多个,用#号分隔。 hbase.gsi.cleandata.enabled(可选):表示构建索引数据前是否需要清空索引表,默认值为“false”。 hbase.gsi.cleandata.timeout(可选):表示构建索引数据前等待清空索引表超时时间,默认值为“1800”,单位为:秒。
  • 回答 在splitWAL的过程中,参数“hbase.splitlog.manager.timeout”控制splitWAL的超时时间,如果该时间内splitWAL无法完成,则会再次提交相同的任务,在一定时间内多次提交了相同的任务,当其中某次任务执行完毕时会删除这个temp文件,所以在后来的任务执行时无法找到这个文件,故出现FileNotFoudException。需做如下调整: 当前“hbase.splitlog.manager.timeout”的默认时间为“600000ms”,集群规格为每个regionserver上有2000~3000个region,在集群正常情况下(HBase无异常,HDFS无大量的读写操作等),建议此参数根据集群的规格进行调整,如果实际规格(实际平均每个regionserver上region的个数)大于默认规格(默认平均每个regionserver上region的个数,即2000),则调整方案为(实际规格 / 默认规格)* 默认时间。 在服务端的“hbase-site.xml”文件中配置splitlog参数,如表1所示。 表1 splitlog参数说明 参数 描述 默认值 hbase.splitlog.manager.timeout 分布式日志分裂管理程序接收worker回应的超时时间 600000
  • 问题 当集群重启后会进行split WAL操作,在splitWAL期间,HMaster出现不能close log,日志中频繁打印出FileNotFoundException及no lease信息。 2017-06-10 09:50:27,586 | ERROR | split-log-closeStream-2 | Couldn't close log at hdfs://hacluster/hbase/data/default/largeT1/2b48346d087275fe751fc049334fda93/recovered.edits/0000000000000000000.temp | org.apache.hadoop.hbase.wal.WALSplitter$LogRecoveredEditsOutputSink$2.call(WALSplitter.java:1330) java.io.FileNotFoundException: No lease on /hbase/data/default/largeT1/2b48346d087275fe751fc049334fda93/recovered.edits/0000000000000000000.temp (inode 1092653): File does not exist. [Lease. Holder: DFSClient_NONMAPREDUCE_1202985678_1, pendingcreates: 1936] ?at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:3432) ?at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.analyzeFileState(FSNamesystem.java:3223) ?at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNewBlockTargets(FSNamesystem.java:3057) ?at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3011) ?at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:842) ?at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:526) ?at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) ?at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616) ?at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:973) ?at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2260) ?at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2256) ?at java.security.AccessController.doPrivileged(Native Method) ?at javax.security.auth.Subject.doAs(Subject.java:422) ?at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1769) ?at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2254) ?at sun.reflect.GeneratedConstructorAccessor40.newInstance(Unknown Source) ?at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ?at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ?at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:106) ?at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:73) ?at org.apache.hadoop.hdfs.DataStreamer.locateFollowingBlock(DataStreamer.java:1842) ?at org.apache.hadoop.hdfs.DataStreamer.nextBlockOutputStream(DataStreamer.java:1639) ?at org.apache.hadoop.hdfs.DataStreamer.run(DataStreamer.java:665)
  • 基于HBase本地二级索引查询数据 在具有索引的用户表中,可以使用Filter来查询数据。对于创建单索引和组合索引的用户表,使用过滤器查询的结果与没有使用索引的表相同,但数据查询性能高于没有使用索引的表。 索引的使用规则如下: 对于为一个或多个列创建单个索引的情况: 当将此列用于AND或OR查询筛选时,使用索引可以提高查询性能。 例如,Filter_Condition(IndexCol1)AND / OR Filter_Condition(IndexCol2)。 当在查询中使用“索引列”和“非索引列”进行过滤时,此索引可以提高查询性能。 例如,Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol2)AND Filter_Condition(NonIndexCol1)。 当在查询中使用“索引列”或“非索引列”进行筛选时,但不使用索引,查询性能不会提高。 例如,Filter_Condition(IndexCol1)AND / OR Filter_Condition(IndexCol2) OR Filter_Condition(NonIndexCol1)。 对于为多个列创建组合索引的情况: 当用于查询的列是组合索引的全部或部分列并且与组合索引具有相同的顺序时,使用索引会提高查询性能。 例如,为C1,C2和C3创建组合索引。 该索引在以下情况下生效: Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol2)AND Filter_Condition(IndexCol3) Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol2) FILTER_CONDITION(IndexCol1) 该索引在下列情况下不生效: Filter_Condition(IndexCol2)AND Filter_Condition(IndexCol3) Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol3) FILTER_CONDITION(IndexCol2) FILTER_CONDITION(IndexCol3) 当在查询中使用“索引列”和“非索引列”进行过滤时,使用索引可提高查询性能。 例如: Filter_Condition(IndexCol1)AND Filter_Condition(NonIndexCol1) Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol2)AND Filter_Condition(NonIndexCol1) 当在查询中使用“索引列”或“非索引列”进行筛选时,但不使用索引,查询性能不会提高。 例如: Filter_Condition(IndexCol1)OR Filter_Condition(NonIndexCol1) (Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol2))OR(Filter_Condition(NonIndexCol1)) 当多个列用于查询时,只能为组合索引中的最后一列指定值范围,而其他列只能设置为指定值。 例如,为C1,C2和C3创建组合索引。在范围查询中,只能为C3设置数值范围,过滤条件为“C1 = XXX,C2 = XXX,C3 = 数值范围”。
  • HBase本地二级索引相关接口 使用HIndex的API都在类org.apache.hadoop.hbase.hindex.client.HIndexAdmin中,相关接口介绍如下: 表2 HBase Index相关接口 操作 接口 描述 注意事项 添加索引 addIndices() 将索引添加到没有数据的表中。调用此接口会将用户指定的索引添加到表中,但会跳过生成索引数据。因此,在此操作之后,索引不能用于scan/filter操作。该接口使用场景为用户想要在具有大量预先存在用户数据的表上批量添加索引,其具体操作为使用诸如TableIndexer工具之类的外部工具来构建索引数据。 索引一旦添加则不能修改。如果要修改,则需先删除旧的索引然后重新创建。 应注意不要在具有不同索引名称的相同列上创建两个索引,否则将会导致数据存储和查询处理的资源浪费。 索引不能添加到系统表中。 向索引列put数据时不支持append和increment操作。 如果客户端出现任何故障,除非发生DoNotRetryIOException,否则应该重试。 索引列族按以下优先级从数据表中已存在的列族选取,优先级从高到低依次为: d、#、@、$、%、#0、@0、$0、%0、#1、@1 ...上至#255、@255、$255和%255 创建索引时,系统会在表中按以上优先级顺序检查是否存在以上列族,如果不存在,则将第一个不存在的列族设为索引列族。 例如: 数据表中仅存在d列族,则索引列族默认为#。 数据表中已存在d和#列族,则默认索引列族默认为@。 数据表中已存在d、#和$列族,则索引列族默认为@。 可以通过HIndex TableIndexer工具添加索引而无需建立索引数据。 addIndicesWithData() 将索引添加到有数据的表中。此方法将用户指定的索引添加到表中,并会对已经存在的用户数据创建对应的索引数据,也可先调用该方法生成索引再在存入用户数据的同时生成索引数据。在此操作之后,这些索引立即可用于scan/filter操作。 删除索引 dropIndices() 仅删除索引。该API从表中删除用户指定的索引,但跳过相应的索引数据。在此操作之后,索引不能用于scan/filter操作。集群在major compaction期间会自动删除旧的索引数据。 此API使用场景为表中包含大量索引数据且dropIndicesWithData()不可行。另外,也可以通过TableIndexer工具删除索引以及索引数据。 在索引的状态为ACTIVE,INACTIVE和DROPPING时,允许禁用索引的操作。 对于使用dropIndices()删除索引的操作,用户必须确保在将索引添加到具有相同索引名的表之前,相应的索引数据已被删除(即major compaction已完成)。 用户删除相应的索引会删除: 一个带有索引的列族。 组合索引所有列族中的任一个列族。 索引可以通过HIndex TableIndexer工具与索引数据一起删除。 dropIndicesWithData() 删除索引数据。此API删除用户指定的索引,并删除用户表中与这些索引对应的所有索引数据。在此操作之后,删除的索引完全从表中删除,不再可用于scan/filter操作。 启用/禁用索引 disableIndices() 该API禁用所有用户指定的索引,使其不再可用于scan/filter操作。 在索引的状态为ACTIVE,INACTIVE和BUILDING时允许启用索引的操作。 在索引的状态为ACTIVE和INACTIVE时允许禁用索引操作。 在禁用索引之前,用户必须确保索引数据与用户数据一致。如果在索引处于禁用状态期间没有在表中添加新的数据,索引数据与用户数据将保持一致。 启用索引时,可以通过使用TableIndexer工具构建索引来保证数据一致性。 enableIndices() 该API启用所有用户指定的索引,使其可用于scan/filter操作。 查看已创建的索引 listIndices() 该API可用于列出给定表中的所有索引。 无
  • 提交命令 假设用例代码打包后的jar包名为spark-hbaseContext-test-1.0.jar,并将jar包放在客户端“$SPARK_HOME”目录下,以下命令均在“$SPARK_HOME”目录执行,Java接口对应的类名前有Java字样,请参考具体样例代码进行书写。 yarn-client模式: java/scala版本(类名等请与实际代码保持一致,此处仅为示例),${ip}请使用实际执行nc -lk 9999的命令的机器ip bin/spark-submit --master yarn --deploy-mode client --class com.huawei.bigdata.spark.examples.streaming.JavaHBaseStreamingBulkPutExample SparkOnHbaseJavaExample.jar ${ip} 9999 streamingTable cf1 python版本(文件名等请与实际保持一致,此处仅为示例),假设对应的Java代码打包后包名为SparkOnHbaseJavaExample.jar,且放在当前提交目录。 bin/spark-submit --master yarn --deploy-mode client --jars SparkOnHbaseJavaExample.jar HBaseStreamingBulkPutExample.py ${ip} 9999 streamingTable cf1 yarn-cluster模式: java/scala版本(类名等请与实际代码保持一致,此处仅为示例),${ip}请使用实际执行nc -lk 9999的命令的机器ip bin/spark-submit --master yarn --deploy-mode cluster --class com.huawei.bigdata.spark.examples.streaming.JavaHBaseStreamingBulkPutExample --files /opt/user.keytab,/opt/krb5.conf SparkOnHbaseJavaExample.jar ${ip} 9999 streamingTable cf1 python版本(文件名等请与实际保持一致,此处仅为示例),假设对应的Java代码打包后包名为SparkOnHbaseJavaExample.jar,且放在当前提交目录。 bin/spark-submit --master yarn --deploy-mode cluster --files /opt/user.keytab,/opt/krb5.conf --jars SparkOnHbaseJavaExample.jar HBaseStreamingBulkPutExample.py ${ip} 9999 streamingTable cf1
  • Python样例代码 下面代码片段仅为演示,具体代码参见SparkOnHbasePythonExample中HBaseStreamingBulkPutExample文件: # -*- coding:utf-8 -*- """ 【说明】 (1)由于pyspark不提供Hbase相关api,本样例使用Python调用Java的方式实现 (2)如果使用yarn-client模式运行,请确认Spark2x客户端Spark2x/spark/conf/spark-defaults.conf中 spark.yarn.security.credentials.hbase.enabled参数配置为true """ from py4j.java_gateway import java_import from pyspark.sql import SparkSession # 创建SparkSession spark = SparkSession\ .builder\ .appName("JavaHBaseStreamingBulkPutExample")\ .getOrCreate() # 向sc._jvm中导入要运行的类 java_import(spark._jvm, 'com.huawei.bigdata.spark.examples.streaming.JavaHBaseStreamingBulkPutExample') # 创建类实例并调用方法,传递sc._jsc参数 spark._jvm.JavaHBaseStreamingBulkPutExample().execute(spark._jsc, sys.argv) # 停止SparkSession spark.stop()
  • 数据规划 在客户端执行hbase shell进入HBase命令行。 在hbase命令执行下面的命令创建HBase表: create 'streamingTable','cf1' 在客户端另外一个session通过linux命令构造一个端口进行接收数据(不同操作系统的机器,命令可能不同,suse尝试使用netcat -lk 9999): nc -lk 9999 提交任务命令执行之后,在该命令下输入要提交的数据,通过HBase表进行接收。 在构造一个端口进行接收数据时,需要在客户端所在服务器上安装netcat。
  • 打包项目 通过IDEA自带的Maven工具,打包项目,生成jar包。具体操作请参考在Linux环境中调测Spark应用。 将打包生成的jar包上传到Spark客户端所在服务器的任意目录(例如“$SPARK_HOME” )下。 将user.keytab、krb5.conf 两个文件上传客户端所在服务器上(文件上传的路径需要和生成的jar包路径一致)。 若运行“Spark on HBase”样例程序,需要在Spark客户端的“spark-defaults.conf”配置文件中将配置项“spark.yarn.security.credentials.hbase.enabled”设置为“true”(该参数值默认为“false”,改为“true”后对已有业务没有影响。如果要卸载HBase服务,卸载前请将此参数值改回“false”),将配置项“spark.inputFormat.cache.enabled”设置为“false”。
  • 数据规划 在客户端执行hbase shell进入HBase命令行。 在hbase命令执行下面的命令创建HBase表: create 'streamingTable','cf1' 在客户端另外一个session通过linux命令构造一个端口进行接收数据(不同操作系统的机器,命令可能不同,suse尝试使用netcat -lk 9999): nc -lk 9999 提交任务命令执行之后,在该命令下输入要提交的数据,通过HBase表进行接收。 在构造一个端口进行接收数据时,需要在客户端所在服务器上安装netcat。
提示

您即将访问非华为云网站,请注意账号财产安全