Hue编译安装适配sparksql(hue+livy+sparksql+pyspark)

article/2025/10/13 8:07:09

一、前言

  • 本篇文章带大家一起编译hue、并使用hue适配livy+spark,通过结合Hue、Livy和Spark SQL,可以在一个友好的Web界面中编写和执行SQL查询,并在远程的Spark集群上运行。

1、Hue 介绍

  • Hue (Hadoop User Experience)是一个开源的Apache Hadoop UI系统,由Cloudera Desktop演化而来,最后Cloudera公司将其贡献给Apache基金会的Hadoop社区,其基于Python Web框架Django实现。Hue为KMR集群提供了图形化用户界面,便于用户配置、使用以及查看KMR集群。hue官网、Github
  1. 访问HDFS和文件浏览
  2. 通过web调试和开发hive以及数据结果展示
  3. solr查询、结果展示、报表生成
  4. 通过web调试和开发impala交互式SQL Query
  5. spark调试和开发
  6. Pig开发和调试
  7. oozie任务的开发、监控和工作流协调调度
  8. Hbase数据查询和修改、数据展示
  9. Hive的元数据(metastore)查询
  10. MapReduce任务进度查看,日志追踪
  11. 创建和提交MapReduce,Streaming,Java job任务
  12. Sqoop2的开发和调试
  13. Zookeeper的浏览和编辑
  14. 数据库(MySQL、PostgreSQL、SQlite,Oracle)的查询和展示

在这里插入图片描述

2、livy 介绍

  • Apache Livy是 一个可以通过REST接口轻松的与Spark集群进行交互的服务,它可以很方便提交Spark作业或者Spark代码,同步或者异步的进行结果检索以及Spark Context上下文管理, Apache Livy还简化了Spark和应 用程序服务器之间的交互,从而使Spark能够用于交互式Web移动应用程序。livy 官网、Github

在这里插入图片描述

二、编译安装Hue

名称版本
hue4.10
livy0.8
Spark3.2.1

考虑到编译比较繁琐复杂,已将相关编译好的包放在网盘,需要可以自取。
链接:https://pan.baidu.com/s/1BOsnKKwKmTohSGbzi-3QpQ
提取码:C3hp

1、安装依赖包

Hue依赖于许多软件包,需要在安装Hue之前安装这些软件包。

yum install \
ant     \
asciidoc       \
cyrus-sasl-devel  \
cyrus-sasl-gssapi \
cyrus-sasl-plain   \
gcc     \
gcc-c++      \
krb5-devel  \
libffi-devel   \
libxml2-devel      \
libxslt-devel     \
make  \
mysql \
mysql-devel\
openldap-devel    \
python-devel       \
sqlite-devel \
gmp-devel \
npm

2、编译Hue

到hue安装目录下,执行make。

  • make apps
    其把安装包都打到当前的源码包中,如果迁移安装包,就需要把当前整个包都打包在一块,这样会造成安装包冗余大量的源码数据。

  • PREFIX=/data/hue-4.10 make install
    如果有迁移安装包的需求,一定要注意安装包的路径,因为hue中一些依赖使用了绝对路径,所以在迁移安装包的时候,尽量保证路径不变。

  • 编译成功后Hue可在编译机启动。如果需要在其他机器部署,需要将/data/hue-4.10目录打包压缩后复制到目标机器。尽量保证路径不变。

  • 编译结束后可以输入echo $?查看状态码,若为0则编译成功:

在这里插入图片描述
在这里插入图片描述

3、遇到的问题

每一次编译过程如果出现问题,在重新编译前尽量make clean一下,避免上次的错误的编译安装残留影响后面的重新安装。

1. npm下载不下来

在这里插入图片描述
解决方式:npm默认镜像源为国外地址,所以下载会很慢或者下不下来,所以可以通过修改npm下载的镜像源为国内淘宝镜像源进行解决。

npm config set proxy null 清空代理npm cache clean --force   清空缓存npm config set registry https://registry.npm.taobao.org 设置代理

2. nodejs版本问题

  1. 其出现的原因是nodejs 18版本及以上涉及最新底层操作系统相关的包。所以在安装nodejs的时候,推荐使用18以下的版本。在这里插入图片描述

三、配置Hue

  • 将上一步编译打包后的Hue解压在目标机器/data/hue-4.10/。然后配置/data/hue-4.10/hue/desktop/conf/pseudo-distributed.ini
  1. 复制出一份配置文件
