Beeline命令行操作

article/2025/9/28 14:11:39

通过上一小节对Hive-Cli的一些操作,可以掌握基本的Hive的语法了,本小节需要讲解一下Beeline客户端的一些操作,其实Beeline的语法和Hive客户端的基本一致,但是Hive自身的客户端只能自己用,别人连不上去,要想多个用户访问,必须使用HiveServer2。话不多说,直接进入Beeline-Cli输入一些语句来看一下结果,

$beeline>

$beeline>!help //查看帮助

$beeline>!close //关闭当前连接

$beeline>!connect jdbc:hiveserver2://localhost:10000/myhive

$beeline>!tables; //显式表

$beeline>show tables; //展示表

$beeline>!sh clear ; //执行shell脚本命令

$beeline>!quit; //退出beeline终端

$beeline>select count(*) from t1 ; //查询表t1的行数

$beeline>select max(*) from t1 ; //查询表t1的最大值

$beeline>select min(*) from t1 ; //查询表t1的最小值

$beeline>select sum(*) from t1 ; //查询表t1所有value值的和

$beeline>select avg(*) from t1 ; //查询表t1的平均值

limit的使用,Hive没有像MySql那样的limit start,end那样的写法实现分页,所以需要使用别的方式来实现分页。Hive使用limit的前一个参数表示的是去掉前几个数值,从下一个数值开始计数,第二个参数表示的是查询数值的个数。用limit分页明显减少shuffle的量,因为如果不用limit的话,所有的Map数据都到Reduce端上去了。

Hive中的order by跟传统的hql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有Hive的hql中制定了order by所有的数据都会到同一个reducer进行处理(不管有多少Map,也不管文件有多少的block只会启动一个reducer)。但是对于大量数据这将会消耗很长的时间去执行。

这里跟传统的sql还有一点区别:如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数。关于limit有几个常用的应用场景:(1)随着起始记录的增加,时间也随着增大,说明分页语句limit跟起始页码是有很大关系的。(2)严格模式可以防止用户执行那些可能意想不到的不好的影响的查询。增加limit语句可以防止Reducer额外执行很长一段时间。

Hive中指定了sort by(在reduce端进行部分排序),那么在每个reducer端都会做排序,也就是说保证了局部有序(每个reducer出来的数据是有序的,但是不能保证所有的数据是有序的,除非只有一个reducer),好处是:执行了局部排序之后可以为接下去的全局排序提高不少的效率(其实就是做一次归并排序就可以做到全局排序了)。关于limit和order by/sort by的具体操作代码如下, 

$beeline>select * from t1 order by id limit 5,5 ;

//嵌套的使用

$beeline>select * from (select id,name from t1) a ;

//case when等价于if / switch case

$beeline>select id , case when id < 3 then 'small'

case when id = 3 then 'three'

else 'big'

end as de from t1 ;

由于Beeline和Hive一样,都是用来操作Hive表,因此内部使用的框架是MapReduce,接下来首先详细讲一下Map端的连接以及操作,

首先需要禁用cbo,启用hint[1]。有时面对大量的数据和频繁DML操作的表,Hive自己在执行hql的时候可能也会发生错误,走错执行路径,你可能有时会发现一条很简单的hql语句执行了半天还没出来。这时候你就需要通过查看hql的执行轨迹是否符合正确的最好的那一条。不对的话就需要我们人为的干扰hql的执行,这时候就需要hint。接下来是关于Map的连接操作。

$beeline>set hive.cbo.enable=false; //过时了

$beeline>set hive.auto.convert.join=true; //默认开启了

$beeline>set hive.mapjoin.smalltable.filesize=25000000; //设置map端连接的文件大小

select /*+ mapjoin(a) */ a.*,b.* from customers a left outer join orders b on a.id = b.cid ;(对a进行map端连接)

$beeline> set hive.auto.convert.join.noconditionaltask=true; //不需要在select中使用/*+ streamtable(customers) */暗示

关于Map的连接操作,还可以对Map bucket端进行连接,

SET hive.auto.convert.join=true; --default false 

SET hive.optimize.bucketmapjoin=true; --default false 

以上是关于Map和Map bucket的连接操作,除了这个以外,Map还有一个严格模式:order by时,是否必须使用limit语句指定数量。(由于order by是对所有的数据进行排序,所以考虑到对Hive的性能,因此严格模式中必须使用limit语句对查询数据进行条数的限制。)

$beeline>set hive.mapred.mode=strict //不推荐使用,推荐下方的三个属性

$beeline>hive.strict.checks.large.query=false //大型查询检查:无limit order by,

//Orderby without limit.

//No partition being picked up for a query against partitioned table.

//Note that these checks currently do not consider data size, only the query pattern.

$beeline>set hive.strict.checks.type.safety //默认true

$beeline>set hive.strict.checks.cartesian.product //默认true

$beeline>set hive.strict.checks.large.query=false //默认false

设置了严格模式之后,接下来就是了解Map的操作,关于Map操作,就是处理Map格式的数据,然后将这些数据存储成文件名为map1.dat的文件,具体的数据如下所示,

