玩转阿里云EMR三部曲-中级篇 集成自有服务

本文涉及的产品
EMR Serverless Spark 免费试用,1000 CU*H 有效期3个月
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 利用EMR引导操作可以使用自定义脚本安装任意自有服务和环境,隔离计算和生产资源,并在极致成本控制下最大化并发和可扩展性。完整的自定义设计可以满足任意自有服务构建的集成需要。

作者:邓力,entobit技术总监,八年大数据从业经历,由一代hadoop入坑,深耕云计算应用领域,由从事亚马逊EMR和阿里云EMR应用开发逐步转入大数据架构领域,对大数据生态及框架应用有深刻理解。

引言

笔者近几年工作以架构为主,本系列文章旨在从系统架构层面提供一定参考和帮助。
本文默认阅读文章的小伙伴们有MR/SPARK等基础,文中不再重复介绍相关知识。
本文为玩转阿里云EMR系列第二篇,第一篇文章为基础介绍和样例实战,可以查看[玩转阿里云EMR三部曲-入门篇]()

集成自有服务与EMR

从2016公测到最新的EMR版本,成本控制与集成服务一直是我们需要解决的难题。成本可以通过按量集群控制,按照需求启动合理规模的集群并按小时付费。于是自有服务集成是关键问题

自有服务

各公司或者组织内部提供API接口/调度响应及其他类型的服务

  • 集成场景
  • 资源隔离
  • 弹性扩展
  • 高并发
  • 低成本

资源隔离:离线计算使用的自有服务不能和产品线公用,否则导致高并发情况下生产线体验下降
弹性扩展:随着离线计算的规模对应伸缩
高并发:提供高并发访问支持
低成本:成本可以按小时计费,并且没有额外费用

架构分析

平台下自有solr集群,离线计算任务需要利用solr集群查询获取文本相似的内容,直接使用生产线集群会降低用户访问体验甚至导致生产环境不可用。

那么是否可以利用EMR集成自有solr集群?

EMR引导操作

在启动EMR集群前可以初始化用户自定义脚本,创建用户自有服务或者环境。详细参考引导操作

引导操作分为两种类型:

  • 自定义操作

用户完全自定义脚本类型,任意服务或者环境都可以指定安装

  • 运行条件

基于EMR官方提供的run-if.py按条件执行
技巧:

  • 自定义操作下可以基于节点类型并安装指定的应用和服务
  • 自定义脚本内文件可以使用OSS存放

集成方案

1.利用引导操作在EMR集群MASTER服务器安装solr服务
2.利用引导操作在EMR集群所有节点安装solr服务

其中1只对于MASTER节点有高配置需求,2对于所有节点有高配置要求。1成本更低,2并发更高。根据实际按需选择。
这里选择方案2
注:使用方案1时需要判断节点类型

实现细节

基于方案2,利用EMR按量需求操作如下:
1.修改集群模板配置,选择高配机型,建议使用16C64G实例。在集群模板高级设置中,添加引导操作并保存
image

2.编写installSolr.sh并上传OSS

downloadJar() {
  mkdir  /mnt/work
  osscmd --id=xxxx --key=yyyy -H oss-cn-beijing-internal.aliyuncs.com --replace=true downloadallobject oss://zzz/jar/ /mnt/work/
}

installENV() {
  cd /mnt/work/lib/
  tar -xzf solr.tar.gz
  cd solr/bin
  ./solr start -p 8983
}

main() {
  downloadJar
  installENV
}

main

3.复制solr服务打包为tar.gz文件并上传至对应步骤2中的OSS://zzz/jar/路径

cp -r solr targetDir/
cd targetDir/
tar -czf solr.tar.gz solr
osscmd put solr.tar.gz oss://zzz/jar/

4.编写spark任务调用solr接口数据并验证返回值
由于采用的方案2,每个集群节点都有solr服务,此时可以利用本机的节点查询, 核心代码部分

#! /usr/bin/python
import requst, sys
from pyspark import SparkContext
from pyspark import SparkConf
from pyspark.sql import SQLContext
...
def solrCaller(item):
  keyword=item['keyword']
  r=request.post('http://127.0.0.1:8983?q='+keyword)
  return r.text