cp  /data/hue-4.10/hue/desktop/conf/pseudo-distributed.ini.tmpl /data/hue-4.10/hue/desktop/conf/pseudo-distributed.ini
  1. 编辑配置文件,完整配置文件如下,可参考(MySQL元数据同步、HDFS文件浏览集成、livy集成、Hive集成、impala集成、yarn集成、LDAP等)
vim  /data/hue-4.10/hue/desktop/conf/pseudo-distributed.ini[desktop]
secret_key=ZT0kMfPMbzRaHBx
http_host=0.0.0.0
http_port=8887
time_zone=Asia/Shanghai
app_blacklist=pig,zookeeper,hbase,oozie,indexer,jobbrowser,rdbms,jobsub,sqoop,metastore
django_debug_mode=false
http_500_debug_mode=false
cherrypy_server_threads=50
default_site_encoding=utf
collect_usage=false
enable_prometheus=true
[[django_admins]]
[[custom]]
[[auth]]
backend=desktop.auth.backend.LdapBackend
idle_session_timeout=600
[[[jwt]]]
[[ldap]]
ldap_url=ldap://ldap.cdh.com
ldap_username_pattern="uid=<username>,ou=People,dc=server,dc=com"
use_start_tls=false
search_bind_authentication=false
create_users_on_login=true
base_dn="ou=People,dc=server,dc=com"
bind_dn="cn=Manager,dc=server,dc=com"
bind_password="eFRrECKfQfoOB25"
[[[users]]]
[[[groups]]]
[[[ldap_servers]]]
[[vcs]]
[[database]]
engine=mysql
host=192.168.37.100
port=3306
user=hue
password=6a3ZsJtNs8SSCLe
name=hue_10
[[session]]
[[smtp]]
host=localhost
port=25
user=
password=
tls=no
[[knox]]
[[kerberos]]
[[oauth]]
[[oidc]]
[[metrics]]
[[slack]]
[[tracing]]
[[task_server]]
[[gc_accounts]]
[[[default]]]
[[raz]]
[notebook]
show_notebooks=true
[[interpreters]][[[hive]]]
name=Hive
interface=hiveserver2[[[impala]]]
name=Impala
interface=hiveserver2[[[sparksql]]]
name=SparkSql
interface=livy[[[pyspark]]]
name=PySpark
interface=livy[dashboard]
is_enabled=true
[[engines]]
[hadoop]
[[hdfs_clusters]]
[[[default]]]
fs_defaultfs=hdfs://nameservice1
webhdfs_url=http://192.168.37.20:14000/webhdfs/v1
hadoop_bin=/opt/cloudera/parcels/CDH-6.0.0-1.cdh6.0.0.p0.537114/lib/hadoop/bin/hadoop
security_enabled=false
temp_dir=/tmp
[[yarn_clusters]]
[[[default]]]
resourcemanager_host=192.168.37.1
resourcemanager_api_url=http://192.168.37.1:8088/
proxy_api_url=http://192.168.37.1:8088/
resourcemanager_port=8032
logical_name=yarnRM
history_server_api_url=http://192.168.37.1:19888/
security_enabled=false
submit_to=true
hadoop_mapred_home=/opt/cloudera/parcels/CDH-6.0.0-1.cdh6.0.0.p0.537114/lib/hadoop-mapreduce
hadoop_bin=/opt/cloudera/parcels/CDH-6.0.0-1.cdh6.0.0.p0.537114/lib/hadoop/bin/hadoop
[[[ha]]]
resourcemanager_host=192.168.37.20
resourcemanager_api_url=http://192.168.37.20:8088/
proxy_api_url=http://192.168.37.20:8088/
resourcemanager_port=8032
logical_name=yarnRM
history_server_api_url=http://192.168.37.1:19888/
security_enabled=false
submit_to=true
hadoop_mapred_home=/opt/cloudera/parcels/CDH-6.0.0-1.cdh6.0.0.p0.537114/lib/hadoop-mapreduce
hadoop_bin=/opt/cloudera/parcels/CDH-6.0.0-1.cdh6.0.0.p0.537114/lib/hadoop/bin/hadoop
[beeswax]
hive_server_host=192.168.37.242
hive_server_port=10009
server_conn_timeout=120
download_row_limit=10000
auth_username=hive
auth_password=ZT0kMfPMbzRaHBx
use_sasl=true
thrift_version=7
hive_metastore_host=192.168.37.162
hive_metastore_port=9083
[[ssl]]
[metastore]
[impala]
server_host=192.168.37.242
server_port=21052
impersonation_enabled=True
server_conn_timeout=120
auth_username=hive
auth_password=ZT0kMfPMbzRaHBx
[[ssl]]
[spark]
livy_server_url=http://192.168.37.160:8998
[oozie]
[filebrowser]
[pig]
[sqoop]
[proxy]
[hbase]
[search]
[libsolr]
[indexer]
[jobsub]
[jobbrowser]
[[query_store]]
[security]
[zookeeper]
[[clusters]]
[[[default]]]
[useradmin]
[[password_policy]]
[liboozie]
[aws]
[[aws_accounts]]
[azure]
[[azure_accounts]]
[[[default]]]
[[adls_clusters]]
[[[default]]]
[[abfs_clusters]]
[[[default]]]
[libsentry]
hostname=192.168.37.1
port=8038
[libzookeeper]
[librdbms]
[[databases]]
[libsaml]
[liboauth]
[kafka]
[[kafka]]
[metadata]
[[manager]]
[[optimizer]]
[[catalog]]
[[navigator]]
[[prometheus]]

