Hive SQL-实时/最大在线人数

博客介绍通过给登录、登出时间加标记,用sum() over()窗口函数对排序后的数据求和得到结果。sparksql对千万量级数据计算65秒可接受。理解代码后能得到每个时刻在线人数,对其可视化可直观了解服务器负载变化。

我们给登录时间加一个数值标记1,登出时间加标记-1。然后对排序后的数据求和该字段,最终得到我们的结果。

select
    max(max_index)
from 
(
    select
        sum(index) over(order by `timestamp`) as max_index --排序后第一行到本行的和
    from
    (
        select
            order_id,
            unix_timestamp(login_time) as `timestamp`,
            1 as index
        from
            connection_detail
        where
            dt = '20190101'
            and is_td_finish = 1
        union all
        select
            order_id,
            unix_timestamp(logout_time) as `timestamp`,
            -1 as index
        from
            connection_detail
        where
            dt = '20190101'
    )a  --将登录时间和登出时间多列成多行
)b

可能阻碍大家想到这一逻辑的点在于sum() over()这一用法,该窗口函数对每一行数据实现了计算第一行到该行的求和计算,具体介绍网上很多,不熟悉的同学可以百度一下。该代码对于千万量级的数据sparksql计算了65秒,属于一个可以接受的范围。
理解了上述代码的同学可以发现过程中我们一度得到了每个时刻的在线人数(子查询b)。对这一数据进行可视化可以直观了解服务器的负载变化情况。

原文:https://blog.youkuaiyun.com/adrian_wang/article/details/89840671

