beeline 将查询的数据导出来_Hive数据导出的几种方式

本文详细介绍了Hive数据导出的六种方式,包括使用beeline或hive -e执行查询重定向、insert overwrite、export、拷贝文件以及sqoop导出到关系型数据库。针对不同数据量、格式需求和存储位置,给出了每种方式的适用场景及注意事项,帮助选择最佳导出策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在hive的日常使用中,经常需要将hive表中的数据导出来,虽然hive提供了多种导出方式,但是面对不同的数据量、不同的需求,如果随意就使用某种导出方式,可能会导致导出时间过长,导出的结果不满足需求,甚至造成集群资源不必要的浪费。因此本文主要对hive支持的几种导出方式的使用进行整理,并给出每种导出方式的使用场景,便于指导操作者能够选取最佳的导出方式。

利用insert overwrite的方式,将查询结果导出到本地或HDFS

(1)导出到本地文件系统

示例如下:

insert overwrite local directory '/home/data/' select * from hive_table;

(2)导出到HDFS

导入到HDFS和导入本地文件类似,去掉HQL语句的LOCAL就可以了。

示例如下:

insert overwrite directory '/home/data/' select * from hive_table;

利用insert overwrite将查询结果导出本地或hdfs的方式可以指定导出的数据格式和字段的分割符,示例如下:

insert overwrite local directory '/home/data/' select * from hive_table

row format delimited fields terminated by ‘\t’  #字段间用\t分割

stored as textfile;   #导出文件的存储格式为textfile

使用场景:

1) 由于这种方式导出数据时会启动MApReduce任务来完成导出,所以这种方式不适合导出数据量极少的情况,因为数据量很少时也会启MapReduce任务消耗集群资源,且导出速度比不启MapReduce导出方式的速度要慢;

2) 适用于对导出数据格式有要求的场景,如:指定数据文件类型、字段分割符;

3) 这种方式导出的路径只能指定到文件夹,不支持导出到指定的文件中,且在文件夹下可能产生多个文件,并非仅一个文件,所以此方式适用于将数据导出到本地或HDFS目录下,且对存储数据的文件名和文件数量无要求。

利用beeline或hive -e执行查询,通过重定向方式将查询结果写到指定的文件中。

使用beeline执行示例:

beeline -u jdbc:hive2://hadoop1:10000/default "select * from hive_table" > /home/data/data.txt

使用hive -e执行示例:

hive -e "select * from hive_table" > /home/data/data.txt;

注:如果追加,使用“>>”重定向到文件中;如果覆盖,使用“>”重定向到文件中。

适用场景:

1)这种方式导出数据时不会启动MapReduce任务,适用于数据量较少的情况;

2)此方式支持指定导出的文件名,导出的结果只能存放到本地,且只生成一个文件,所以适用于将hive数据导出到本地的某个文件中的场景。

3)不支持指定导出文件的分割符。

导出到hive到另一个表中

示例如下:

insert into table new_table select * from hive_table;

适用场景:适用于将导出的结果存放到另一张hive表中,便于通过sql做二次分析。

使用export导出

示例如下:

export table hive_table to '/home/data/';

适用场景:这种方式只能导出数据到HDFS上,但是导出的速度比较快,因此适用于hive数据的批量迁移。

拷贝文件

将hive数据拷贝到HDFS示例:

hdfs dfs -cp /user/hive/warehouse/hive_table /home/data/;

将hive数据保存到本地:

hdfs dfs -get /user/hive/warehouse/hive_table /home/data/;

使用场景:适用于数据文件恰好是用户需要的格式,只需要拷贝文件或文件夹就可以。

通过sqoop将hive表导出到关系型数据库

Sqoop是连接关系型数据库和hadoop的桥梁,主要有两个方面:一是将关系型数据库的数据导入到hadoop及其相关的系统中,如Hive和Hbase;二是将数据从Hadoop系统里抽取并导出到关系型数据库中。这里以将hive数据导入到mysql库为例。

示例如下:

./sqoop export \

--connect jdbc:mysql://192.168.0.70:3306/sqooptest \ #数据库连接url

--username root \ #数据库用户名

--password 123456 \ #数据库密码

--table person_hive \ #要导入到的关系数据库表

--num-mappers 1 \ #启动N个map来并行导出数据

--export-dir /user/hive/warehouse/sqooptest.db/person #导出hive表数据存储路径

--input-fields-terminated-by "\t" #字段间的分隔符

适用场景:这种方式适用于将hive表数据导入到关系数据库中。

以上共整理了6种hive数据导出的方式,每种导出方式都有各自的应用场景,在选择导出方式时,首先应该考虑导出数据的存储位置,主要包括:本地、HDFS、Hive表、关系型数据库;其次是导出数据的存储格式,如果对导出格式有要求,一定要从可以指定数据格式的方式中选;最后是导出的数据量,如果数据量小,避免选择会启MapReduce任务的导出方式,可以减少导出时间。

导出的hive数据时的注意事项:

hive导出时需要需要修改yarn的队列和对输出结果进行压缩。

(1)调整yarn的队列

步骤一:调整主备节点上的默认队列的优先级,调整为10。如图:

8762e9537ce853a33b8bee555940052d.png

步骤二:在主备节点上执行以下命令:

yarn  rmadmin  -refreshQueues

(2)在执行语句中加入对结果压缩的配置,配置内容如下:

set hive.exec.compress.output=false;set mapred.output.compress=false;

使用示例如下:

hive -e "set hive.exec.compress.output=false;set mapred.output.compress=false;insert overwrite local directory '$dpath' row format delimited fields terminated by '\t' NULL DEFINED AS '' select * from  $ttb;"

### 回答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 其中,localhost表示HiveServer2运行的机器地址,10000表示HiveServer2提供服务的端口号,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、付费专栏及课程。

余额充值