四、初始化Hue

sudo -u hue /data/hue-4.10/hue/build/env/bin/hue syncdbsudo -u hue /data/hue-4.10/hue/build/env/bin/hue migrate

四、启动Hue

sudo -u hue nohup /data/hue-4.10/hue/build/env/bin/hue runserver 0.0.0.0:8888 &

1、登录Hue

首次登陆会将输入的用户名和密码作为超级管理员,如果忘记密码,可以重新使用上面命令初始化。

在这里插入图片描述

2、Hue测试Spark

a、Spark-Sql

  • Spark SQL是Apache Spark的一个模块,提供了一个用于结构化数据处理的高级API和查询语言。它使得在Spark中可以轻松地执行SQL查询。
    在这里插入图片描述

b、Pyspark

  • PySpark是一种高效、易用的处理大数据集的Python API。它可以让Python开发人员在分布式计算环境下快速处理大规模数据集,并且可以通过各种数据处理方式进行数据分析和挖掘。下面是一个统计列表中每个单词出现次数pyspark的例子
# 输入数据
data = ["hello", "world", "hello", "world"]# 将collection的data转为spark中的rdd并进行操作
rdd = sc.parallelize(data)
res_rdd = rdd.map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)# 将rdd转为collection并打印
res_rdd_coll = res_rdd.collect()
for line in res_rdd_coll:print(line)# 结束
sc.stop()

在这里插入图片描述

五、编写Hue system启动脚本

1、Hue shell脚本

  • shell脚本如下,别忘记了用户需要执行权限
chmod +x  /data/hue-4.10/hue/hue_service.sh
#!/bin/bashif [ $# -ne 2 ]; thenecho "please input two params,first is (hue),second is (start|stop)"exit 0
fiif [ "$1" == "hue" ]; thenif [ "$2" == "start" ]; thencd /data/hue-4.10/hue/logsecho "now is start hue"nohup /data/hue-4.10/hue/build/env/bin/hue runserver 0.0.0.0:8887 > /data/hue-4.10/hue/logs/info.log  2>&1 &exit 0elif [ "$2" == "stop" ]; thenhue_pid=$(netstat -nltp|grep  8887|awk '{print $NF}'|awk -F"/" '{print $1}')kill ${hue_pid}echo "hue has stop"exit 0elseecho "second param please input 'start' or 'stop'"exit 0fi
elseecho "first param please input 'hue'"
fi

2、Hue system脚本

  • /usr/lib/systemd/system创建对应的hue.service文件
# /usr/lib/systemd/system/hue.service
[Unit]
Description=hue
Wants=network-online.target
After=network-online.target[Service]
Type=forking 
User=hue
Group=hue
ExecStart=/data/hue-4.10/hue/hue_service.sh hue start
ExecStop=/data/hue-4.10/hue/hue_service.sh hue stop
Restart=no[Install]
WantedBy=multi-user.target

3、reload systemctl

systemctl daemon-reload

4、启动测试

systemctl start hue.service

5、验证

systemctl status hue.service

在这里插入图片描述

六、使用问题

1、yarn 队列无法绑定

  • 在hue中 livy 启动 Scala、Spark、PySpark都是使用的默认队列 root.default,这是因为默认在hue代码中绑定了YARN 队列名,我们可以通过修改hue源码进行修改队列。GitHub相关issues
vim /data/hue-4.10/hue/desktop/libs/notebook/src/notebook/connectors/spark_shell.py

在这里插入图片描述

2、中文报错

  • 在使用新版本hue 中文直接报错,GitHub相关issues
    在这里插入图片描述
    在这里插入图片描述
  • 修改源码将其支持utf-8,oprot.writeString(self.statement) 编辑为 oprot.writeString(self.statement.encode(‘utf-8’))
