当前位置: 首页 > news >正文

使用 Hue 玩转 Amazon EMR(SparkSQL, Phoenix) 和 Amazon Redshift

现状

Apache Hue 是一个基于 Web 的交互式 SQL 助手,通过它可以帮助大数据从业人员(数仓工程师,数据分析师等)与数据仓库进行 SQL 交互。在 Amazon EMR 集群启动时,通过勾选 Hue 进行安装。在 Hue 启用以后,将原先需要登录主节点进行 SQL 编写及提交的工作转移到 web 前端,不仅方便统一管理日常开发需求,而且保证了集群的接入安全性。另一方面 Hue 自己独特的优势可以使用 SparkSQL 进行 Spark 任务的远程提交,相比于额外为 Amazon EMR 集群配置 Hive on Spark,或者使用代码进行 Livy 远程提交这两种方式而言,大大的提升了开发和运维效率。本文也介绍了如何通过 Hue 整合 Amazon Redshift 数仓, 以及远程提交 Phoenix 任务同 HBase 交互,将 Hue 打造为数据仓库的统一 SQL 访问平台。

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

方案架构总览

image.png

方案介绍

通过 Livy 提交 SparkSQL Job

执行引擎现状

首先,我们简单比对一下几种流行的执行引擎的现状:

  • 由于处理客户查询需要高磁盘 IO,Apache MapReduce 是最慢的查询执行引擎。
  • 在保持磁盘 IO 不变的情况下,Apache Tez 明显快于 Apache MapReduce。
  • Apache Spark 比没有 IO 阻塞的 Apache Tez 稍快,和Apache Tez 一样以 DAG 方式处理数据,Spark 更加通用,提供内存计算,实时流处理,机器学习等多种计算方式,适合迭代计算。

Apache Livy 简介

Apache Livy 是一项服务,可通过 REST API 与 Spark 集群轻松交互。此方案中的配置方式可将 Hue 页面编写的 SparkSQL 通过 Livy 接口提交到 EMR 集群。

EMR Hue 处理 SparkSQL 默认行为

当在 Hue 的面板上 Editor 选择 SparkSQL 并提交 SQL 任务时,我们根据 application_id((Executing on YARN cluster with App id application_1656071365605_0006))去 Resource Manager 控制台上查询到对应的 Application Type 是 Tez:

image.png

image.png

当我们打开 hue 的配置文件(/etc/hue/conf/hue.ini)看到[[[sql]]] 处配置如下图,interface 配置的是 hiveserver2 便知道了此时的 SparkSQL 走的仍是 hiveserver2,因此使用的是 Tez 引擎(EMR上的Hive执行引擎默认是Tez),这代表着并未真的使用 Spark 执行引擎在运行上述的 Query。

image.png

在 EMR Hue 中通过 Livy 提交 SparkSQL 任务

(1)修改 Hue 配置文件(/etc/hue/conf/hue.ini)中的执行引擎,并重启 Hue 服务

image.png

sudo systemctl restart hue.service
sudo systemctl status hue.service

重新提交 SparkSQL 任务后,看到该 Application 的 ApplicationType 已经为 SPARK。

image.png

生产场景中的性能调优:

上述 Application 通过 Spark 管理界面查看 Environment 细节:

image.png

看到 spark.driver.memory 和 spark.executor.memory 均设置为1G

image.png

这是因为 Hue 源码中直接将上述两个参数的值设定为1G:

https://github.com/cloudera/hue/blob/bd6324a79c2e6b6d002ddd6767b0e63883373320/desktop/libs/notebook/src/notebook/connectors/spark_shell.py

{"name": "driverMemory","nice_name": _("Driver Memory"),"help_text": _("Amount of memory to use for the driver process in GB. (Default: 1). "),"type": "jvm","is_yarn": False,"multiple": False,"defaultValue": '1G',"value": '1G',},
…
{"name": "executorMemory","nice_name": _("Executor Memory"),"help_text": _("Amount of memory to use per executor process in GB. (Default: 1)"),"type": "jvm","is_yarn": True,"multiple": False,"defaultValue": '1G',"value": '1G',}

