beeline 将查询的数据导出来_hive中beeline取回数据的完整流程

本文详细解析了BeeLine如何执行HQL查询并导出数据的过程,包括BeeLine.execute、dispatch和Commands.execute等关键步骤,以及HiveStatement、HiveQueryResultSet和BufferedRows的使用。在数据获取过程中,客户端通过TCLIService.thrift协议与服务端交互,执行OpenSession、FetchResults、CloseOperation等操作,确保数据完整获取。
摘要由CSDN通过智能技术生成

这里我们从BeeLine.execute讲起。

接下来来到BeeLine.dispatch,这里的入参就是sql语句。方法的最后调用了Commands.sql,然后调用到了Commands.execute。

如下图所示,这里是Commands.execute中的关键逻辑。

1.调用BeeLine.createStatement,该方法间接调用了HiveConnection.createStatement。在后面的方法中构建了HiveStatement。

2.调用了Commands.createLogRunnable,在该方法中循环调用HiveStatement.hasMoreLogs。并且将方法HiveStatement.getQueryLog中获取到的数据使用BeeLine.info输出到控制台。该方法封装为Runnable然后返回,后面使用线程封装并调用。

3.调用HiveStatement.execute,该方法首先调用closeClientOperation与initFlags重置了部分成员变量,以便下一次调用。

4.然后调用Client.ExecuteStatement,获取返回的operationHandle,并为下一次调用做准备。

5.遍历调用Client.GetOperationStatus,直到获取的状态为CLOSED_STATE或FINISHED_STATE,此时就可以将变量operationComplete置为true,跳出循环。

6.构造结果集HiveQueryResultSet并返回。在构造期间我们需要注意这里会调用到HiveQueryResultSet.retrieveSchema。这里间接调用了Client.GetResultSetMetadata。

7.后面调用了showRemainingLogsIfAny,该方法间接调用到了HiveStatement.getQueryLog,该方法内部就调用了Client.FetchResults。

这里有一个令人疑惑的地方—

### 回答1: 使用SparkSQL可以通过HiveServer2和Beeline查询Hive数据。具体步骤如下: 1. 首先需要启动HiveServer2服务,可以通过以下命令启动: ``` $ hive --service hiveserver2 ``` 2. 然后使用Beeline连接到HiveServer2,可以通过以下命令连接: ``` $ beeline -u jdbc:hive2://localhost:10000 ``` 其,localhost为HiveServer2所在的主机名或IP地址,10000为HiveServer2的端口号。 3. 连接成功后,可以使用SparkSQL语句查询Hive数据,例如: ``` SELECT * FROM mytable; ``` 其,mytable为Hive名。 4. 查询完成后,可以使用exit命令退出Beeline。 ``` !exit ``` 以上就是使用SparkSQL查询Hive数据的步骤。 ### 回答2: SparkSQL作为一种分布式计算引擎,与Hive的结合非常紧密,能够支持基于Hive数据的DDL操作和HiveQL语言的查询。而HiveServer2作为Hive服务的一种实现,提供了支持多客户端并发访问的能力,通过Beeline客户端即可与HiveServer2进行交互。 下面我们主要介绍使用SparkSQL和HiveServer2 + Beeline查询Hive数据的步骤: 1.启动HiveServer2服务 首先需要启动HiveServer2服务,如果已经启动过则可以跳过此步骤。可以通过hive-site.xml配置文件hive.server2.enable.doAs参数来开启该服务,如下面的配置: <property> <name>hive.server2.enable.doAs</name> <value>true</value> </property> 2.启动Beeline客户端 接着我们需要启动Beeline客户端,并连接到HiveServer2服务。在命令行输入以下命令: beeline -u jdbc:hive2://localhost:10000/default 其,localhostHiveServer2运行的机器地址,10000HiveServer2提供服务的端口号,default示默认的数据库名称。 3.使用SparkSQL语法查询Hive数据Beeline客户端,使用SparkSQL语法即可查询Hive数据。例如,我们可以使用以下命令查询一张名为student的数据: SELECT * FROM student; 如果需要查询其他的数据库,可以使用USE语句切换到相应的数据。例如,使用以下命令切换到名为test的数据: USE test; 然后再执行相应的查询语句即可。 总之,通过SparkSQL和HiveServer2 + Beeline的组合使用,可以非常方便地进行Hive数据查询和分析。无需手动编写MapReduce程序,只需使用简单的SQL语句即可查询并分析庞大的Hive数据。同时,SparkSQL还能够与其他Spark生态系统的组件无缝集成,如Spark Streaming、MLlib等等,提供全面的数据处理和分析能力。 ### 回答3: SparkSQL是Apache Spark生态系统的一款数据处理工具,提供了结构化数据处理的功能。它可以通过使用Hive元存储实现与Hive的互操作性,与Hive集成使用可以提高开发的性能和执行效率。 SparkSQL通过HiveServer2和Beeline连接到Hive,可以在SparkSQL使用Hive所有的数据操作指令。在使用之前,需要首先配置正确的连接信息。一般而言,使用以下命令可以实现连接: ```bash ./bin/beeline !connect jdbc:hive2://<host>:<port>/<dbname>;user=<username> ``` 其,`<host>`为HiveServer2所在的机器IP地址或主机名, `<port>`为HiveServer2的端口号,`<dbname>`为Hive数据库名称,`<username>`为Hive用户名称。 连接成功后,可以使用SparkSQL查询语句直接查询Hive数据。例如: ```sql SELECT * FROM table_name LIMIT 10; ``` 以上命令会在SparkSQL查询Hive名为`table_name`的数据,并且返回前10行数据。除此之外,还可以使用SparkSQL的一些其他的数据操作指令对Hive数据进行处理,例如: **创建** ```sql CREATE TABLE my_table (id INT, name STRING, age INT); ``` **插入数据** ```sql INSERT INTO my_table VALUES (1, "Tom", 20); ``` **联接** ```sql SELECT t1.id, t1.name, t2.age FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id; ``` 总之,使用SparkSQL连接Hive的方式可以大幅提高使用Hive进行数据处理的效率,它基于内存的高速数据处理引擎,可以在大规模的数据处理任务现出色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值