if __name__ == "__main__":
    reload(sys)
    sys.setdefaultencoding('utf-8')
    conf = SparkConf().setAppName("solr spark with oss")
    conf = conf.set("spark.hadoop.fs.oss.impl", "com.aliyun.emr.fs.oss.OssFileSystem")
    sc = SparkContext(conf=conf)
    sqlContext = SQLContext(sc)
    indexRDD = sc.textFile("oss://xxx:yyy@zzz/data/")
    indexSQL = sqlContext.read.json(indexRDD)
    indexDF = sqlContext.sql("select keyword, id from indexSQL")
    indexDF.map(solrCaller).collect()

5.选用solr集成模板并执行作业流

更多思考

以上是使用过程中遇到的问题及解决方案,该方案还有提升空间,比如利用节点随机请求数据,可以进一步优化资源。

除次之外还可以利用引导操作安装各种环境,比如python依赖的分词包,mysql驱动等等。
如果集群无法满足并发需求,可以继续增加节点。包月集群可以使用弹性伸缩功能

总结:

利用EMR引导操作可以使用自定义脚本安装任意自有服务和环境,隔离计算和生产资源,并在极致成本控制下最大化并发和可扩展性。完整的自定义设计可以满足任意自有服务构建的集成需要。

欢迎对EMR及相关技术感兴趣的同学进钉钉群一起讨论 :)
image

相关实践学习
基于EMR Serverless StarRocks一键玩转世界杯
基于StarRocks构建极速统一OLAP平台
快速掌握阿里云 E-MapReduce
E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 本课程主要介绍阿里云 E-MapReduce 的使用方法。
相关文章
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
企业级API集成方案:基于阿里云函数计算调用DeepSeek全解析
DeepSeek R1 是一款先进的大规模深度学习模型,专为自然语言处理等复杂任务设计。它具备高效的架构、强大的泛化能力和优化的参数管理,适用于文本生成、智能问答、代码生成和数据分析等领域。阿里云平台提供了高性能计算资源、合规与数据安全、低延迟覆盖和成本效益等优势,支持用户便捷部署和调用 DeepSeek R1 模型,确保快速响应和稳定服务。通过阿里云百炼模型服务,用户可以轻松体验满血版 DeepSeek R1,并享受免费试用和灵活的API调用方式。
128 12
|
7天前
|
人工智能 自然语言处理 搜索推荐
阿里云 AI 搜索开放平台集成 DeepSeek 模型
阿里云 AI 搜索开放平台最新上线 DeepSeek -R1系列模型。
|
21天前
|
机器学习/深度学习 分布式计算 大数据
阿里云 EMR Serverless Spark 在微财机器学习场景下的应用
面对机器学习场景下的训练瓶颈,微财选择基于阿里云 EMR Serverless Spark 建立数据平台。通过 EMR Serverless Spark,微财突破了单机训练使用的数据规模瓶颈,大幅提升了训练效率,解决了存算分离架构下 Shuffle 稳定性和性能困扰,为智能风控等业务提供了强有力的技术支撑。
141 15
|
12天前
|
存储 分布式计算 物联网
美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台
美的楼宇科技基于阿里云 EMR Serverless Spark 建设 IoT 数据平台,实现了数据与 AI 技术的有效融合,解决了美的楼宇科技设备数据量庞大且持续增长、数据半结构化、数据价值缺乏深度挖掘的痛点问题。并结合 EMR Serverless StarRocks 搭建了 Lakehouse 平台,最终实现不同场景下整体性能提升50%以上,同时综合成本下降30%。
|
3天前
|
SQL 存储 OLAP
阿里云 EMR Serverless StarRocks3.x,极速统一的湖仓新范式
阿里云 EMR Serverless StarRocks3.x,极速统一的湖仓新范式
|
3天前
|
SQL 分布式计算 Serverless
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
|
2月前
|
SQL 弹性计算 分布式计算
阿里云 EMR 发布托管弹性伸缩功能,支持自动调整集群大小,最高降本60%
阿里云开源大数据平台 E-MapReduce 重磅推出托管弹性伸缩功能,基于 EMR 托管弹性伸缩功能,您可以指定集群的最小和最大计算限制,EMR 会持续对与集群上运行的工作负载相关的关键指标进行采样,自动调整集群大小,以获得最佳性能和资源利用率。
146 15
|
5月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
4月前
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
82 0
|
8月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
358 6