如果用默认参数值容易在任务执行中触发 OOM 异常,导致任务运行失败,我们可选择通过以下方法进行调优:

cp /usr/lib/hue/desktop/libs/notebook/src/notebook/connectors/spark_shell.py /usr/lib/hue/desktop/libs/notebook/src/notebook/connectors/spark_shell.py.bak
sudo vi /usr/lib/hue/desktop/libs/notebook/src/notebook/connectors/spark_shell.py

将 ‘driverMemory’ 和 ‘executorMemory’ 的配置删除,重启 Hue 服务

sudo systemctl restart hue.service
sudo systemctl status hue.service

image.png

再次运行 SparkSQL,从 Environment 看到两个内存参数已经更新,和 /etc/spark/conf/spark-defaults.conf 内定义一致:

image.png

image.png

Hue 配置 Phoenix 提交 HBase 任务

Apache Phoenix 简介

Apache Phoenix 是一个开源的,大规模并行的关系数据库引擎,支持使用 Apache HBase 作为其后备存储的 OLTP for Hadoop。Phoenix 提供了一个 JDBC 驱动程序,该驱动程序隐藏了 noSQL 存储的复杂性,使用户能够创建,删除和更改 SQL 表,视图,索引和序列。

配置 Phoenix

(1)准备 Hue Python Virtual Environment

sudo /usr/lib/hue/build/env/bin/pip install phoenixdb

(2)修改 Hue 配置文件:

在 /etc/hue/conf/hue.ini的[notebook] [[interpreters]]部分加入:

[[[phoenix]]]
name=HBase Phoenix
interface=sqlalchemy
options='{"url": "phoenix:// ip-172-31-37-125.ap-southeast-1.compute.internal:8765/"}'

重启 Hue 服务

sudo systemctl restart hue.service
sudo systemctl status hue.service

(3) Hue 页面提交 Phoenix 任务:

Hue – Editor 部分因为配置文件的更新,出现了 HBase Phoenix 的选项, 创建和查询 Table :

image.png

CREATE TABLE user (id varchar PRIMARY KEY,name varchar,passwd varchar)
upsert into user(id, name, passwd) values('001', 'admin', 'admin')
select * from user

image.png

HBase 显示列名乱码修正

(1)当完成上述操作时,回到 HBase Shell 查看表内容,发现列名为乱码:

image.png

使用 Phoenix 命令行(/usr/lib/phoenix/bin/sqlline.py, 不透过Hue)创建表仍能重现该问题,且乱码不会在 Phoenix JDBC 连接中出现:

image.png

(2)在 Phoenix 创建表时最后加上 COLUMN_ENCODED_BYTES= 0可规避该问题:

CREATE TABLE user02 (id varchar PRIMARY KEY,name varchar,passwd varchar) COLUMN_ENCODED_BYTES= 0
upsert into user02(id, name, passwd) values('002', 'admin', 'admin')
select * from user02

HBase Shell 查看结果,列名已经显示正常:

image.png

Hue 连接 Redshift 提交任务

当数仓平台中涉及 Amazon EMR 和 Amazon Redshift 等多种服务时,通过 Hue 丰富的 Connectors 扩展种类,可以轻松实现统一交互的功能。

(1)准备 Hue Python Virtual Environment

cd /usr/lib/hue/
sudo ./build/env/bin/pip install sqlalchemy-redshift
sudo /usr/lib/hue/build/env/bin/pip2.7 install psycopg2-binary

(2)修改 Hue 配置文件:

在/etc/hue/conf/hue.ini的[notebook] [[interpreters]]部分加入:

[[[redshift]]]
name = Redshift
interface=sqlalchemyoptions='{"url": "redshift+psycopg2://username:password@host.amazonaws.com:5439/database"}'

重启 Hue 服务

sudo systemctl restart hue.service
sudo systemctl status hue.service

(3) Hue 页面提交 Redshift 任务:

Hue – Editor 部分因为配置文件的更新,出现了 Reshift 的选项:

image.png

提交 SQL 查询,轻松获取 Amazon Redshift 数仓数据:

image.png

总结