1 phisic:80,huaxue:78,shuxue:99

2 music:80,history:78

3 tiyu:80,song:78

数据准备之后,就是将该文件内容加载到表map1中,然后使用select语句查询数据是否成功插入,具体操作代码以及运行结果如下,

 

熟悉了Map端的操作之后,来看看Reduce端的操作,Reduce首先可以设置它的个数。Reduce个数的设定极大影响任务执行效率,不指定Reduce个数的情况下,Hive会猜测确定一个Reduce个数,基于以下三个设定:

set hive.exec.reducers.bytes.per.reducer=<number> //每个reduce处理的字节数,默认256000000

set hive.exec.reducers.max=<number> //reduce个数的最大值,默认1009

set mapreduce.job.reduces=<number> //reduce个数,默认1

通过以上的一些命令行操作,我们已经可以简单的操作Hive了,但是操作Hive不光可以使用Hive客户端,也可以使用java语言来操作Hive,运用java就需要使用java中的jdbc来操作Hive表,首先导入一些java sql的包,然后创建App的类以及main函数,再使用getConnection来连接Hive,最后在execute方法中直接输入需要操作的语句即可。具体代码如下,

package com.lvqianqian.myhive210; 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import org.junit.Test;

/**

* jdbc操纵hive表

*/

public class App {

public static void main(String[] args) throws Exception {

Class.forName("org.apache.hive.jdbc.HiveDriver");

Connection conn = DriverManager.getConnection("jdbc:hive2:// hadoop0:10000/myhive");

Statement st = conn.createStatement();

st.execute("drop table user2");

st.close();

System.out.println("ok");

}

@Test

public void testFind() throws Exception{

Class.forName("org.apache.hive.jdbc.HiveDriver");

Connection conn = DriverManager.getConnection("jdbc:hive2:// hadoop0:10000/myhive");

Statement st = conn.createStatement();

ResultSet rs = st.executeQuery("select * from t1");

while(rs.next()){

int id = rs.getInt("id");

String name = rs.getString("name");

int age = rs.getInt("age");

String prv = rs.getString("province");

String city= rs.getString("city");

System.out.println(id + "," + name + "," + age + "," + prv + "," + city) ;

}

st.close();

}

}

 


http://chatgpt.dhexx.cn/article/2sclZAs9.shtml

相关文章

Linux通过beeline连接远程Hive

Linux需要连接远程Hive&#xff0c;可以使用beeline。 一、确保服务器已经安装配置了java环境&#xff1b; 二、下载hadoop和hive相关的包 wget https://archive.apache.org/dist/hadoop/core/hadoop-2.7.3/hadoop-2.7.3.tar.gz wget https://archive.apache.org/dist/hive/…

由“Beeline连接HiveServer2后如何使用指定的队列(Yarn)运行Hive SQL语句”引发的一系列思考

背景 我们使用的HiveServer2的版本为0.13.1-cdh5.3.2&#xff0c;目前的任务使用Hive SQL构建&#xff0c;分为两种类型&#xff1a;手动任务&#xff08;临时分析需求&#xff09;、调度任务&#xff08;常规分析需求&#xff09;&#xff0c;两者均通过我们的Web系统进行提交…

beeline

beeline -u jdbc:hive2://192.168.1.102:10000 本文转自 yntmdr 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/yntmdr/1730234&#xff0c;如需转载请自行联系原作者

Sentry Beeline

环境 Ubuntu STL 16.0.4 Hadoop 2.7.4 Hive 2.1.1 sentry 1.7.0 maven 3.5.0//注&#xff1a;伪分布式环境 安装maven 1.apache maven官网下载maven&#xff0c;用于编译sentry源码。 2.修改&#xff5e;&#xff0f;.bashrc文件&#xff0c;添加maven路径。 export MAVEN_…

beeline 使用

最近对hive设置权限&#xff0c;具体设置权限的方法请参考http://blog.csdn.net/qq_31382921/article/details/71133323&#xff0c;使用beeline的时候总会出现各种小问题&#xff0c;毕竟还是跟hive有点区别。 beeline 常用语法&#xff1a; 1. beeline -u “jdbc:hive2://n…

hive之beeline连接与操作

hive之beeline连接与操作 一、连接配置1.连接测试1.1前提1.2启动hive服务1.3测试连接 2.问题解决1.解决方式2.连接 二、操作1.beeline操作 一、连接配置 1.连接测试 1.1前提 hadoop集群、hive已正常安装&#xff0c;hadoop集群已启动 1.2启动hive服务 先启动 metastore 服…

Hive _ Hive2 新版连接工具 beeline 详解

Hive客户端工具后续将使用Beeline 替代HiveCLI &#xff0c;并且后续版本也会废弃掉HiveCLI 客户端工具。 Beeline是Hive新的命令行客户端工具。 Beeline是从 Hive 0.11版本引入的。 HiveServer2 支持一个新的命令行Shell&#xff0c;称为Beeline&#xff0c;它是基于SQLLine …

Hive3详细教程(四)beeline的使用

