{"value":"#### **现状**\n\n\nApache Hue 是一个基于 Web 的交互式 SQL 助手,通过它可以帮助大数据从业人员(数仓工程师,数据分析师等)与数据仓库进行 SQL 交互。在 [Amazon EMR](https://aws.amazon.com/cn/emr/?trk=cndc-detail) 集群启动时,通过勾选 Hue 进行安装。在 Hue 启用以后,将原先需要登录主节点进行 SQL 编写及提交的工作转移到 web 前端,不仅方便统一管理日常开发需求,而且保证了集群的接入安全性。另一方面 Hue 自己独特的优势可以使用 SparkSQL 进行 Spark 任务的远程提交,相比于额外为 [Amazon EMR](https://aws.amazon.com/cn/emr/?trk=cndc-detail) 集群配置 Hive on Spark,或者使用代码进行 Livy 远程提交这两种方式而言,大大的提升了开发和运维效率。本文也介绍了如何通过 Hue 整合 [Amazon Redshift](https://aws.amazon.com/cn/redshift/?trk=cndc-detail) 数仓, 以及远程提交 Phoenix 任务同 HBase 交互,将 Hue 打造为数据仓库的统一 SQL 访问平台。\n\n\n\n#### **方案架构总览**\n\n\n![image.png](https://dev-media.amazoncloud.cn/2f98636d2fb54effa1069d28bfe12b56_image.png)\n\n\n#### **方案介绍**\n\n\n#### **通过 Livy 提交 SparkSQL Job**\n\n**执行引擎现状**\n\n首先,我们简单比对一下几种流行的执行引擎的现状:\n\n- 由于处理客户查询需要高磁盘 IO,**Apache MapReduce** 是最慢的查询执行引擎。\n- 在保持磁盘 IO 不变的情况下,**Apache Tez** 明显快于 Apache MapReduce。\n- **Apache Spark** 比没有 IO 阻塞的 Apache Tez 稍快,和Apache Tez 一样以 DAG 方式处理数据,Spark 更加通用,提供内存计算,实时流处理,[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)等多种计算方式,适合迭代计算。\n\n**Apache Livy** 简介\n\nApache Livy 是一项服务,可通过 REST API 与 Spark 集群轻松交互。此方案中的配置方式可将 Hue 页面编写的 SparkSQL 通过 Livy 接口提交到 EMR 集群。\n\n**EMR Hue 处理 SparkSQL 默认行为**\n\n当在 Hue 的面板上 Editor 选择 SparkSQL 并提交 SQL 任务时,我们根据 application_id((Executing on YARN cluster with App id application_1656071365605_0006))去 Resource Manager 控制台上查询到对应的 Application Type 是 Tez:\n\n![image.png](https://dev-media.amazoncloud.cn/6eed691520734823be34205f41d63aa8_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/0f421f6b9d40464eaa43abee42aabaac_image.png)\n\n当我们打开 hue 的配置文件(/etc/hue/conf/hue.ini)看到[[[sql]]] 处配置如下图,interface 配置的是 hiveserver2 便知道了此时的 SparkSQL 走的仍是 hiveserver2,因此使用的是 Tez 引擎(EMR上的Hive执行引擎默认是Tez),这代表着并未真的使用 Spark 执行引擎在运行上述的 Query。\n\n![image.png](https://dev-media.amazoncloud.cn/0fc003919d8848f0bb028145ef2b236b_image.png)\n\n**在 EMR Hue 中通过 Livy 提交 SparkSQL 任务**\n\n(1)修改 Hue 配置文件(/etc/hue/conf/hue.ini)中的执行引擎,并重启 Hue 服务\n\n![image.png](https://dev-media.amazoncloud.cn/29513c432b2d4b30889819cf373c544c_image.png)\n\n```\\nsudo systemctl restart hue.service\\nsudo systemctl status hue.service\\n```\n\n重新提交 SparkSQL 任务后,看到该 Application 的 ApplicationType 已经为 SPARK。\n\n![image.png](https://dev-media.amazoncloud.cn/9166844b90fa4d0e917d679d26ba83d7_image.png)\n\n**生产场景中的性能调优:**\n\n上述 Application 通过 Spark 管理界面查看 Environment 细节:\n\n![image.png](https://dev-media.amazoncloud.cn/0e2c4737316c43b9b030ba9736eab114_image.png)\n\n看到 spark.driver.memory 和 spark.executor.memory 均设置为1G\n\n![image.png](https://dev-media.amazoncloud.cn/745a4b0a9f6b48959b24257e539476f2_image.png)\n\n这是因为 Hue 源码中直接将上述两个参数的值设定为1G:\n\n[https://github.com/cloudera/hue/blob/bd6324a79c2e6b6d002ddd6767b0e63883373320/desktop/libs/notebook/src/notebook/connectors/spark_shell.py](https://github.com/cloudera/hue/blob/bd6324a79c2e6b6d002ddd6767b0e63883373320/desktop/libs/notebook/src/notebook/connectors/spark_shell.py)\n\n```\\n{\\n\\t \\"name\\": \\"driverMemory\\",\\n\\t \\"nice_name\\": _(\\"Driver Memory\\"),\\n\\t \\"help_text\\": _(\\"Amount of memory to use for the driver process in GB. (Default: 1). \\"),\\n\\t \\"type\\": \\"jvm\\",\\n\\t \\"is_yarn\\": False,\\n\\t \\"multiple\\": False,\\n\\t \\"defaultValue\\": '1G',\\n\\t \\"value\\": '1G',\\n\\t},\\n…\\n{\\n\\t \\"name\\": \\"executorMemory\\",\\n\\t \\"nice_name\\": _(\\"Executor Memory\\"),\\n\\t \\"help_text\\": _(\\"Amount of memory to use per executor process in GB. (Default: 1)\\"),\\n\\t \\"type\\": \\"jvm\\",\\n\\t \\"is_yarn\\": True,\\n\\t \\"multiple\\": False,\\n\\t \\"defaultValue\\": '1G',\\n\\t \\"value\\": '1G',\\n\\t }\\n```\n\n如果用默认参数值容易在任务执行中触发 OOM 异常,导致任务运行失败,我们可选择通过以下方法进行调优:\n\n```\\ncp /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\\nsudo vi /usr/lib/hue/desktop/libs/notebook/src/notebook/connectors/spark_shell.py\\n\\n```\n\n将 ‘driverMemory’ 和 ‘executorMemory’ 的配置删除,重启 Hue 服务\n\n```\\nsudo systemctl restart hue.service\\nsudo systemctl status hue.service\\n```\n\n![image.png](https://dev-media.amazoncloud.cn/e230a01d8ef1472f87e0ab038d484ac0_image.png)\n\n再次运行 SparkSQL,从 Environment 看到两个内存参数已经更新,和 /etc/spark/conf/spark-defaults.conf 内定义一致:\n\n![image.png](https://dev-media.amazoncloud.cn/0fcf2bc2ae0342e591171eb7b06ba022_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/f434cfb69d714d749fada050a620dc33_image.png)\n\n\n#### **Hue 配置 Phoenix 提交 HBase 任务**\n\n\n**Apache Phoenix 简介**\n\nApache Phoenix 是一个开源的,大规模并行的关系数据库引擎,支持使用 Apache HBase 作为其后备存储的 OLTP for Hadoop。Phoenix 提供了一个 JDBC 驱动程序,该驱动程序隐藏了 noSQL 存储的复杂性,使用户能够创建,删除和更改 SQL 表,视图,索引和序列。\n\n**配置 Phoenix**\n\n(1)准备 Hue Python Virtual Environment\n\n```\\nsudo /usr/lib/hue/build/env/bin/pip install phoenixdb\\n```\n\n(2)修改 Hue 配置文件:\n\n在 /etc/hue/conf/hue.ini的[notebook] [[interpreters]]部分加入:\n\n```\\n[[[phoenix]]]\\nname=HBase Phoenix\\ninterface=sqlalchemy\\noptions='{\\"url\\": \\"phoenix:// ip-172-31-37-125.ap-southeast-1.compute.internal:8765/\\"}'\\n```\n\n重启 Hue 服务\n\n```\\nsudo systemctl restart hue.service\\nsudo systemctl status hue.service\\n```\n\n(3) Hue 页面提交 Phoenix 任务:\n\nHue – Editor 部分因为配置文件的更新,出现了 HBase Phoenix 的选项, 创建和查询 Table : \n\n![image.png](https://dev-media.amazoncloud.cn/d3829f27a071419a91f0c9369ce84f31_image.png)\n\n```\\nCREATE TABLE user (id varchar PRIMARY KEY,name varchar,passwd varchar)\\nupsert into user(id, name, passwd) values('001', 'admin', 'admin')\\nselect * from user\\n```\n\n![image.png](https://dev-media.amazoncloud.cn/77b4a8471e5544ca87c8d415637b51b0_image.png)\n\n**HBase 显示列名乱码修正**\n\n(1)当完成上述操作时,回到 HBase Shell 查看表内容,发现列名为乱码:\n\n![image.png](https://dev-media.amazoncloud.cn/25ef846d7ab14402929ea2edb11f425a_image.png)\n\n使用 Phoenix 命令行(/usr/lib/phoenix/bin/sqlline.py, 不透过Hue)创建表仍能重现该问题,且乱码不会在 Phoenix JDBC 连接中出现:\n\n![image.png](https://dev-media.amazoncloud.cn/ae34813d7c204db5a5652cc0501f5f56_image.png)\n\n(2)在 Phoenix 创建表时最后加上 COLUMN_ENCODED_BYTES= 0可规避该问题:\n\n```\\nCREATE TABLE user02 (id varchar PRIMARY KEY,name varchar,passwd varchar) COLUMN_ENCODED_BYTES= 0\\nupsert into user02(id, name, passwd) values('002', 'admin', 'admin')\\nselect * from user02\\n```\n\nHBase Shell 查看结果,列名已经显示正常:\n\n![image.png](https://dev-media.amazoncloud.cn/88acf98d67a54c45964e715d35e51f4d_image.png)\n\n#### **Hue 连接 Redshift 提交任务**\n\n当数仓平台中涉及 [Amazon EMR](https://aws.amazon.com/cn/emr/?trk=cndc-detail) 和 [Amazon Redshift](https://aws.amazon.com/cn/redshift/?trk=cndc-detail) 等多种服务时,通过 Hue 丰富的 Connectors 扩展种类,可以轻松实现统一交互的功能。\n\n(1)准备 Hue Python Virtual Environment\n\n```\\ncd /usr/lib/hue/\\nsudo ./build/env/bin/pip install sqlalchemy-redshift\\nsudo /usr/lib/hue/build/env/bin/pip2.7 install psycopg2-binary\\n```\n\n(2)修改 Hue 配置文件:\n\n在/etc/hue/conf/hue.ini的[notebook] [[interpreters]]部分加入:\n\n```\\n[[[redshift]]]\\nname = Redshift\\ninterface=sqlalchemy\\n options='{\\"url\\": \\"redshift+psycopg2://username:password@host.amazonaws.com:5439/database\\"}'\\n```\n\n重启 Hue 服务\n\n```\\nsudo systemctl restart hue.service\\nsudo systemctl status hue.service\\n```\n\n(3) Hue 页面提交 Redshift 任务:\n\nHue – Editor 部分因为配置文件的更新,出现了 Reshift 的选项:\n\n![image.png](https://dev-media.amazoncloud.cn/6fbddb80aee54ba58afd0c6ecb3ec25e_image.png)\n\n提交 SQL 查询,轻松获取 [Amazon Redshift](https://aws.amazon.com/cn/redshift/?trk=cndc-detail) 数仓数据:\n\n![image.png](https://dev-media.amazoncloud.cn/a8327a5a746b4ab589b2b10c76c584c7_image.png)\n\n\n#### **总结**\n\n\n本文主要帮助使用 [Amazon EMR](https://aws.amazon.com/cn/emr/?trk=cndc-detail) 的用户,通过 Hue 实现统一数仓平台开发工具,一方面集中管理数仓 SQL 开发任务,另一方面为其它部门提供自主分析的平台,对数仓建设有一定的推动作用。\n\n\n#### **本篇作者**\n\n![image.png](https://dev-media.amazoncloud.cn/3e922a41269647c89c0a697e6946b88a_image.png)\n\n**Sunny Fang**\nAmazon 技术客户经理,主要支持金融,互联网行业客户的架构优化、成本管理、技术咨询等工作,并专注在大数据和容器方向的技术研究和实践。在加入 Amazon 之前,曾就职于 Citrix 和微软等科技公司,拥有8年虚拟化与公有云领域的架构优化和支持经验。\n\n![image.png](https://dev-media.amazoncloud.cn/b2fe3ca60e0f4e4dbb154490b217e3ad_image.png)\n\n**张尹**\nAmazon 技术客户经理,负责企业级客户的架构和成本优化、技术支持等工作。有多年的大数据架构设计,数仓建模等实战经验。在加入 Amazon 之前,长期负责头部电商大数据平台架构设计、数仓建模、运维等相关工作。","render":"<h4><a id=\\"_0\\"></a><strong>现状</strong></h4>\\n<p>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 访问平台。</p>\n<h4><a id=\\"_7\\"></a><strong>方案架构总览</strong></h4>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/2f98636d2fb54effa1069d28bfe12b56_image.png\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"_13\\"></a><strong>方案介绍</strong></h4>\\n<h4><a id=\\"_Livy__SparkSQL_Job_16\\"></a><strong>通过 Livy 提交 SparkSQL Job</strong></h4>\\n<p><strong>执行引擎现状</strong></p>\\n<p>首先,我们简单比对一下几种流行的执行引擎的现状:</p>\n<ul>\\n<li>由于处理客户查询需要高磁盘 IO,<strong>Apache MapReduce</strong> 是最慢的查询执行引擎。</li>\\n<li>在保持磁盘 IO 不变的情况下,<strong>Apache Tez</strong> 明显快于 Apache MapReduce。</li>\\n<li><strong>Apache Spark</strong> 比没有 IO 阻塞的 Apache Tez 稍快,和Apache Tez 一样以 DAG 方式处理数据,Spark 更加通用,提供内存计算,实时流处理,[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)等多种计算方式,适合迭代计算。</li>\\n</ul>\n<p><strong>Apache Livy</strong> 简介</p>\\n<p>Apache Livy 是一项服务,可通过 REST API 与 Spark 集群轻松交互。此方案中的配置方式可将 Hue 页面编写的 SparkSQL 通过 Livy 接口提交到 EMR 集群。</p>\n<p><strong>EMR Hue 处理 SparkSQL 默认行为</strong></p>\\n<p>当在 Hue 的面板上 Editor 选择 SparkSQL 并提交 SQL 任务时,我们根据 application_id((Executing on YARN cluster with App id application_1656071365605_0006))去 Resource Manager 控制台上查询到对应的 Application Type 是 Tez:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/6eed691520734823be34205f41d63aa8_image.png\\" alt=\\"image.png\\" /></p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/0f421f6b9d40464eaa43abee42aabaac_image.png\\" alt=\\"image.png\\" /></p>\n<p>当我们打开 hue 的配置文件(/etc/hue/conf/hue.ini)看到[[[sql]]] 处配置如下图,interface 配置的是 hiveserver2 便知道了此时的 SparkSQL 走的仍是 hiveserver2,因此使用的是 Tez 引擎(EMR上的Hive执行引擎默认是Tez),这代表着并未真的使用 Spark 执行引擎在运行上述的 Query。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/0fc003919d8848f0bb028145ef2b236b_image.png\\" alt=\\"image.png\\" /></p>\n<p><strong>在 EMR Hue 中通过 Livy 提交 SparkSQL 任务</strong></p>\\n<p>(1)修改 Hue 配置文件(/etc/hue/conf/hue.ini)中的执行引擎,并重启 Hue 服务</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/29513c432b2d4b30889819cf373c544c_image.png\\" alt=\\"image.png\\" /></p>\n<pre><code class=\\"lang-\\">sudo systemctl restart hue.service\\nsudo systemctl status hue.service\\n</code></pre>\\n<p>重新提交 SparkSQL 任务后,看到该 Application 的 ApplicationType 已经为 SPARK。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/9166844b90fa4d0e917d679d26ba83d7_image.png\\" alt=\\"image.png\\" /></p>\n<p><strong>生产场景中的性能调优:</strong></p>\\n<p>上述 Application 通过 Spark 管理界面查看 Environment 细节:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/0e2c4737316c43b9b030ba9736eab114_image.png\\" alt=\\"image.png\\" /></p>\n<p>看到 spark.driver.memory 和 spark.executor.memory 均设置为1G</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/745a4b0a9f6b48959b24257e539476f2_image.png\\" alt=\\"image.png\\" /></p>\n<p>这是因为 Hue 源码中直接将上述两个参数的值设定为1G:</p>\n<p><a href=\\"https://github.com/cloudera/hue/blob/bd6324a79c2e6b6d002ddd6767b0e63883373320/desktop/libs/notebook/src/notebook/connectors/spark_shell.py\\" target=\\"_blank\\">https://github.com/cloudera/hue/blob/bd6324a79c2e6b6d002ddd6767b0e63883373320/desktop/libs/notebook/src/notebook/connectors/spark_shell.py</a></p>\\n<pre><code class=\\"lang-\\">{\\n\\t "name": "driverMemory",\\n\\t "nice_name": _("Driver Memory"),\\n\\t "help_text": _("Amount of memory to use for the driver process in GB. (Default: 1). "),\\n\\t "type": "jvm",\\n\\t "is_yarn": False,\\n\\t "multiple": False,\\n\\t "defaultValue": '1G',\\n\\t "value": '1G',\\n\\t},\\n…\\n{\\n\\t "name": "executorMemory",\\n\\t "nice_name": _("Executor Memory"),\\n\\t "help_text": _("Amount of memory to use per executor process in GB. (Default: 1)"),\\n\\t "type": "jvm",\\n\\t "is_yarn": True,\\n\\t "multiple": False,\\n\\t "defaultValue": '1G',\\n\\t "value": '1G',\\n\\t }\\n</code></pre>\\n<p>如果用默认参数值容易在任务执行中触发 OOM 异常,导致任务运行失败,我们可选择通过以下方法进行调优:</p>\n<pre><code class=\\"lang-\\">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\\nsudo vi /usr/lib/hue/desktop/libs/notebook/src/notebook/connectors/spark_shell.py\\n\\n</code></pre>\\n<p>将 ‘driverMemory’ 和 ‘executorMemory’ 的配置删除,重启 Hue 服务</p>\n<pre><code class=\\"lang-\\">sudo systemctl restart hue.service\\nsudo systemctl status hue.service\\n</code></pre>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/e230a01d8ef1472f87e0ab038d484ac0_image.png\\" alt=\\"image.png\\" /></p>\n<p>再次运行 SparkSQL,从 Environment 看到两个内存参数已经更新,和 /etc/spark/conf/spark-defaults.conf 内定义一致:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/0fcf2bc2ae0342e591171eb7b06ba022_image.png\\" alt=\\"image.png\\" /></p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/f434cfb69d714d749fada050a620dc33_image.png\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"Hue__Phoenix__HBase__119\\"></a><strong>Hue 配置 Phoenix 提交 HBase 任务</strong></h4>\\n<p><strong>Apache Phoenix 简介</strong></p>\\n<p>Apache Phoenix 是一个开源的,大规模并行的关系数据库引擎,支持使用 Apache HBase 作为其后备存储的 OLTP for Hadoop。Phoenix 提供了一个 JDBC 驱动程序,该驱动程序隐藏了 noSQL 存储的复杂性,使用户能够创建,删除和更改 SQL 表,视图,索引和序列。</p>\n<p><strong>配置 Phoenix</strong></p>\\n<p>(1)准备 Hue Python Virtual Environment</p>\n<pre><code class=\\"lang-\\">sudo /usr/lib/hue/build/env/bin/pip install phoenixdb\\n</code></pre>\\n<p>(2)修改 Hue 配置文件:</p>\n<p>在 /etc/hue/conf/hue.ini的[notebook] [[interpreters]]部分加入:</p>\n<pre><code class=\\"lang-\\">[[[phoenix]]]\\nname=HBase Phoenix\\ninterface=sqlalchemy\\noptions='{"url": "phoenix:// ip-172-31-37-125.ap-southeast-1.compute.internal:8765/"}'\\n</code></pre>\\n<p>重启 Hue 服务</p>\n<pre><code class=\\"lang-\\">sudo systemctl restart hue.service\\nsudo systemctl status hue.service\\n</code></pre>\\n<p>(3) Hue 页面提交 Phoenix 任务:</p>\n<p>Hue – Editor 部分因为配置文件的更新,出现了 HBase Phoenix 的选项, 创建和查询 Table :</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/d3829f27a071419a91f0c9369ce84f31_image.png\\" alt=\\"image.png\\" /></p>\n<pre><code class=\\"lang-\\">CREATE TABLE user (id varchar PRIMARY KEY,name varchar,passwd varchar)\\nupsert into user(id, name, passwd) values('001', 'admin', 'admin')\\nselect * from user\\n</code></pre>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/77b4a8471e5544ca87c8d415637b51b0_image.png\\" alt=\\"image.png\\" /></p>\n<p><strong>HBase 显示列名乱码修正</strong></p>\\n<p>(1)当完成上述操作时,回到 HBase Shell 查看表内容,发现列名为乱码:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/25ef846d7ab14402929ea2edb11f425a_image.png\\" alt=\\"image.png\\" /></p>\n<p>使用 Phoenix 命令行(/usr/lib/phoenix/bin/sqlline.py, 不透过Hue)创建表仍能重现该问题,且乱码不会在 Phoenix JDBC 连接中出现:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/ae34813d7c204db5a5652cc0501f5f56_image.png\\" alt=\\"image.png\\" /></p>\n<p>(2)在 Phoenix 创建表时最后加上 COLUMN_ENCODED_BYTES= 0可规避该问题:</p>\n<pre><code class=\\"lang-\\">CREATE TABLE user02 (id varchar PRIMARY KEY,name varchar,passwd varchar) COLUMN_ENCODED_BYTES= 0\\nupsert into user02(id, name, passwd) values('002', 'admin', 'admin')\\nselect * from user02\\n</code></pre>\\n<p>HBase Shell 查看结果,列名已经显示正常:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/88acf98d67a54c45964e715d35e51f4d_image.png\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"Hue__Redshift__188\\"></a><strong>Hue 连接 Redshift 提交任务</strong></h4>\\n<p>当数仓平台中涉及 Amazon EMR 和 Amazon Redshift 等多种服务时,通过 Hue 丰富的 Connectors 扩展种类,可以轻松实现统一交互的功能。</p>\n<p>(1)准备 Hue Python Virtual Environment</p>\n<pre><code class=\\"lang-\\">cd /usr/lib/hue/\\nsudo ./build/env/bin/pip install sqlalchemy-redshift\\nsudo /usr/lib/hue/build/env/bin/pip2.7 install psycopg2-binary\\n</code></pre>\\n<p>(2)修改 Hue 配置文件:</p>\n<p>在/etc/hue/conf/hue.ini的[notebook] [[interpreters]]部分加入:</p>\n<pre><code class=\\"lang-\\">[[[redshift]]]\\nname = Redshift\\ninterface=sqlalchemy\\n options='{"url": "redshift+psycopg2://username:password@host.amazonaws.com:5439/database"}'\\n</code></pre>\\n<p>重启 Hue 服务</p>\n<pre><code class=\\"lang-\\">sudo systemctl restart hue.service\\nsudo systemctl status hue.service\\n</code></pre>\\n<p>(3) Hue 页面提交 Redshift 任务:</p>\n<p>Hue – Editor 部分因为配置文件的更新,出现了 Reshift 的选项:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/6fbddb80aee54ba58afd0c6ecb3ec25e_image.png\\" alt=\\"image.png\\" /></p>\n<p>提交 SQL 查询,轻松获取 Amazon Redshift 数仓数据:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/a8327a5a746b4ab589b2b10c76c584c7_image.png\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"_229\\"></a><strong>总结</strong></h4>\\n<p>本文主要帮助使用 Amazon EMR 的用户,通过 Hue 实现统一数仓平台开发工具,一方面集中管理数仓 SQL 开发任务,另一方面为其它部门提供自主分析的平台,对数仓建设有一定的推动作用。</p>\n<h4><a id=\\"_235\\"></a><strong>本篇作者</strong></h4>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/3e922a41269647c89c0a697e6946b88a_image.png\\" alt=\\"image.png\\" /></p>\n<p><strong>Sunny Fang</strong><br />\\nAmazon 技术客户经理,主要支持金融,互联网行业客户的架构优化、成本管理、技术咨询等工作,并专注在大数据和容器方向的技术研究和实践。在加入 Amazon 之前,曾就职于 Citrix 和微软等科技公司,拥有8年虚拟化与公有云领域的架构优化和支持经验。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/b2fe3ca60e0f4e4dbb154490b217e3ad_image.png\\" alt=\\"image.png\\" /></p>\n<p><strong>张尹</strong><br />\\nAmazon 技术客户经理,负责企业级客户的架构和成本优化、技术支持等工作。有多年的大数据架构设计,数仓建模等实战经验。在加入 Amazon 之前,长期负责头部电商大数据平台架构设计、数仓建模、运维等相关工作。</p>\n"}