vim /data/hue-4.10/hue/apps/beeswax/gen-py/TCLIService/ttypes.py

在这里插入图片描述
在这里插入图片描述

3、Session matching query does not exist.

  • 会话匹配查询不存在,是hue的一个bug,很多人出现这种问题,现官方已修复GitHub相关issues,临时解决办法如下:
-- 在1884行增加一行代码,注意格式
vim /data/hue-4.10/hue/desktop/core/src/desktop/js/apps/notebook/snippet.jsnotebook.sessions()[0].type(self.type()); 

在这里插入图片描述
在这里插入图片描述

4、Spark-sql查询结果空白

  • 这个也是hue的一个bug,GitHub相关issues,我们也是同样使用修改源码的方式修复。按照issues方法修改spark_shell.py文件即可,代码太多,这里就不贴出来了。
    在这里插入图片描述
vim /data/hue-4.10/hue/desktop/libs/notebook/src/notebook/connectors/spark_shell.py

在这里插入图片描述

七、总结

  • Hue是一个开源的SQL助手,用于数据仓库。它可以与Livy集成,以便更轻松地开发SQL片段。Apache Livy提供了一个桥梁,可以与运行中的Spark解释器进行交互,以便可以交互地执行SQL、pyspark和scala片段。
  • Hue 结合livy不仅可以添加sparksql+pyspark还可以添加Scala+R
    在这里插入图片描述

相关参考借鉴:
hue 编译安装
HUE4.10编译打包
HUE编译


http://chatgpt.dhexx.cn/article/KZrwtP4s.shtml

相关文章

Apache Livy 安装部署使用示例

Livy 安装部署使用示例 1. Apache Livy 简介2. 安装前置要求3.下载安装包配置相关配置文件4. 启动服务配置使用5.提交任务获取运行结果6.拓展参考 1. Apache Livy 简介 官网&#xff1a;https://livy.apache.org/ Livy是一个提供rest接口和spark集群交互的服务。它可以提交sp…

Livy REST API使用教程

Livy概述 用过Spark的朋友对Livy一定不陌生&#xff0c;Livy是Apache Spark下的一个REST服务&#xff0c;通过Livy&#xff0c;你只要可以发送Http请求&#xff0c;就可以提交Spark任务。Livy在很多Spark数据平台上都作为一个提交任务的重要工具&#xff0c;你可以不知道Livy是…

最全livy代码实战

livy分析应用实战 Github地址&#xff1a;最全livy代码实战 Apache Livy提供Rest service来与Apache Spark进行交互&#xff0c;通过Rest interface或RPC client来简化spark job和spark code snippet的提交&#xff0c;同步或异步获取结果&#xff0c;并提供对spark context的管…

livy部署和使用

部署 使用版本&#xff1a;apache-livy-0.7.1 环境&#xff1a;spark(配置中已添加hive-site.xml) , hive ,hadoop(hdfsyarn) 基于centos livy只需要配置两个文件(livy-env.sh,livy.conf)&#xff1a; livy-env.sh 中添加环境变量配置 export JAVA_HOME/usr/local/jdk/jdk1.8…

Spark开源REST服务——Apache Livy(Spark 客户端)

文章目录 一、概述二、Apache Livy模块介绍1&#xff09;Client2&#xff09;router3&#xff09;权限管理4&#xff09;生成 Spark App5&#xff09;交互式 Driver6&#xff09;状态数据存储 三、Apache Livy架构1&#xff09;Livy架构2&#xff09;Livy执行作业流程 四、环境…

spark系列-应用篇之通过livy提交Spark任务

#前言 上一篇使用yarn api的提交spark任务比较麻烦&#xff0c; 这次我们使用livy来提交spark任务。livy的使用十分简单&#xff0c;功能上比yarn api还要强大&#xff0c;支持提交spark代码片断&#xff0c;session共享 #安装 下载livy0.5.0&#xff0c;下载完成后进行解压。…

Spark Livy 指南及livy部署访问实践

背景&#xff1a; Apache Spark 是一个比较流行的大数据框架、广泛运用于数据处理、数据分析、机器学习中&#xff0c;它提供了两种方式进行数据处理&#xff0c;一是交互式处理&#xff1a;比如用户使用spark-shell&#xff0c;编写交互式代码编译成spark作业提交到集群上去执…

Livy简单使用 架构解读

Livy使用 —— 关于Session的操作 官网案例&#xff1a;http://livy.incubator.apache.org/examples/ REST API&#xff1a;http://livy.incubator.apache.org/docs/latest/rest-api.html 通过REST API的方式去获取到session&#xff0c;返回活的交互式session 打开Postman&a…