beeline提供了命令行中以简单字符串拼凑的图形形式的表结构&#xff0c;如下图所示&#xff0c;比hive客户端有更好的用户体验度。 配置beeline连接&#xff0c;需要在hadoop的etc/core.site.xml文件中添加以下配置权限代码&#xff1a; <property><name>hadoop.…

Hive CLI和Beeline命令行的基本使用

一、Hive CLI 1.1 Help 使用 hive -H 或者 hive --help 命令可以查看所有命令的帮助&#xff0c;显示如下&#xff1a; usage: hive-d,--define <keyvalue> Variable subsitution to apply to hive commands. e.g. -d AB or --define AB --定义用户自定义变…

【Qt学习】OpenCV帧差法 车辆识别

目录 一&#xff1a;效果展示 二&#xff1a;Qt UI界面设计 三&#xff1a;源码分享 一&#xff1a;效果展示 使用Qt界面实现 点击 线程启动按钮播放视频 同时 左边界面显示原视频 右边界面显示车辆识别视频 初始界面 点击线程启动后&#xff0c;即可车辆识别 框选车辆 二&a…

【车辆识别】基于卷积神经网络yolov3识别车辆和车辆速度附matlab代码

1 简介 近年来,自动驾驶研究,智慧交通建设突飞猛进,车辆检测技术成为业界的研究热点.由于深度卷积神经网络具有一定的旋转与平移不变性等特点,在车辆检测任务中得到广泛应用,其中,YOLOv3(You Only Look Once version 3)算法是目前主要的检测算法之一. 2 部分代码 clearclc​%…

基于深度学习的车牌+车辆识别(YOLOv5和CNN)

yolov5车牌识别+车辆识别 行人识别yolov5和v7对比 订阅专栏获得源码(提供完整代码,无需看下文) 基于深度学习的车牌识别(YOLOv5和CNN) 目录 一、综述 二、车牌检测 一、综述 本篇文章是面向的是小白,想要学习深度学习上的应用,本文中目前应用了YOLO v5和CNN来对车牌进行…

Qt +opencv 通过级联分类器训练的模型进行识别(车辆识别+人脸识别)

有不对的或更好的方法欢迎交流 一些内容可参照这篇文章&#xff1a;https://blog.csdn.net/m0_64596200/article/details/126748697?spm1001.2014.3001.5502 训练好的的模型&#xff1a; 车辆识别模型&#xff1a;https://download.csdn.net/download/m0_64596200/86507302?…

机器学习1:OpenCV4.5.5加载xml进行车辆识别

深度学习准确率高识别效果好&#xff0c;但是对软硬件环境要求高&#xff0c;使用及部署有一定难度&#xff0c;应用受限。相比之下&#xff0c;机器学习效果差一个量级&#xff0c;但是计算量小&#xff0c;计算迅速&#xff0c;部署相对容易&#xff0c;尤其是在一些计算能力…

基于YOLOv5的车辆识别系统

基于YOLOv5的车辆识别系统&#xff08;展示&#xff09; 文章目录 基于YOLOv5的车辆识别系统&#xff08;展示&#xff09;前言车牌识别车型识别 前言 YOLO能实现图像或视频中物体的快速识别&#xff0c;在相同的识别类别范围和识别准确率条件下&#xff0c;YOLO识别速度最快。…

Review of Vehicle Recognition Technology - 车辆识别技术综述

Review of Vehicle Recognition Technology - 车辆识别技术综述 ZHANG Qiang, LI Jiafeng, ZHUO Li Faculty of Information Technology, Beijing University of Technology, Beijing 100124, China 北京工业大学信息学部&#xff0c;北京 100124 Beijing University of Tech…

deeplearning.36车辆识别YOLO算法实践

车辆识别 下载相关资料导入相关包数据集定义YOLO模型细节分类阈值过滤非最大值抑制非最大值抑制函数对所有框进行过滤 测试训练好的yolo模型定义分类、锚框、图像维度加载已经训练好的模型模型的输出转换为边界框过滤锚框实际图像中运行计算图实际预测一下 下载相关资料 下载本…

基于python的transform行人车辆识别

Transformer是一种神经网络体系结构&#xff0c;由于它能够有效地处理顺序数据中的长期依赖性&#xff0c;因此在自然语言处理(NLP)任务中受到欢迎。它还被应用于各种其他任务&#xff0c;包括图像分类、对象检测和语音识别。 在车辆和行人识别方面&#xff0c;transformer可用…

使用Python和docTR提取车辆识别号

VIN&#xff08;车辆识别号&#xff09;是一个17个字符的字符串&#xff0c;由数字和大写字母组成&#xff0c;用作汽车的指纹。 它可以帮助识别任何一辆汽车的寿命&#xff0c;并获得有关它的具体信息。该唯一标识符在制造过程中打印在车辆的某个位置&#xff0c;以便人们在租…

Opencv python之车辆识别项目(附代码)

文章目录 图片车辆识别视频车辆识别 图片车辆识别 根据文章搭建好环境后开始进行做项目link import sys import cv2 from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtGui import QIcon, QPalette, QPixmap, QBrush, QRegExpValidatorclass mainWin(QW…