Spark On MaxCompute如何访问Phonix数据

简介: 如何使用Spark On MaxCompute连接Phonix,将Hbase的数据写入到MaxCompute的对应表中,目前没有对应的案例,为了满足用户的需求。本文主要讲解使用Spark连接Phonix访问Hbase的数据再写入到MaxCompute方案实践。该方案的验证是使用hbase1.1对应Phonix为4.12.0。本文从阿里云Hbase版本的选择、确认VPC、vswitchID、设置白名单和访问方式,Phonix4.12.0的客户端安装,在客户端实现Phonix表的创建和写入,Spark代码在本地IDEA的编写以及pom文件以及vpcList的配置,打包上传jar包并进行冒烟测试。

一、购买Hbase1.1并设置对应资源

1.1购买hbase

hbase主要版本为2.0与1.1,这边选择对应hbase对应的版本为1.1
Hbase与Hbase2.0版本的区别
HBase1.1版本
1.1版本基于HBase社区1.1.2版本开发。
HBase2.0版本
2.0版本是基于社区2018年发布的HBase2.0.0版本开发的全新版本。同样,在此基础上,做了大量的改进和优化,吸收了众多阿里内部成功经验,比社区HBase版本具有更好的稳定性和性能。
1600152836102-e55b53ac-380f-468f-8abb-d858bd02f6d8.png

1.2确认VPC,vsWitchID

确保测试联通性的可以方便可行,该hbase的VPCId,vsWitchID尽量与购买的独享集成资源组的为一致的,独享集成资源的文档可以参考https://help.aliyun.com/document_detail/137838.html
1600152882272-d5f5849e-b0b8-4485-bcb3-c74fe4ff3169.png

1.3设置hbase白名单,其中DataWorks白名单如下,个人ECS也可添加

image.png
根据文档链接选择对应的DataWorks的region下的白名单进行添加https://help.aliyun.com/document_detail/137792.html
1600153040149-a1350bfb-febc-43cd-bd8b-5c1a7b0a2e03.png

1.4查看hbase对应的版本和访问地址

打开数据库链接的按钮,可以查看到Hbase的主版本以及Hbase的专有网络访问地址,以及是否开通公网访问的方式进行连接。

1600152748791-1a0c3c5d-80a8-4296-9210-90d459d80480.png

二、安装Phonix客户端,并创建表和插入数据

2.1安装客户端

根据hbase的版本为1.1选择Phonix的版本为4.12.0根据文档https://help.aliyun.com/document_detail/53600.html 下载对应的客户端文件ali-phoenix-4.12.0-AliHBase-1.1-0.9.tar.gz
登陆客户端执行命令

./bin/sqlline.py 172.16.0.13,172.16.0.15,172.16.0.12:2181

1600077441347-fde10ae4-91d0-4ca3-99d5-5fd89a75be6b.png
创建表:

CREATE TABLE IF NOT EXISTS users_phonix
(id       INT   ,username STRING,password STRING
) ;

插入数据:

UPSERT INTO users (id, username, password) VALUES (1, 'admin', 'Letmein');

2.2查看是否创建和插入成功

在客户端执行命令,查看当前表与数据是否上传成功

select * from users;

1600078146386-cbadedf0-702a-4e3b-9ff1-2176cb85bfcd.png

三、编写对应代码逻辑

3.1编写代码逻辑

在IDEA按照对应得Pom文件进行配置本地得开发环境,将代码涉及到得配置信息填写完整,进行编写测试,这里可以先使用Hbase得公网访问链接进行测试,代码逻辑验证成功后可调整配置参数,具体代码如下