1.上传tar包 2.解压 tar -zxvf hive-1.2.1.tar.gz 3.安装mysql数据库 推荐yum 在线安装 4.配置hive (a)配置HIVE_HOME环境变量 vi conf/hive-env.sh 配置其中的$hadoop_home (b)配置元数据库信息 vi hive-site.xml 添加如下内容: javax.jdo.option.ConnectionURL jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true JDBC connect string for a JDBC metastore javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver Driver class name for a JDBC metastore javax.jdo.option.ConnectionUserName root username to use against metastore database javax.jdo.option.ConnectionPassword hadoop password to use against metastore database 5.安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下 如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行) mysql -uroot -p #(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址或主机都可以连接) GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; FLUSH PRIVILEGES; 6. Jline包版本不一致的问题,需要拷贝hive的lib目录中jline.2.12.jar的jar包替换掉hadoop中的 /home/hadoop/app/hadoop-2.6.4/share/hadoop/yarn/lib/jline-0.9.94.jar 启动hive bin/hive ---------------------------------------------------------------------------------------------------- Hive几种使用方式: 1.Hive交互shell bin/hive 2.Hive JDBC服务(参考java jdbc连接mysql) 3.hive启动为一个服务器,来对外提供服务 bin/hiveserver2 nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err & 启动成功后,可以在别的节点上用beeline去连接 bin/beeline -u jdbc:hive2://mini1:10000 -n root 或者 bin/beeline ! connect jdbc:hive2://mini1:10000 4.Hive命令 hive -e ‘sql’ bin/hive -e 'select * from t_test'
实验九:SQL可视化工具Zeeplin配置 一、实验目的 1、掌握SQL可视化工具Zeeplin环境部署和配置 2、掌握使用Zeeplin访问Hive数据仓库的流程和步骤 二、实验内容 1、SQL可视化工具Zeeplin环境部署和配置 2、使用Zeeplin访问Hive数据仓库的流程和步骤 三、实验思考 1、SQL可视化工具相对于命令行工具来说,有什么优势? 2、Zeeplin除了可以使用Hive解释器外,还可以使用什么类型的解释器? 四、实现步骤参考 1.SQL可视化工具Zeeplin环境部署和配置 安装部署 (1)上传,解压 #将压缩包上传到/opt/software文件夹中 #解压 tar -zxvf zeppelin-0.10.1-bin-all.tgz -C /opt/module/ ​ #切换到/opt/module/ ​ #改名 mv zeppelin-0.10.1-bin-all/ zeppelin-0.10.1 ​ (2)修改配置文件zeppelin-site.xml ​ #进入/opt/module/zeppelin-0.10.1/conf文件夹中,创建一个配置文件 cp zeppelin-site.xml.template zeppelin-site.xml ​ #修改配置信息 vim zeppelin-site.xml ​ 在配置文件中更改一下几个属性的值,其他暂时保持原样 <property>  <name>zeppelin.server.addr</name>  <value>bigdatam10</value>  <description>Server binding address</description> </property> ​ <property>  <name>zeppelin.server.port</name>  <value>28080</value>  <description>Server port.</description> </property> <property>  <name>zeppelin.server.ssl.port</name>  <value>28443</value>  <description>Server ssl port. (used when ssl property is set to true)</description> </property> (3)修改配置文件zeppelin-env.sh 在文件尾巴上添加如下内容 export JAVA_HOME=/opt/module/jdk1.8.0_212 export MASTER=yarn-client export ZEPPELIN_LOG_DIR=/opt/module/zeppelin-0.9.0/logs #如果需要配置SparkSQL则需要添加如下两个参数 #export SPARK_HOME=/opt/framework/spark-2.4.4 #export SPARK_APP_NAME=zeppelin export HADOOP_CONF_DIR=/opt/module/hadoop-2.8.5/etc/hadoop 修改类路径 ${ZEPPELIN_HOME}/bin/interpreter.sh export ZEPPELIN_INTP_CLASSPATH_OVERRIDES=/opt/framework/spark-2.4.4/jars/*:/opt/framework/zeppelin-0.10.1/interpreter/spark/d ep/*:/opt/framework/zeppelin-0.10.1/interpreter/spark/*:/opt/framework/zeppelin-0.10.1/lib/interpreter/*:/opt/framework/hadoop -2.8.5/etc/hadoop/ Zeppelin用户配置 ${ZEPPELIN_HOME}/conf/shiro.ini 设置用户密码|角色权限 [users] # To enable admin user, uncomment the following line and set an appropriate password. admin =admin, admin ​ [roles] role1 = * role2 = * role3 = * admin = * Zeppelin服务启动停止 备注:如果要在Zeppelin上运行Spark或Hive程序(包括SQL),首先要启动对应服务如Hadoop、Hive metastore等 ${ZEPPELIN_HOME}/bin/zeppelin-daemon.sh start | stop 登录 用户名和密码是在shiro.ini中配置的信息:admin admin 2、使用Zeeplin访问Hive数据仓库的流程和步骤 创建解释器Interpreter Hive数据仓库的详细信息【之前在配置Hive的JDBC方式访问时设置的相关参数】 default.url :jdbc:hive2://bigdatam10:10000 default.user:root default.password:000000 default.driver:org.apache.hive.jdbc.HiveDriver 添加依赖: /opt/module/hive-2.3.9/lib/hive-jdbc-2.3.9.jar /opt/module/hive-2.3.9/lib/hive-service-rpc-2.3.9.jar /opt/module/hive-2.3.9/lib/hive-cli-2.3.9.jar /opt/module/hive-2.3.9/lib/hive-service-2.3.9.jar /opt/module/hive-2.3.9/lib/hive-common-2.3.9.jar /opt/module/hive-2.3.9/lib/hive-serde-2.3.9.jar /opt/module/hive-2.3.9/lib/guava-14.0.1.jar /opt/module/hive-2.3.9/lib/http-client-1.0.4.jar /opt/module/hive-2.3.9/lib/httpclient-4.4.jar /opt/module/hive-2.3.9/lib/httpcore-4.4.jar /opt/module/hive-2.3.9/lib/libthrift-0.9.3.jar /opt/module/hive-2.3.9/lib/commons-lang-2.6.jar /opt/module/hadoop-3.3.2/share/hadoop/common/hadoop-common-2.8.5.jar 创建Note 执行前准备: 进入到Hive根目录启动: #打开一个窗口启动元数据 bin/hive --service metastore #新开另一个窗口启动Server2 bin/hiveserver2 #另外,请确保mysql,hadoop服务已经启动 执行HQL语句 如果执行报错,提示说找不到某个类,请确保添加完所有依赖后,再次执行:
05-28
### 回答问题 #### 1. SQL可视化工具Zeeplin环境部署和配置 以下是使用Python脚本模拟的Zeppelin环境部署和配置步骤。虽然实际操作中不需要用到Python,但可以将其作为自动化脚本的一部分来完成这些任务。 ```python import os # (1) 上传并解压 Zeppelin 压缩包 def upload_and_extract(): os.system("tar -zxvf /opt/software/zeppelin-0.10.1-bin-all.tgz -C /opt/module/") os.chdir("/opt/module/") os.system("mv zeppelin-0.10.1-bin-all/ zeppelin-0.10.1") # (2) 修改配置文件 zeppelin-site.xml def modify_zeppelin_site(): os.system("cp /opt/module/zeppelin-0.10.1/conf/zeppelin-site.xml.template /opt/module/zeppelin-0.10.1/conf/zeppelin-site.xml") with open("/opt/module/zeppelin-0.10.1/conf/zeppelin-site.xml", "a") as f: f.write(""" <property> <name>zeppelin.server.addr</name> <value>bigdatam10</value> <description>Server binding address</description> </property> <property> <name>zeppelin.server.port</name> <value>28080</value> <description>Server port.</description> </property> <property> <name>zeppelin.server.ssl.port</name> <value>28443</value> <description>Server ssl port. (used when ssl property is set to true)</description> </property> """) # (3) 修改配置文件 zeppelin-env.sh def modify_zeppelin_env(): with open("/opt/module/zeppelin-0.10.1/conf/zeppelin-env.sh", "a") as f: f.write(""" export JAVA_HOME=/opt/module/jdk1.8.0_212 export MASTER=yarn-client export ZEPPELIN_LOG_DIR=/opt/module/zeppelin-0.9.0/logs export HADOOP_CONF_DIR=/opt/module/hadoop-2.8.5/etc/hadoop """) # (4) 配置用户权限 def configure_user_permissions(): with open("/opt/module/zeppelin-0.10.1/conf/shiro.ini", "w") as f: f.write(""" [users] admin = admin, admin [roles] role1 = * role2 = * role3 = * admin = * """) # (5) 启动 Zeppelin 服务 def start_zeppelin(): os.system("${ZEPPELIN_HOME}/bin/zeppelin-daemon.sh start") # 调用所有函数完成部署 upload_and_extract() modify_zeppelin_site() modify_zeppelin_env() configure_user_permissions() start_zeppelin() ``` 上述代码实现了以下功能: 1. **上传并解压**:将压缩包解压到指定目录。 2. **修改配置文件**:设置 `zeppelin-site.xml` 和 `zeppelin-env.sh` 的相关参数。 3. **配置用户权限**:在 `shiro.ini` 中添加管理员用户和角色权限。 4. **启动服务**:通过命令行启动 Zeppelin 服务。 --- #### 2. 使用Zeeplin访问Hive数据仓库的流程和步骤 以下是使用Python脚本模拟的Hive连接配置和SQL执行过程: ```python import jaydebeapi # Hive JDBC 连接信息 hive_jdbc_url = "jdbc:hive2://bigdatam10:10000" hive_user = "root" hive_password = "000000" hive_driver = "org.apache.hive.jdbc.HiveDriver" # 添加依赖库路径 hive_jars = [ "/opt/module/hive-2.3.9/lib/hive-jdbc-2.3.9.jar", "/opt/module/hive-2.3.9/lib/hive-service-rpc-2.3.9.jar", "/opt/module/hive-2.3.9/lib/hive-cli-2.3.9.jar", "/opt/module/hive-2.3.9/lib/hive-service-2.3.9.jar", "/opt/module/hive-2.3.9/lib/hive-common-2.3.9.jar", "/opt/module/hive-2.3.9/lib/hive-serde-2.3.9.jar", "/opt/module/hive-2.3.9/lib/guava-14.0.1.jar", "/opt/module/hive-2.3.9/lib/http-client-1.0.4.jar", "/opt/module/hive-2.3.9/lib/httpclient-4.4.jar", "/opt/module/hive-2.3.9/lib/httpcore-4.4.jar", "/opt/module/hive-2.3.9/lib/libthrift-0.9.3.jar", "/opt/module/hive-2.3.9/lib/commons-lang-2.6.jar", "/opt/module/hadoop-3.3.2/share/hadoop/common/hadoop-common-2.8.5.jar" ] # 创建 Hive 连接 conn = jaydebeapi.connect(hive_driver, hive_jdbc_url, [hive_user, hive_password], hive_jars) # 执行 SQL 查询 cursor = conn.cursor() cursor.execute("SELECT * FROM your_table LIMIT 10;") rows = cursor.fetchall() for row in rows: print(row) # 关闭连接 cursor.close() conn.close() ``` 上述代码中: 1. **JDBC连接**:使用 `jaydebeapi` 库连接 Hive 数据库。 2. **SQL执行**:通过 `execute` 方法执行 SQL 查询,并打印结果。 3. **关闭连接**:确保资源被正确释放。 --- ### 解释 1. **Zeppelin环境部署**: - 主要涉及解压、修改配置文件、设置用户权限和启动服务。 - 配置文件 `zeppelin-site.xml` 和 `zeppelin-env.sh` 是关键,分别用于设置服务器绑定地址和环境变量。 2. **Hive访问流程**: - 需要配置 Hive JDBC 连接信息(如 URL、用户名、密码)。 - 通过添加依赖 JAR 包,确保 Hive 客户端能够正常工作。 - 使用 Python 或其他语言连接 Hive 数据库时,需注意驱动程序和依赖库的版本兼容性。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值