本文主要帮助使用 Amazon EMR 的用户,通过 Hue 实现统一数仓平台开发工具,一方面集中管理数仓 SQL 开发任务,另一方面为其它部门提供自主分析的平台,对数仓建设有一定的推动作用。

本篇作者

image.png

Sunny Fang Amazon 技术客户经理,主要支持金融,互联网行业客户的架构优化、成本管理、技术咨询等工作,并专注在大数据和容器方向的技术研究和实践。在加入 Amazon 之前,曾就职于 Citrix 和微软等科技公司,拥有8年虚拟化与公有云领域的架构优化和支持经验。

image.png

张尹 Amazon 技术客户经理,负责企业级客户的架构和成本优化、技术支持等工作。有多年的大数据架构设计,数仓建模等实战经验。在加入 Amazon 之前,长期负责头部电商大数据平台架构设计、数仓建模、运维等相关工作。

文章来源:https://dev.amazoncloud.cn/column/article/630b3f0176658473a3220015?sc_medium=regulartraffic&sc_campaign=crossplatform&sc_channel=CSDN

相关文章:

使用 Hue 玩转 Amazon EMR(SparkSQL, Phoenix) 和 Amazon Redshift

现状 Apache Hue 是一个基于 Web 的交互式 SQL 助手,通过它可以帮助大数据从业人员(数仓工程师,数据分析师等)与数据仓库进行 SQL 交互。在 Amazon EMR 集群启动时,通过勾选 Hue 进行安装。在 Hue 启用以后&#xff0…...

Unity中神秘的Transform和transform(小写)的关系

1.为什么Transform类是保护的不能通过new 来实例化对象,也没有静态函数,而Rotate()这种方法却属于它,该如何访问? Transform 类还是被保护的不允许用户修改! protected Transform(); 是一个受保护的构造函数,不能直接实例化 Transform 类。 2.为甚么transform可以访问Tr…...

【LeetCode-中等题】78. 子集

文章目录 题目方法一&#xff1a;动态规划方法二&#xff1a;递归加回溯(关键----startIndex) 题目 注意&#xff1a;这里的nums数组里面的元素是各不相同的&#xff0c;所以不存在去重操作 方法一&#xff1a;动态规划 public List<List<Integer>> subsets(int[]…...

学习设计模式之代理模式,但是宝可梦

前言 作者在准备秋招中&#xff0c;学习设计模式&#xff0c;做点小笔记&#xff0c;用宝可梦为场景举例&#xff0c;有错误欢迎指出。 代码同步更新到 github ,要是点个Star您就是我的神 目录 前言代理模式1.情景模拟1.1静态代理优点局限 1.2 动态代理 2.应用3.局限4.解决方…...

自学Python01-创建文件写入内容

此处省去安装和前言&#xff0c;需要两个东西 一个去下载安装python官方库 Welcome to Python.org 一个是编译器pycharm PyCharm 安装教程&#xff08;Windows&#xff09; | 菜鸟教程 PyCharm: the Python IDE for Professional Developers by JetBrains 第一节 练习print…...

Qt —UDP通信QUdpSocket 简介 +案例

1. UDP通信概述 UDP是无连接、不可靠、面向数据报&#xff08;datagram&#xff09;的协议&#xff0c;可以应用于对可靠性要求不高的场合。与TCP通信不同&#xff0c;UDP通信无需预先建立持久的socket连接&#xff0c;UDP每次发送数据报都需要指定目标地址和端口。 QUdpSocket…...

五大类注解和方法注解详解

五大类注解为Controller&#xff0c;Service&#xff0c;Repository&#xff0c;Configuration&#xff0c;Component,方法注解为Bean。 需要注意的是&#xff1a;Bean注解必须要在类注解修饰的类内才能正常使用。 一、与配置文件的关系 在spring原生项目中 如果你使用的spri…...

机器人中的数值优化(十)——线性共轭梯度法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…...

数据结构与算法之贪心动态规划

一&#xff1a;思考 1.某天早上公司领导找你解决一个问题&#xff0c;明天公司有N个同等级的会议需要使用同一个会议室&#xff0c;现在给你这个N个会议的开始和结束 时间&#xff0c;你怎么样安排才能使会议室最大利用&#xff1f;即安排最多场次的会议&#xff1f;电影的话 那…...