【云原生】Apache Livy on k8s 讲解与实战操作

文章目录 一、概述二、开始编排部署1&#xff09;部署包准备1&#xff09;构建镜像2&#xff09;创建livy chart模板3&#xff09;修改yaml编排4&#xff09;开始部署5&#xff09;测试验证6&#xff09;卸载 一、概述 Livy是一个提供Rest接口和spark集群交互的服务。它可以提交…

Livy:基于Apache Spark的REST服务

原文&#xff1a;http://geek.csdn.net/news/detail/208943 Apache Spark提供的两种基于命令行的处理交互方式虽然足够灵活&#xff0c;但在企业应用中面临诸如部署、安全等问题。为此本文引入Livy这样一个基于Apache Spark的REST服务&#xff0c;它不仅以REST的方式代替了Spar…

Livy安装使用

本次部署的livy是0.7.0版&#xff0c;zip包下载地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/apache/incubator/livy/0.7.0-incubating/apache-livy-0.7.0-incubating-bin.zip 安装java jdk1.8 步骤&#xff1a; 一、将下载好的livy的zip包用命令unzip去解压(如果…

livy的安装使用

2019独角兽企业重金招聘Python工程师标准>>> livy简介 Livy是一个提供rest接口和spark集群交互的服务。它可以提交spark job或者spark一段代码,同步或者异步的返回结果;也提供sparkcontext的管理,通过restfull接口或RPC客户端库。Livy也简化了与spark与应用服务的交…

Livy任务提交源码解析

文章目录 简介任务路由代码断任务远程Driver上建立RpcServerLivyServer接收客户端提交代码断任务LivyServer向远程Driver的RpcServer提交任务远程Driver的RpcServer接收任务Driver执行代码断任务Batch任务LivyServer接收batch任务创建BatchSession以提交Spark任务创建SparkYarn…

livy简介

livy简介 什么是livy Livy通过提供REST服务来简化与Spark集群的交互。它可以通过job或者代码片段的方式来提交Spark任务&#xff0c;并同步或者异步地获得任务的结果&#xff0c;以及管理spark context&#xff0c;上述功能通过简单的REST接口或者RPC服务来实现。livy也可以简…

livy部署及应用

一、介绍 Livy把spark交互式和批处理都搬到了web上&#xff0c;提供restful接口&#xff0c;Livy一方面接收并解析客户端提交的REST请求&#xff0c;转换成相应的操作&#xff0c;另一方面它管理着客户端所启动的spark集群 Livy会为用户运行多个session&#xff0c;每个sessio…

C/C++ 实现字符串IP与整数型IP的相互转换

#include <stdio.h> int main() {char ip[32] "192.168.1.151"; //IP值char scIPAddress[32] ""; //存储字符串IPunsigned int nIPAddress 0; //存储整形IPint nTmpIP[4] {0}; //分割IPint i0;//字符串转整形sscanf(ip,"%d.%d.%d.%…

数字字符串转化成 IP 地址

数字字符串转化成 IP 地址 1、参考资料 https://www.nowcoder.com/practice/ce73540d47374dbe85b3125f57727e1e 2、题目要求 题目描述 现在有一个只包含数字的字符串&#xff0c;将该字符串转化成IP地址的形式&#xff0c;返回所有可能的情况。 例如&#xff1a; 给出的字…

IP地址(IPV6)与long数组之间的转换

IP地址&#xff08;IPV6&#xff09;与long数组之间的转换 《IP地址&#xff08;IPV4&#xff09;与int类型之间的转换》《IP地址&#xff08;IPV6&#xff09;与long数组之间的转换》 一、前言 IPv6是英文“Internet Protocol Version 6”&#xff08;互联网协议第6版&#…

如何将字符数串和IP地址进行转换?

这一部分主要是网络编程中会使用&#xff0c;将数串和IP地址进行转换&#xff0c;在进行转换之前&#xff0c;我们需要知道IP地址在linux系统中的结构体定义 地址类型结构体 具体如下表&#xff1a; 结构体功能特性struct sockaddr套接字地址结构IPv4/IPv6通用struct sockad…

如何将IP地址字符串转换为数字数组

如何将IP地址字符串转换为数字数组 最近在做一个项目用到LWIP&#xff0c;通过触摸屏幕上的数字键盘输入要设置的IP地址和网关地址&#xff0c;然后再用输入的地址去设置重新设置lwip。那么问题就来了&#xff0c;输入的IP地址字符串应该怎么去转换成 ip[4] 数组呢&#xff1f…