华为云用户手册

  • 场景描述 Hive是建立在Hadoop上的数据仓库框架,提供大数据平台批处理计算能力,能够对结构化/半结构化数据进行批量分析汇总完成数据计算。提供类似SQL的Hive Query Language语言操作结构化数据,其基本原理是将HQL语言自动转换成MapReduce任务,从而完成对Hadoop集群中存储的海量数据进行查询和分析。 Hive主要特点如下: 海量结构化数据分析汇总。 将复杂的MapReduce编写任务简化为SQL语句。 灵活的数据存储格式,支持JSON、CSV、TEXTFILE、RCFILE、SEQUENCEFILE、ORC等存储格式。 本实践以某图书网站后台用户的点评数据为原始数据,导入Hive表后通过SQL命令筛选出最受欢迎的图书。
  • 创建MRS离线查询集群 进入购买MRS集群页面。 选择“快速购买”,填写软件配置参数。 表1 软件配置(以下参数仅供参考,可根据实际情况调整) 参数项 取值 区域 华北-北京四 计费模式 按需计费 集群名称 MRS_demo 版本类型 普通版 集群版本 MRS 3.1.0 组件选择 Hadoop分析集群 可用区 可用区1 虚拟私有云 vpc-01 子网 subnet-01 企业项目 default Kerberos认证 不开启 用户名 admin/root 密码 设置密码登录集群管理页面及ECS节点用户的密码,例如:Test!@12345。 确认密码 再次输入设置用户密码 通信安全授权 勾选“确认授权” 图1 购买Hadoop分析集群 单击“立即购买”,等待MRS集群创建成功。 图2 集群购买成功
  • 查看作业执行结果 进入“作业管理”页面,查看作业执行状态。 图9 作业执行状态 等待1~2分钟,登录OBS控制台,进入obs-demo-analysis-hwt4文件系统的output目录中,查看执行结果,在生成的csv文件所在行的“操作”列单击“下载”按钮将该文件下载到本地。 图10 下载作业执行结果 在本地将下载后的csv文件使用Excel文本打开,按照样例程序中定义的字段为每列数据进行分类,得到如下图所示作业执行结果。 图11 执行结果
  • 创建集群 进入购买MRS集群页面。 选择“自定义购买”。 参见表1配置集群软件信息。 表1 软件配置 参数名称 配置方式 区域 选择“华北-北京四” 说明: 本指导以“华北-北京四”为例进行介绍,如果您需要选择其他区域进行操作,请确保所有操作均在同一区域进行。 计费模式 按需计费 集群名称 mrs_demo 集群类型 选择“分析集群”,用来做离线数据分析 版本类型 选择“普通版” 集群版本 选择“MRS 3.1.0” 说明: 本实践仅适用于MRS 3.1.0版本。 组件选择 勾选所有组件 元数据 选择“本地元数据” 图1 自定义购买-软件配置 单击“下一步”配置硬件信息。 参见表2配置集群硬件信息。 表2 硬件配置 参数名称 配置方式 可用区 可用区2。 企业项目 选择“default”。 虚拟私有云 选择需要创建集群的VPC,单击“查看虚拟私有云”进入VPC服务查看已创建的VPC名称和ID。如果没有VPC,需要创建一个新的VPC。 子网 选择需要创建集群的子网,可进入VPC服务查看VPC下已创建的子网名称和ID。如果VPC下未创建子网,请单击“创建子网”进行创建。 安全组 选择“自动创建”。 弹性公网IP 选择“暂不绑定”。 集群节点 保持默认值。 图2 自定义购买-硬件配置 单击“下一步”,高级配置页签参考表3配置以下信息,其他选项保持默认值。 表3 高级配置 参数名称 配置方式 Kerberos认证 关闭Kerberos认证。 用户名 Manager管理员用户,目前默认为admin用户。 密码 配置Manager管理员用户的密码。 确认密码 再次输入Manager管理员用户的密码。 登录方式 选择“密码”。 用户名 用于登录弹性云服务器的用户,目前默认为root用户。 密码 配置登录ECS的用户密码。 确认密码 再次输入登录ECS的用户密码。 图3 自定义购买-高级配置 单击“下一步”,在“确认配置”页面检查配置集群信息,如需调整配置,可单击,跳转到对应页签后重新设置参数。 勾选通信安全授权后,单击“立即购买”,进入任务提交成功页面。 单击“返回集群列表”,可以查看到集群创建的状态。 集群创建需要时间,所创集群的初始状态为“启动中”,创建成功后状态更新为“运行中”,请您耐心等待。
  • 创建作业 在MRS控制台左侧导航栏选择“现有集群”,单击名称为“mrs_demo”的集群。 在集群信息页面选择“作业管理”页签,单击“添加”,进入添加作业页面。 图7 添加作业 按图8完成作业参数配置。 表4 配置作业信息 参数名称 配置方法 作业类型 选择“SparkSubmit”。 作业名称 输入“driver_behavior_task”。 执行程序路径 单击“OBS”,选择准备Spark2x样例程序和样例数据中上传的名称为driver_behavior.jar的jar包。 运行程序参数 参数选择“--class”,值输入“com.huawei.bigdata.spark.examples.DriverBehavior”。 执行程序参数 输入“AK SK 1 输入路径 输出路径”。 AK/SK请参考说明方式获取。 1为固定输入,用于指定作业执行时调用的程序函数。 输入路径可通过单击“OBS”进行选择输入路径。 输出路径请手动输入一个不存在的目录,例如obs://obs-demo-analysis-hwt4/output/。 说明: AK/SK,请通过如下方式获取。 登录华为云管理控制台。 单击右上角的用户名,然后选择“我的凭证”。 系统跳转至“我的凭证”页面,单击“访问密钥”。 单击“新增访问密钥”申请新密钥,按照提示输入密码与验证码之后,浏览器自动下载一个“credentials.csv”文件,文件为csv格式,以英文逗号分隔,中间的为AK,最后一个为SK。 服务配置参数 保持默认不配置。 图8 添加作业 单击“确定”,开始提交作业,执行程序。
  • 约束说明 MRS对接LakeFormation前,需要注意以下约束限制: MRS集群和LakeFormation实例必须同在一个云账户下且属于同一个Region。 LakeFormation侧创建的接入客户端所在虚拟私有云,必须与MRS集群在同一虚拟私有云下。 MRS集群仅支持对接LakeFormation实例中名称为hive的Catalog。 MRS存量集群需要先完成元数据库和权限策略向LakeFormation实例上迁移,再配置对接。 如果需要迁移多个MRS集群中的元数据到同一个LakeFormation实例,MRS集群之间的Database名称不能重复。 MRS对接LakeFormation后,MRS组件功能约束限制: Hive暂不支持临时表功能。 Hive暂不支持跨集群的列加密表功能。 Hive WebHCat暂不支持对接LakeFormation。 Hive创建内表时如果表目录不为空,则禁止创建表。 Hudi表创建前,需要先在LakeFormation上添加Hudi表目录的路径授权,赋予OBS读写权限。 Hudi表不支持在LakeFormation管理面编辑表的字段,只能通过Hudi客户端增删改表的字段。 Flink读写Hudi场景下同步Hive表,仅支持使用hive_sync.mode=jdbc,不支持hms方式。 Spark使用小权限用户登录客户端创建数据库时,如果用户没有default库的OBS路径权限,将提示缺少权限,实际创建数据库成功。 MRS对接LakeFormation后,权限策略约束限制: 通过LakeFormation授权仅支持将LakeFormation角色作为授权主体,不支持IAM用户或IAM用户组作为授权主体。 PolicySync进程不会修改集群内RangerAdmin Hive模块的默认策略,默认策略仍然生效。 PolicySync进程启动后,会与LakeFormation实例的权限进行比对,删除LakeFormation上不存在的非默认策略,请先完成权限策略迁移到LakeFormation实例上。 RangerAdmin WebUI界面的Hive模块,禁止执行添加、删除权限非默认策略的操作,统一在LakeFormation实例的数据权限界面进行授权操作。 MRS集群取消对接LakeFormation后,RangerAdmin的非默认策略不会清理,需要人工进行清理。 Hive暂不支持Grant授权的SQL语句,需统一在LakeFormation实例的数据权限界面进行授权操作。 MRS暂不支持LakeFormation行过滤权限能力。
  • 不同Region 当源集群与目标集群处于不同Region时,用Distcp工具将源集群数据拷贝到OBS,借助OBS跨区域复制功能(请参见跨区域复制)将数据复制到对应目的集群所在Region的OBS,然后通过Distcp工具将OBS数据拷贝到目的集群的HDFS上。由于执行Distcp无法为OBS上的文件设置权限、属主/组等信息,因此当前场景在进行数据导出时也需要将HDFS的元数据信息进行导出并拷贝,以防HDFS文件属性信息丢失。
  • 线下集群向云迁移 线下集群可以通过如下两种方式将数据迁移至云: 云专线(DC) 为源集群与目标集群之间建立云专线,打通线下集群出口网关与线上VPC之间的网络,然后参考同Region执行Distcp进行拷贝。 数据快递服务(DES) 对于TB或PB级数据上云的场景,华为云提供数据快递服务 DES。将线下集群数据及已导出的元数据拷贝到DES盒子,快递服务将数据递送到华为云机房,然后通过云数据迁移 CDM将DES盒子数据拷贝到HDFS。
  • 创建CDM集群并绑定EIP 如果是独立CDM服务,参考创建集群创建CDM集群;如果是作为DataArts Studio服务CDM组件使用,参考创建集群创建CDM集群。 关键配置如下: CDM集群的规格,按待迁移的数据量选择,一般选择“cdm.medium”即可,满足大部分迁移场景。 CDM集群所在VPC、子网、安全组,选择与MRS集群所在的网络一致。 CDM集群创建完成后,选择集群操作列的“绑定弹性IP”,CDM通过EIP访问MRS HDFS。 图1 集群列表 如果用户对本地数据源的访问通道做了SSL加密,则CDM无法通过弹性IP连接数据源。
  • 创建MRS离线查询集群 进入购买MRS集群页面。 选择“快速购买”,填写配置参数。 表1 表1 软件配置 参数项 取值 区域 华北-北京四 计费模式 按需计费 集群名称 MRS_hbase 版本类型 普通版 集群版本 MRS 3.1.0 组件选择 HBase查询集群 可用区 可用区1 企业项目 default 虚拟私有云 vpc-01 子网 subnet-01 Kerberos认证 开启 用户名 root/admin 密码 设置密码登录集群管理页面及ECS节点用户的密码,例如:Test!@12345。 确认密码 再次输入设置用户密码 通信安全授权 勾选“确认授权” 图1 创建HBase查询集群 单击“立即购买”,等待MRS集群创建成功。
  • 场景描述 BulkLoad方式调用MapReduce的job直接将数据输出成HBase table内部的存储格式的文件HFile,然后将生成的StoreFiles加载到集群的相应节点。这种方式无需进行flush、compact、split等过程,不占用Region资源,不会产生巨量的写入I/O,所以需要较少的CPU和网络资源。 BulkLoad适合的场景: 大量数据一次性加载到HBase。 对数据加载到HBase可靠性要求不高,不需要生成WAL文件。 使用put加载大量数据到HBase速度变慢,且查询速度变慢时。 加载到HBase新生成的单个HFile文件大小接近HDFS block大小。
  • 常见问题 问题现象: 无法获取Kafka CPU与内存监控信息日志提示。 java.io.IOException cannot be cast to javax.management.remote.JMXConnector 问题原因: jmx地址配置错误。默认jmx地址为: cluster1.efak.jmx.uri=service:jmx:rmi:///jndi/rmi://%s/jmxrmi 解决办法: MRS内Kafka jmx名称为kafka,需要设置为: cluster1.efak.jmx.uri=service:jmx:rmi:///jndi/rmi://%s/kafka
  • 场景介绍 本章节适用于将线下IDC机房或者公有云Hadoop集群中的数据(支持数据量在几十TB级别或以下的数据量级)迁移到华为云MRS服务。 本章节以通过华为云CDM服务 2.9.1.200版本进行数据迁移为例介绍。不同版本操作可能有差异,具体操作详情以实际版本对应的操作指导为准。 CDM服务支持迁移的数据源可参考支持的数据源,数据源为Apache HDFS时,建议使用的版本为2.8.X、3.1.X,请执行搬迁前务必确认是否支持搬迁。 图1 Hadoop数据迁移示意
  • 场景介绍 本章节适用于将线下IDC机房或者公有云HBase集群中的数据(支持数据量在几十TB级别或以下的数据量级)迁移到华为云MRS服务。 本章节以通过华为云CDM服务 2.9.1.200版本进行数据迁移为例介绍。不同版本操作可能有差异,具体操作详情以实际版本对应的操作指导为准。 图1 HBase数据迁移示意 HBase会把数据存储在HDFS上,主要包括HFile文件和WAL文件,由配置项“hbase.rootdir”指定在HDFS上的路径,华为云MRS集群的默认存储位置是“/hbase”文件夹下。 HBase自带的一些机制和工具命令也可以实现数据搬迁,例如通过导出Snapshots快照、Export/Import、CopyTable方式等,可以参考Apache官网相关内容。 CDM服务支持迁移的数据源可参考支持的数据源,数据源为Apache HBase时,建议使用的版本为2.1.X、1.3.X,请执行搬迁前务必确认是否支持搬迁。
  • 增量数据迁移 在业务割接前,如果源端集群上有新增数据,需要定期将新增数据搬迁到目的端集群。一般每天更新的数据量在GB级别可以使用CDM的“整库迁移”指定时间段的方式进行HBase新增数据迁移。 当前使用CDM的“整库迁移”功能时的限制:如果源HBase集群中被删除操作的数据无法同步到目的端集群上。 场景迁移的HBase连接器不能与“整库迁移”共用,因此需要单独配置“HBase”连接器。 参考全量数据迁移的1~7步骤新增两个“HBase”连接器,连接器类型根据实际集群来选择。 例如选择连接器类型时分别为源端集群和目的端集群选择“MRS HBase”和“Apache HBase”。 图6 HBase增量迁移连接 选择“作业管理”的“整库迁移”页签,单击“新建作业”。 进入作业参数配置界面,作业相关信息配置完成后单击“下一步”。 作业名称:用户自定义作业名称,例如hbase-increase。 源端作业配置:源连接名称请选择新创建的到源端集群的连接名称,并展开高级属性配置迁移数据的时间段。 目的端作业配置:目的连接名称请选择新创建的到目的端集群的连接名称,其他不填写。 图7 HBase增量迁移作业配置 选择要迁移的数据表, 单击“下一步”,单击“保存”。 选择“作业管理”的“整库迁移”页签,在待运行作业的“操作”列单击“运行”,即可开始HBase数据增量迁移。
  • 操作步骤 登录CDM管理控制台。 创建CDM集群,该CDM集群的安全组、虚拟私有云、子网需要和迁移目的端集群保持一致,保证CDM集群和MRS集群之间网络互通。 在“集群管理”页面单击待操作集群对应“操作”列的“作业管理”。 在“连接管理”页签,单击“新建连接”。 参考CDM服务的新建连接页面,分别添加到迁移源端集群和迁移目的端集群的连接。 连接类型根据实际集群来选择,如果是MRS集群,连接器类型可以选择“MRS Hive”,如果是自建集群可以选择“Apache Hive”。 图2 创建Hive连接 在迁移目的端集群中创建数据迁移后的存储数据库。 选择“作业管理”的“表/文件迁移”页签,单击“新建作业”。 进入作业参数配置界面,配置作业名称,并分别为源连接和目的连接选择5中创建的对应数据连接并选择要迁移的数据库和表名,单击“下一步”。 图3 Hive作业配置 配置源字段和目的字段的映射关系, 并单击“下一步”。 进入任务配置页面,不做修改,直接单击“保存”。 选择“作业管理”的“表/文件迁移”页签,在待运行作业的“操作”列单击“运行”,即可开始Hive数据迁移。 迁移完成后,可以在目的端集群和源端集群的Hive Beeline命令行中,通过同样的查询语句,对比查询结果进行验证。 例如在目的端集群和源端集群上通过查询catalog_sales表的记录数来确认数据条数是否一致。 select count(*) from catalog_sales; 图4 源端集群数据记录 图5 目的端集群数据记录 (可选)如果源端集群中有新增数据需要定期将新增数据迁移至目的端集群,则根据数据新增方式进行不同方式的迁移。配置定期任务增量迁移数据,直到所有业务迁移至目的端集群。 Hive表数据修改、未新增删除表、未修改已有表的数据结构:此时Hive表已经创建好,仅需迁移Hive存储在HDFS或OBS上的文件即可,请参考使用CDM服务迁移Hadoop数据至MRS集群页面新增数据迁移方式进行数据迁移。 Hive表有新增:请选择“作业管理”的“表/文件迁移”页签,在Hive迁移作业的“操作”列单击“编辑”,选择新增的数据表进行数据迁移。 Hive表有删除或已有表的数据结构有修改:请在目的端集群中手动删除对应表或手动更新变更的表结构。
  • 场景介绍 本章节适用于将线下IDC机房或者公有云Hive集群中的数据(支持数据量在几十TB级别或以下的数据量级)迁移到华为云MRS服务。 Hive数据迁移分两部分内容: Hive的元数据信息,存储在MySQL等数据库中。MRS Hive集群的元数据会默认存储到MRS DBService组件,也可以选择RDS(MySQL)作为外置元数据库。 Hive的业务数据,存储在HDFS文件系统或OBS对象存储中。 使用华为云CDM服务“场景迁移功能”可以一键式便捷地完成Hive数据的迁移。 本章节以通过华为云CDM服务 2.9.1.200版本进行数据迁移为例介绍。不同版本操作可能有差异,具体操作详情以实际版本对应的操作指导为准。 CDM服务支持迁移的数据源可参考支持的数据源,数据源为Apache Hive时,不支持2.x版本,建议使用的版本为1.2.X、3.1.X,请执行搬迁前务必确认是否支持搬迁。 图1 Hive数据迁移示意
  • 数据迁移常用端口 表1 MRS数据迁移常用组件 组件 配置参数 默认端口 端口说明 HDFS dfs.namenode.rpc.port 9820 Hadoop 2.x和Hadoop 3.x版本。 迁移过程中,需要访问NameNode获取文件列表。 dfs.datanode.port 25009 迁移过程中,需要访问DataNode读取具体文件数据。 ZooKeeper clientPort 2181 ZooKeeper客户端连接ZooKeeper服务器。 Kerberos kdc_ports 21732 Kerberos服务认证,非Kerberos集群不涉及。 Hive hive.metastore.port 9083 Hive 2.x和Hive3.x版本。 MetaStore提供Thrift服务的端口。迁移过程中,需要访问该端口查询表元数据信息。 HBase hbase.master.port 16000 HBase1.x和HBase 2.x版本。 HMaster RPC端口。该端口用于HBase客户端连接到HMaster。 hbase.regionserver.port 16020 RS (RegoinServer) RPC端口。该端口用于HBase客户端连接到RegionServer。 Manager N/A 28443 FusionInsight/MRS Manager页面端口。 CDM迁移时候访问该地址获取集群配置。 N/A 20009 FusionInsight/MRS Manager CAS协议端口,用于登录认证。
  • 数据迁移网络方案说明 进行大数据迁移时,需要保证源端集群和目的端集群之间的网络互通,例如使用hadoop distcp命令跨集群复制数据时需要所有DataNode节点网络互通。根据不同的迁移场景需要使用不通的方式先打通两套集群之间网络连接。 客户线下数据中心迁移数据到华为云MRS集群,通过云专线服务为用户搭建本地数据中心与云上VPC之间的专属连接通道。可以使用华为云的云专线服务或使用第三方的云专线服务来连通华为云网络。 图1 线下数据中心迁移 客户在华为云上自建大数据集群(或老版本的MRS集群)需要迁移到华为云MRS集群,且在同一个Region区域和VPC子网,可以使自建集群和MRS集群使用相同安全组、VPC、子网网络,从而保证网络连通。 图2 线上同Region同VPC迁移 客户在华为云上自建大数据集群(或老版本的MRS集群)需要迁移到华为云MRS集群,且在同一个Region区域,但是使用不同VPC子网。需要使用VPC对等连接方式配置网络连通。 图3 线上同Region不同VPC迁移 客户在华为云上自建大数据集群(或老版本的MRS集群)需要迁移到华为云MRS集权,但在不同Region区域,可以通过使用云连接构建跨区域VPC的网络连接。 图4 线上不同Region迁移
  • 操作步骤 准备数据,在GaussDB(DWS)集群中创建数据库和表: 登录GaussDB(DWS)管理控制台,单击DWS集群“操作”列的“登录”。 登录现有GaussDB(DWS)集群的默认数据库gaussdb,执行以下命令,创建数据库“dws_test”。 CREATE DATABASE dws_test; 连接到创建的新数据库,执行以下命令,创建表“dws_order”。 CREATE SCHEMA dws_data; CREATE TABLE dws_data.dws_order ( order_id VARCHAR, order_channel VARCHAR, order_time VARCHAR, cust_code VARCHAR, pay_amount DOUBLE PRECISION, real_pay DOUBLE PRECISION ); 执行以下命令插入数据到表“dws_order”中。 INSERT INTO dws_data.dws_order VALUES ('202306270001', 'webShop', '2023-06-27 10:00:00', 'CUST1', 1000, 1000); INSERT INTO dws_data.dws_order VALUES ('202306270002', 'webShop', '2023-06-27 11:00:00', 'CUST2', 5000, 5000); 查询表数据,验证数据是否插入。 SELECT * FROM dws_data.dws_order; 下载GaussDB(DWS)数据库JDBC驱动并上传到MRS集群。 登录GaussDB(DWS)管理控制台,单击左侧的“连接管理”,下载JDBC驱动,如下图所示: 解压,获取“gsjdbc200.jar”文件,并上传到MRS集群主Master节点,例如上传到“/tmp”目录下。 使用root用户登录MRS集群主Master节点,执行如下命令: cd {客户端安装目录} source bigdata_env kinit sparkuser (首次认证需要修改密码,未开启Kerberos认证,则无需执行kinit命令。) hdfs dfs -put /tmp/gsjdbc200.jar /tmp 在MRS Spark中创建数据源表,并访问DWS表: 登录Spark客户端节点,执行如下命令: cd 客户端安装目录 source ./bigdata_env kinit sparkuser spark-sql --master yarn 执行如下命令,添加驱动程序jar: add jar hdfs://hacluster/tmp/gsjdbc200.jar; 执行如下命令,在Spark中创建数据源表,访问DWS数据: CREATE TABLE IF NOT EXISTS spk_dws_order USING JDBC OPTIONS ( 'url'='jdbc:gaussdb://192.168.0.228:8000/dws_test', 'driver'='com.huawei.gauss200.jdbc.Driver', 'dbtable'='dws_data.dws_order', 'user'='dbadmin', 'password'='xxx'); 查询Spark表,验证显示的数据是否与DWS数据相同: SELECT * FROM spk_dws_order; 可以验证返回的数据与1中所示的数据相同。
  • 样例代码路径说明 表1 样例代码路径说明 样例代码项目 样例名称 样例语言 SparkJavaExample Spark Core程序 Java SparkScalaExample Spark Core程序 Scala SparkPyhtonExample Spark Core程序 Python SparkSQLJavaExample Spark SQL程序 Java SparkSQLScalaExample Spark SQL程序 Scala SparkSQLPythonExample Spark SQL程序 Python SparkThriftServerJavaExample 通过JDBC访问Spark SQL的程序 Java SparkThriftServerScalaExample 通过JDBC访问Spark SQL的程序 Scala SparkOnHbaseJavaExample-AvroSource Spark on HBase 程序-操作Avro格式数据 Java SparkOnHbaseScalaExample-AvroSource Spark on HBase 程序-操作Avro格式数据 Scala SparkOnHbasePythonExample-AvroSource Spark on HBase 程序-操作Avro格式数据 Python SparkOnHbaseJavaExample-HbaseSource Spark on HBase 程序-操作HBase数据源 Java SparkOnHbaseScalaExample-HbaseSource Spark on HBase 程序-操作HBase数据源 Scala SparkOnHbasePythonExample-HbaseSource Spark on HBase 程序-操作HBase数据源 Python SparkOnHbaseJavaExample-JavaHBaseBulkPutExample Spark on HBase 程序-BulkPut接口使用 Java SparkOnHbaseScalaExample-HBaseBulkPutExample Spark on HBase 程序-BulkPut接口使用 Scala SparkOnHbasePythonExample-HBaseBulkPutExample Spark on HBase 程序-BulkPut接口使用 Python SparkOnHbaseJavaExample-JavaHBaseBulkGetExample Spark on HBase 程序-BulkGet接口使用 Java SparkOnHbaseScalaExample-HBaseBulkGetExample Spark on HBase 程序-BulkGet接口使用 Scala SparkOnHbasePythonExample-HBaseBulkGetExample Spark on HBase 程序-BulkGet接口使用 Python SparkOnHbaseJavaExample-JavaHBaseBulkDeleteExample Spark on HBase 程序-BulkDelete接口使用 Java SparkOnHbaseScalaExample-HBaseBulkDeleteExample Spark on HBase 程序-BulkDelete接口使用 Scala SparkOnHbasePythonExample-HBaseBulkDeleteExample Spark on HBase 程序-BulkDelete接口使用 Python SparkOnHbaseJavaExample-JavaHBaseBulkLoadExample Spark on HBase 程序-BulkLoad接口使用 Java SparkOnHbaseScalaExample-HBaseBulkLoadExample Spark on HBase 程序-BulkLoad接口使用 Scala SparkOnHbasePythonExample-HBaseBulkLoadExample Spark on HBase 程序-BulkLoad接口使用 Python SparkOnHbaseJavaExample-JavaHBaseForEachPartitionExample Spark on HBase 程序-foreachPartition接口使用 Java SparkOnHbaseScalaExample-HBaseForEachPartitionExample Spark on HBase 程序-foreachPartition接口使用 Scala SparkOnHbasePythonExample-HBaseForEachPartitionExample Spark on HBase 程序-foreachPartition接口使用 Python SparkOnHbaseJavaExample-JavaHBaseDistributedScanExample Spark on HBase 程序-分布式Scan HBase表 Java SparkOnHbaseScalaExample-HBaseDistributedScanExample Spark on HBase 程序-分布式Scan HBase表 Scala SparkOnHbasePythonExample-HBaseDistributedScanExample Spark on HBase 程序-分布式Scan HBase表 Python SparkOnHbaseJavaExample-JavaHBaseMapPartitionExample Spark on HBase 程序-mapPartitions接口使用 Java SparkOnHbaseScalaExample-HBaseMapPartitionExample Spark on HBase 程序-mapPartitions接口使用 Scala SparkOnHbasePythonExample-HBaseMapPartitionExample Spark on HBase 程序-mapPartitions接口使用 Python SparkOnHbaseJavaExample-JavaHBaseStreamingBulkPutExample Spark on HBase 程序-SparkStreaming批量写入HBase表 Java SparkOnHbaseScalaExample-HBaseStreamingBulkPutExample Spark on HBase 程序-SparkStreaming批量写入HBase表 Scala SparkOnHbasePythonExample-HBaseStreamingBulkPutExample Spark on HBase 程序-SparkStreaming批量写入HBase表 Python SparkHbasetoHbaseJavaExample 从HBase读取数据再写入HBase Java SparkHbasetoHbaseScalaExample 从HBase读取数据再写入HBase Scala SparkHbasetoHbasePythonExample 从HBase读取数据再写入HBase Python SparkHivetoHbaseJavaExample 从Hive读取数据再写入HBase Java SparkHivetoHbaseScalaExample 从Hive读取数据再写入HBase Scala SparkHivetoHbasePythonExample 从Hive读取数据再写入HBase Python SparkStreamingKafka010JavaExample Spark Streaming对接Kafka0-10程序 Java SparkStreamingKafka010ScalaExample Spark Streaming对接Kafka0-10程序 Scala SparkStructuredStreamingJavaExample Structured Streaming程序 Java SparkStructuredStreamingScalaExample Structured Streaming程序 Scala SparkStructuredStreamingPythonExample Structured Streaming程序 Python StructuredStreamingADScalaExample Structured Streaming流流Join Scala StructuredStreamingStateScalaExample Structured Streaming 状态操作 Scala SparkOnHudiJavaExample 使用Spark执行Hudi基本操作 Java SparkOnHudiPythonExample 使用Spark执行Hudi基本操作 Python SparkOnHudiScalaExample 使用Spark执行Hudi基本操作 Scala
  • 开发流程 工作流配置文件“workflow.xml”(“coordinator.xml”是对工作流进行调度,“bundle.xml”是对一组coordinator进行管理)与“job.properties”。 如果有实现代码,需要开发对应的jar包,例如Java Action;如果是Hive,则需要开发SQL文件。 上传配置文件与jar包(包括依赖的jar包)到HDFS,上传的路径取决于workflow.xml中的oozie.wf.application.path配置的路径。 提供三种方式对工作流进行操作,详情请参见Oozie应用开发常见问题。 Shell命令 Java API Hue Oozie客户端提供了比较完整的examples示例供用户参考,包括各种类型的Action,以及Coordinator以及Bundle的使用。以客户端安装目录为“/opt/client”为例,examples具体目录为“/opt/client/Oozie/oozie-client-*/examples”。 如下通过一个Mapreduce工作流的示例演示如何配置文件,并通过Shell命令调用。
  • 在本地Windows环境中调测HDFS程序 在开发环境中(例如IntelliJ IDEA中),分别选中以下两个工程运行程序: 选中HdfsExample.java,右键工程,选择“Run 'HdfsExample.main()'”运行应用工程。 选中ColocationExample.java,右键工程,选择“Run 'ColocationExample.main()'”运行应用工程。 在HDFS任务运行过程中禁止重启HDFS服务,否则可能会导致任务失败。 在运行Colocation工程时,HDFS的配置项fs.defaultFS不能配置为viewfs://ClusterX。
  • 查看调测结果 查看运行结果获取应用运行情况 HdfsExample Windows样例程序运行结果如下所示。 ... 1308 [main] INFO org.apache.hadoop.security.UserGroupInformation - Login successful for user hdfsDevelop using keytab file 1308 [main] INFO com.huawei.hadoop.security.LoginUtil - Login success!!!!!!!!!!!!!! 2040 [main] WARN org.apache.hadoop.hdfs.shortcircuit.DomainSocketFactory - The short-circuit local reads feature cannot be used because UNIX Domain sockets are not available on Windows. 3006 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to create path /user/hdfs-examples 3131 [main] WARN org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 3598 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to write. 4408 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to append. 5015 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - result is : hi, I am bigdata. It is successful if you can see me.I append this content. 5015 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to read. 5077 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to delete the file /user/hdfs-examples\test.txt 5186 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to delete path /user/hdfs-examples 5311 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to create path /user/hdfs-examples/hdfs_example_0 5311 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to create path /user/hdfs-examples/hdfs_example_1 5669 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to write. 5669 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to write. 7258 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to append. 7741 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to append. 7896 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - result is : hi, I am bigdata. It is successful if you can see me.I append this content. 7896 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to read. 7959 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to delete the file /user/hdfs-examples/hdfs_example_1\test.txt 8068 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to delete path /user/hdfs-examples/hdfs_example_1 8364 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - result is : hi, I am bigdata. It is successful if you can see me.I append this content. 8364 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to read. 8426 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to delete the file /user/hdfs-examples/hdfs_example_0\test.txt 8535 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to delete path /user/hdfs-examples/hdfs_example_0 ... 在Windows环境运行样例代码时可能会出现下面的异常,但是不影响业务: java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries. ColocationExample Windows样例程序运行结果如下所示。 ... 945 [main] INFO org.apache.hadoop.security.UserGroupInformation - Login successful for user hdfsDeveloper using keytab file user.keytab 945 [main] INFO com.huawei.hadoop.security.LoginUtil - Login success!!!!!!!!!!!!!! 945 [main] INFO com.huawei.hadoop.security.LoginUtil - JaasConfiguration loginContextName=Client principal=hdfsDeveloper useTicketCache=false keytabFile=XXX\sample_project\src\hdfs-example-security\conf\user.keytab 946 [main] INFO com.huawei.hadoop.security.KerberosUtil - Get default realm successfully, the realm is : HADOOP.COM ... Create Group has finished. Put file is running... Put file has finished. Delete file is running... Delete file has finished. Delete Group is running... Delete Group has finished. 4946 [main-EventThread] INFO org.apache.zookeeper.ClientCnxn - EventThread shut down for connection: 0x440751cb41a4d415 4946 [main] INFO org.apache.zookeeper.ZooKeeper - Connection: 0x440751cb41a4d415 closed ... 查看HDFS日志获取应用运行情况 您可以查看HDFS的NameNode日志了解应用运行情况,并根据日志信息调整应用程序。
  • 代码样例 以下代码片段在com.huawei.bigdata.hbase.examples包的“HBaseSample”类的testSingleColumnValueFilter方法中。 public void testSingleColumnValueFilter() { LOG.info("Entering testSingleColumnValueFilter."); Table table = null; ResultScanner rScanner = null; try { table = conn.getTable(tableName); Scan scan = new Scan(); scan.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name")); // Set the filter criteria. SingleColumnValueFilter filter = new SingleColumnValueFilter( Bytes.toBytes("info"), Bytes.toBytes("name"), CompareOperator.EQUAL, Bytes.toBytes("Xu Bing")); scan.setFilter(filter); // Submit a scan request. rScanner = table.getScanner(scan); // Print query results. for (Result r = rScanner.next(); r != null; r = rScanner.next()) { for (Cell cell : r.rawCells()) { LOG.info("{}:{},{},{}", Bytes.toString(CellUtil.cloneRow(cell)), Bytes.toString(CellUtil.cloneFamily(cell)), Bytes.toString(CellUtil.cloneQualifier(cell)), Bytes.toString(CellUtil.cloneValue(cell))); } } LOG.info("Single column value filter successfully."); } catch (IOException e) { LOG.error("Single column value filter failed " ,e); } finally { if (rScanner != null) { // Close the scanner object. rScanner.close(); } if (table != null) { try { // Close the HTable object. table.close(); } catch (IOException e) { LOG.error("Close table failed " ,e); } } } LOG.info("Exiting testSingleColumnValueFilter."); }
  • 注意事项 当前二级索引不支持使用SubstringComparator类定义的对象作为Filter的比较器。 例如,如下示例中的用法当前不支持: Scan scan = new Scan(); filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL); filterList.addFilter(new SingleColumnValueFilter(Bytes .toBytes(columnFamily), Bytes.toBytes(qualifier), CompareOperator.EQUAL, new SubstringComparator(substring))); scan.setFilter(filterList);
  • 数据规划 将cluster2集群的所有Zookeeper节点和HBase节点的IP和主机名配置到cluster1集群的客户端节点的“/etc/hosts”文件中。 分别将cluster1和cluster2集群Spark2x客户端conf下的hbase-site.xml文件放到“/opt/example/A”,“/opt/example/B”两个目录下。 用spark-submit提交命令: spark-submit --master yarn --deploy-mode client --files /opt/example/B/hbase-site.xml --keytab /opt/FIclient/user.keytab --principal sparkuser --class com.huawei.spark.examples.SparkOnMultiHbase /opt/example/SparkOnMultiHbase-1.0.jar
  • 参数解释 “coordinator.xml”中包含的各参数及其含义,请参见表1。 表1 参数含义 参数 含义 frequency 流程定时执行的时间间隔 start 定时流程任务启动时间 end 定时流程任务终止时间 workflowAppUri Workflow流程任务在HDFS上的存放路径 resourceManager MapReduce ResourceManager地址 queueName 任务处理时使用的Mapreduce队列名 nameNode HDFS NameNode地址 “${变量名}”表示:该值来自job.properties所定义。 例如:${nameNode}表示的就是“hdfs://hacluster”。(可参见job.properties)
  • 提交命令 假设用例代码打包后的jar包名为spark-hbaseContext-test-1.0.jar,并将jar包放在客户端“$SPARK_HOME”目录下,以下命令均在“$SPARK_HOME”目录执行,Java接口对应的类名前有Java字样,请参考具体样例代码进行书写。 yarn-client模式: java/scala版本(类名等请与实际代码保持一致,此处仅为示例) bin/spark-submit --master yarn --deploy-mode client --class com.huawei.bigdata.spark.examples.hbasecontext.JavaHBaseBulkLoadExample SparkOnHbaseJavaExample.jar /tmp/hfile bulkload-table-test python版本(文件名等请与实际保持一致,此处仅为示例),假设对应的Java代码打包后包名为SparkOnHbaseJavaExample.jar,且放在当前提交目录。 bin/spark-submit --master yarn --deploy-mode client --jars SparkOnHbaseJavaExample.jar HBaseBulkLoadExample.py /tmp/hfile bulkload-table-test yarn-cluster模式: java/scala版本(类名等请与实际代码保持一致,此处仅为示例) bin/spark-submit --master yarn --deploy-mode cluster --class com.huawei.bigdata.spark.examples.hbasecontext.JavaHBaseBulkLoadExample --files /opt/user.keytab,/opt/krb5.conf SparkOnHbaseJavaExample.jar /tmp/hfile bulkload-table-test python版本(文件名等请与实际保持一致,此处仅为示例),假设对应的Java代码打包后包名为SparkOnHbaseJavaExample.jar,且放在当前提交目录。 bin/spark-submit --master yarn --deploy-mode cluster --files /opt/user.keytab,/opt/krb5.conf --jars SparkOnHbaseJavaExample.jar HBaseBulkLoadExample.py /tmp/hfile bulkload-table-test
  • 打包项目 通过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”。
共100000条