【网络编程】网络基础概念

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…...

连接虚拟机报错 Could not connect to ‘192.168.xxx.xxx‘ (port 22): Connection failed.

使用xshell连接虚拟机报错 Connecting to 192.168.204.129:22… Could not connect to ‘192.168.204.129’ (port 22): Connection failed. Type help’ to learn how to use Xshell prompt. 按网上的方法 是否能ping通内外网 ping www.baidu.com防火墙是否关闭 firewal…...

数学建模--Topsis评价方法的Python实现

目录 1.算法流程简介 2.算法核心代码 3.算法效果展示 1.算法流程简介 """ TOPSIS(综合评价方法):主要是根据根据各测评对象与理想目标的接近程度进行排序. 然后在现有研究对象中进行相对优劣评价。 其基本原理就是求解计算各评价对象与最优解和最劣解的距离…...

超越时间与人力的软件开发智慧:《人月神话》

目录 1、写在前面2、沟通&#xff01;沟通&#xff01;沟通&#xff01;3、“银弹论”4、“人月神话”不能成立的原因5、影响力6、图书推荐 1、写在前面 《人月神话》是由计算机科学家弗雷德里克布鲁克斯所著的一本经典著作&#xff0c;首次出版于1975年。这本书以一个个小故事…...

Java Stream 流对象(实用技巧)

目录 一、InputStream & OutputStream 1.1、InputStream 和 OutputStream 一般使用 1.2、特殊使用 1.2.1、如何表示文件读取完毕&#xff1f;&#xff08;DataInputStream&#xff09; 1.2.2、字符读取/文本数据读取&#xff08;Scanner&#xff09; 1.2.3、文件的随机…...

【用unity实现100个游戏之8】用Unity制作一个炸弹人游戏

文章目录 前言素材开始一、绘制地图二、玩家设置三、玩家移动四、玩家四方向动画运动切换 五、放置炸弹六、生成爆炸效果七、墙壁和可破坏障碍物的判断八、道具生成和效果九、玩家死亡十、简单的敌人AI十一、简单敌人AI十二、随机绘制地图十三、虚拟摇杆 最终效果待续源码完结 …...

简易版人脸识别qt opencv

1、配置文件.pro #------------------------------------------------- # # Project created by QtCreator 2023-09-05T19:00:36 # #-------------------------------------------------QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET 01_face TEMP…...

如何系统地学习 JavaScript?

前言 在学习JavaScript前需要先将Html和Css的相关知识点弄清楚&#xff0c;Js的很多操作是要结合Html和Css&#xff0c;下面我总结了Html、Css和Js的相关学习知识点供参考&#xff0c;希望对你有所帮助喔~ Html 文档学习 【HTML 】w3school教程 :https://www.w3school.com.…...

对称二叉树(Leetcode 101)

题目 101. 对称二叉树 思路 使用层序遍历&#xff0c;遍历当前层的节点时&#xff0c;如该节点的左&#xff08;右&#xff09;孩子为空&#xff0c;在list中添加null&#xff0c;否则加入左&#xff08;右&#xff09;孩子的值。每遍历完一层则对当前list进行判断&#xff0c…...

动手学深度学习(2)-3.5 图像分类数据集

文章目录 引言正文图像分类数据集主要包介绍主要流程具体代码练习 总结 引言 这里主要是看一下如何加载数据集&#xff0c;并且生成批次训练的数据。最大的收获是&#xff0c;知道了如何在训练阶段提高模型训练的性能 增加batch_size增加num_worker数据预加载 正文 图像分类…...

C标准输入与标准输出——stdin,stdout

&#x1f517; 《C语言趣味教程》&#x1f448; 猛戳订阅&#xff01;&#xff01;&#xff01; ​—— 热门专栏《维生素C语言》的重制版 —— &#x1f4ad; 写在前面&#xff1a;这是一套 C 语言趣味教学专栏&#xff0c;目前正在火热连载中&#xff0c;欢迎猛戳订阅&#…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...