package com.git.phonix
import org.apache.hadoop.conf.Configuration
import org.apache.spark.sql.SparkSession
import org.apache.phoenix.spark._
/*** 本实例适用于Phoenix 4.x版本*/
object SparkOnPhoenix4xSparkSession {def main(args: Array[String]): Unit = {//HBase集群的ZK链接地址。//格式为:xxx-002.hbase.rds.aliyuncs.com,xxx-001.hbase.rds.aliyuncs.com,xxx-003.hbase.rds.aliyuncs.com:2181val zkAddress = args(0)//Phoenix侧的表名,需要在Phoenix侧提前创建。Phoenix表创建可以参考:https://help.aliyun.com/document_detail/53716.html?spm=a2c4g.11186623.4.2.4e961ff0lRqHUWval phoenixTableName = args(1)//Spark侧的表名。val ODPSTableName = args(2)val sparkSession = SparkSession.builder().appName("SparkSQL-on-MaxCompute").config("spark.sql.broadcastTimeout", 20 * 60).config("spark.sql.crossJoin.enabled", true).config("odps.exec.dynamic.partition.mode", "nonstrict")//.config("spark.master", "local[4]") // 需设置spark.master为local[N]才能直接运行,N为并发数.config("spark.hadoop.odps.project.name", "***").config("spark.hadoop.odps.access.id", "***").config("spark.hadoop.odps.access.key", "***")//.config("spark.hadoop.odps.end.point", "http://service.cn.maxcompute.aliyun.com/api").config("spark.hadoop.odps.end.point", "http://service.cn-beijing.maxcompute.aliyun-inc.com/api").config("spark.sql.catalogImplementation", "odps").getOrCreate()//第一种插入方式var df = sparkSession.read.format("org.apache.phoenix.spark").option("table", phoenixTableName).option("zkUrl",zkAddress).load()df.show()df.write.mode("overwrite").insertInto(ODPSTableName)}
}

3.2对应Pom文件

pom文件中分为Spark依赖,与ali-phoenix-spark相关的依赖,由于涉及到ODPS的jar包,会在集群中引起jar冲突,所以要将ODPS的包排除掉

<?xml version="1.0" encoding="UTF-8"?>
<!--Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License. See accompanying LICENSE file.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><properties><spark.version>2.3.0</spark.version><cupid.sdk.version>3.3.8-public</cupid.sdk.version><scala.version>2.11.8</scala.version><scala.binary.version>2.11</scala.binary.version><phoenix.version>4.12.0-HBase-1.1</phoenix.version></properties><groupId>com.aliyun.odps</groupId><artifactId>Spark-Phonix</artifactId><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><dependencies><dependency><groupId>org.jpmml</groupId><artifactId>pmml-model</artifactId><version>1.3.8</version></dependency><dependency><groupId>org.jpmml</groupId><artifactId>pmml-evaluator</artifactId><version>1.3.10</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_${scala.binary.version}</artifactId><version>${spark.version}</version><scope>provided</scope><exclusions><exclusion><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId></exclusion><exclusion><groupId>org.scala-lang</groupId><artifactId>scalap</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-sql_${scala.binary.version}</artifactId><version>${spark.version}</version><scope>provided</scope></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-mllib_${scala.binary.version}</artifactId><version>${spark.version}</version><scope>provided</scope></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-streaming_${scala.binary.version}</artifactId><version>${spark.version}</version><scope>provided</scope></dependency><dependency><groupId>com.aliyun.odps</groupId><artifactId>cupid-sdk</artifactId><version>${cupid.sdk.version}</version><scope>provided</scope></dependency><dependency><groupId>com.aliyun.phoenix</groupId><artifactId>ali-phoenix-core</artifactId><version>4.12.0-AliHBase-1.1-0.8</version><exclusions><exclusion><groupId>com.aliyun.odps</groupId><artifactId>odps-sdk-mapred</artifactId></exclusion><exclusion><groupId>com.aliyun.odps</groupId><artifactId>odps-sdk-commons</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.aliyun.phoenix</groupId><artifactId>ali-phoenix-spark</artifactId><version>4.12.0-AliHBase-1.1-0.8</version><exclusions><exclusion><groupId>com.aliyun.phoenix</groupId><artifactId>ali-phoenix-core</artifactId></exclusion></exclusions></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><minimizeJar>false</minimizeJar><shadedArtifactAttached>true</shadedArtifactAttached><artifactSet><includes><!-- Include here the dependencies youwant to be packed in your fat jar --><include>*:*</include></includes></artifactSet><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude><exclude>**/log4j.properties</exclude></excludes></filter></filters><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>reference.conf</resource></transformer><transformerimplementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>META-INF/services/org.apache.spark.sql.sources.DataSourceRegister</resource></transformer></transformers></configuration></execution></executions></plugin><plugin><groupId>net.alchim31.maven</groupId><artifactId>scala-maven-plugin</artifactId><version>3.3.2</version><executions><execution><id>scala-compile-first</id><phase>process-resources</phase><goals><goal>compile</goal></goals></execution><execution><id>scala-test-compile-first</id><phase>process-test-resources</phase><goals><goal>testCompile</goal></goals></execution></executions></plugin></plugins></build>
</project>

四、打包上传到DataWorks进行冒烟测试

4.1创建要传入的MaxCompute表

CREATE TABLE IF NOT EXISTS users_phonix
(id       INT   ,username STRING,password STRING
) ;

4.2打包上传到MaxCompute

在IDEA打包要打成shaded包,将所有的依赖包,打入jar包中,由于DatadWork界面方式上传jar包有50M的限制,因此采用MaxCompute客户端进行jar包
1600073394094-678da37c-b504-432b-a430-a022d302bfec.png

4.3选择对应的project环境,查看上传资源,并点击添加到数据开发

进入DataWorks界面选择左侧资源图标,选择对应的环境位开发换进,输入删除文件时的文件名称进行搜索,列表中展示该资源已经上传成,点击提交到数据开发

1600073680606-96fb9057-f274-4afa-a98c-b2c4d94c2c33.png点击提交按钮

1600073719127-33ab00de-0a81-4b3c-a76f-24cadc8e0176.png

4.4配置对应的vpcList参数并提交任务测试

其中的配置vpcList文件的配置信息如下,可具体根据个人hbase的链接,进行配置

{"regionId":"cn-beijing","vpcs":[{"vpcId":"vpc-2ze7cqx2bqodp9ri1vvvk","zones":[{"urls":[{"domain":"172.16.0.12","port":2181},{"domain":"172.16.0.13","port":2181},{"domain":"172.16.0.15","port":2181},{"domain":"172.16.0.14","port":2181},{"domain":"172.16.0.12","port":16000},{"domain":"172.16.0.13","port":16000},{"domain":"172.16.0.15","port":16000},{"domain":"172.16.0.14","port":16000},{"domain":"172.16.0.12","port":16020},{"domain":"172.16.0.13","port":16020},{"domain":"172.16.0.15","port":16020},{"domain":"172.16.0.14","port":16020}]}]}]
}

Spark任务提交任务的配置参数,主类,以及对应的参数
该参数主要为3个参数第一个为Phonix的链接,第二个为Phonix的表名称,第三个为传入的MaxCompute表
name.png

点击冒烟测试按钮,可以看到任务执行成功
1600071547065-f1b1ff1e-8460-4bfc-9e42-7dc1e30f9d0f.png
在临时查询节点中执行查询语句,可以得到数据已经写入MaxCompute的表中
1600756783637-33baf55a-e314-4370-83f8-a97180679bfa.png

总结:

使用Spark on MaxCompute访问Phonix的数据,并将数据写入到MaxCompute的表中经过实践,该方案时可行的。但在实践的时有几点注意事项:
1.结合实际使用情况选择对应的Hbase以及Phonix版本,对应的版本一致,并且所使用的客户端,以及代码依赖都会有所改变。
2.使用公网在IEAD进行本地测试,要注意Hbase白名单,不仅要设置DataWorks的白名单,还需将自己本地的地址加入到白名单中。
3.代码打包时需要将pom中的依赖关系进行梳理,避免ODPS所存在的包在对应的依赖中,进而引起jar包冲突,并且打包时打成shaded包,避免缺失遗漏对应的依赖。

 

 

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

码住!Flink Contributor 速成指南

简介&#xff1a; 不管初衷是什么&#xff0c;Flink 都非常欢迎大家一起建设和完善社区。在开始具体的贡献步骤之前&#xff0c;我们先简要介绍一下参与贡献的几种途径&#xff0c;以及 Clarify 关于开源贡献的一些固有印象。 作者&#xff1a;伍翀&#xff08;云邪&#xff0…

手机访问真机调试显示: Cannot add property markTimeline, object is not extensible 怎么解决

实战 \SpringBootVue3 项目实战&#xff0c;打造企业级在线办公系统 3-2 用户登陆系统的流程说明 手机访问真机调试显示&#xff1a; Cannot add property markTimeline, object is not extensible 解决方案&#xff1a; 手机开热点让电脑连接&#xff0c;windows防火墙关闭…

浅谈MaxCompute资源规划管理及评估

简介&#xff1a; 本文主要介绍如何进行MaxCompute存储资源和计算资源的评估及规划管理。 一、MaxCompute资源规划背景介绍 MaxCompute资源主要有两类&#xff1a;存储资源、计算资源(包含cpu和内存)。存储资源用于存储MaxCompute的库表数据&#xff0c;计算资源用于运行sql、…

如何无缝迁移 SpringCloud/Dubbo 应用到 Serverless 架构

作者 | 行松 阿里巴巴云原生团队 本文整理自《Serverless 技术公开课》&#xff0c;“Serverless”公众号后台回复“入门”&#xff0c;即可获取系列文章 PPT。 背景 通过前面几节课程的学习&#xff0c;相信大家对于 SAE 平台已经有了一定的了解&#xff0c;SAE 基于 IaaS 层…

从程序媛到启明星辰集团云安全总经理,郭春梅博士揭秘云时代安全攻防之道...

从无序中寻找踪迹&#xff0c;从眼前事探索未来。2021 年正值黄金十年新开端&#xff0c;CSDN 以中立技术社区专业、客观的角度&#xff0c;深度探讨中国前沿 IT 技术演进&#xff0c;推出年度重磅企划栏目——「拟合」&#xff0c;通过对话企业技术高管大咖&#xff0c;跟踪报…

汽车仿真效率30%↑、药物研发效率20倍↑,阿里云获HPC CHINA 2020“最佳行业应用奖”

简介&#xff1a; 近日&#xff0c;HPC CHINA 2020 大会以线上线下——双线联动的形式同步召开&#xff0c;近 300 位重量级高性能计算&#xff08;超算&#xff09;领域专家学者与业界精英人士、CCF 高专委委员汇聚郑州&#xff0c;共同探索高性能计算的发展。 在本届 HPC CH…

linux 安装mysql5.7.25_生产版本

文章目录一、配置安装1. 部署总览2. 下载软件3. 解压重命名4. 创建组5. 安装数据库6. 配置my.cnf7. 添加开机启动8. 配置数据木库9. 启动mysql10. 登录修改密码11. 允许远程连接一、配置安装 1. 部署总览 服务器端口说明192.168.52.1223306master 2. 下载软件 mkdir /app cd…

山石网科发布重磅容器安全产品“山石云铠”,云安全版图再下一城

编辑 | 宋 慧 出品 | CSDN云计算 5月18日&#xff0c;山石网科正式发布了云安全的重磅新品——山石云铠。至此&#xff0c;山石网科云计算安全版图补全“容器安全”板块&#xff0c;已完成目前主流虚拟化技术及云服务场景网络安全产品的全面覆盖。 虽然是非常重要的产品发布&…

平台式可复用的应用集成能力,助您敏捷、高效的完成企业数字化转型

简介&#xff1a; 企业数字化转型往往是一个长期持续的过程&#xff0c;产品变革和技术迭代也在加速演进&#xff0c;连接性是数字化转型的关键推动因素&#xff0c;甚至将决定成败。为了应对普遍的集成要求&#xff0c;企业需要新一代更敏捷的集成能力框架&#xff0c;基于高效…

阿里云DNS 新增云上线路的智能解析功能

简介&#xff1a; 企业在云上部署单元化架构或内部服务链路时&#xff0c;需要考虑让数据&#xff08;单元&#xff09;离用户更近&#xff0c;避免跨单元获取数据&#xff0c;以此来满足自身低延时的诉求。阿里云DNS 新增基于云上链路的调度功能&#xff0c;进一步优化DNS智能…

进击的数据中台,企业数字化转型的新引擎

经历过“追捧”和“质疑”等种种考验后&#xff0c;当前&#xff0c;数据中台已经走到验证其价值的关键路口。 数据中台是企业数字化转型新引擎 在人工智能、大数据等技术发展和企业数字化转型加速的双重驱动下&#xff0c;2019年&#xff0c;数据中台在众多赛道中脱颖而出&a…

关于低代码真实技术趋势,听低代码巨头 Mendix 怎么说

作者 | 宋慧 出品 | CSDN云计算 在 2021年初正式宣布进入中国市场 之后&#xff0c;Mendix 在近日向媒体重点披露了关于低代码的技术方法论&#xff0c;以及近四个月在中国市场的进展。 Mendix 的低代码技术方法论 对于低代码常被讨论的模型驱动部分&#xff0c;Mendix 希望做…

架构设计的本质

简介&#xff1a; 实际上架构只是系统设计里面的一个重要环节&#xff0c;除了架构还包含了商业诉求&#xff0c;业务建模&#xff0c;系统分析&#xff0c;系统设计等重要领域。本文尝试从更高视角重新审视架构设计的工作&#xff0c;把架构设计的上升到系统设计的立体空间去探…

ios 蓝牙命令发送_实战恢复cisco 2950交换机的IOS

本来想用两台思科交换机做实验的&#xff0c;可是通过console口进入其中一台交换机后却发现这个台交换机的IOS文件丢失了。本来正常进入交换机后应该是首先进入到用户模式的&#xff0c;而且提示符应该是“>”&#xff0c;而现在提示符却成了“&#xff1a;”&#xff0c;如…

还在担心无代码是否威胁程序员饭碗?

作者 | 伍杏玲头图 | 下载于ICphoto出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;近几年来&#xff0c;“低代码/无代码”概念广为热议。然而低代码并不是新鲜词&#xff0c;实则是IT 界对简化代码开发的需求促使。早在 1982 年&#xff0c;詹姆斯马丁在《…

过Serverless技术降低微服务应用资源成本

前言 在大型分布式IT架构领域&#xff0c;微服务是一项必不可少的技术。从本质上来讲&#xff0c;微服务是一种架构风格&#xff0c;将一个大型的系统拆分为多个拥有独立生命周期的应用&#xff0c;应用之间采用轻量级的通信机制进行通信。这些应用都是围绕具体业务进行构建&a…

ethercat 网卡不兼容_曾经的洋垃圾万兆网卡无人问津因为一张转接卡如今身价暴涨数十倍...

今天老水要跟大家介绍的是最近非常火爆的ocp万兆网卡&#xff0c;为啥非常火爆呢&#xff1f;因为他的价格非常的低廉&#xff0c;性能非常的强劲&#xff0c;最开始的时候售价只要8块钱一张&#xff0c;但是却无人问津&#xff0c;这又是为啥&#xff1f;ocp网卡视频&#xff…

在淘宝,我们是这样衡量代码质量的

简介&#xff1a; ![img](https://img.alicdn.com/tfs/TB1ZTW4VEY1gK0jSZFMXXaWcVXa-2304-1194.png) **越高级别的程序员往往越看重代码质量。** 本篇文章主要聊一下在团队开发过程中&#xff0c;如何做到代码质量的管控与提升。首先需要有一套规范&#xff0c;定义什么是好的代…

SpringBoot项目在logback.xml中读取application.properties中配置的日志路径

文章目录一、问题二、原因三、LOGBACK.XML中读取配置中的日志路径方案3.1. 方案一3.2. 方案二一、问题 在SpringBoot项目&#xff0c;使用logback.xml中配置日志的存储位置时&#xff0c;读取application.properties或application.yml中配置的路径&#xff0c;在logback.xml中…

Java知识全面总结:并发编程+JVM+设计模式+常用框架+....

本文整理的Java知识体系主要包括基础知识&#xff0c;工具&#xff0c;并发编程&#xff0c;数据结构与算法&#xff0c;数据库&#xff0c;JVM&#xff0c;架构设计&#xff0c;应用框架&#xff0c;中间件&#xff0c;微服务架构&#xff0c;分布式架构等内容。同时也有作为程…