HIVE使用本地模式执行操作

博客指出将Hive的Job交给Yarn执行速度慢,而Hive支持本地模式。默认情况下,hive.exec.mode.local.auto为false,可通过设置为true开启本地模式,并给出测试例子,对比非本地模式和本地模式的执行情况。

将hive的Job交给yarn执行太慢,hive支持本地模式

set hive.exec.mode.local.auto=true;默认为false

测试例子:

试验:先创建一张表,指定文件格式为sequencefile
create table t_seq(id int, name string, addr string)
stored as sequencefile;
然后往表中插入数据,hive就会生成sequence文件插入表目录中
insert into table t_seq
select * from t_1;

 

非本地模式:(执行很慢)

0: jdbc:hive2://master.hadoop:10000> create table t_seq(id int, name string, addr string)
0: jdbc:hive2://master.hadoop:10000> stored as sequencefile;
No rows affected (0.936 seconds)
0: jdbc:hive2://master.hadoop:10000> desc t_seq;
+-----------+------------+----------+--+
| col_name  | data_type  | comment  |
+-----------+------------+----------+--+
| id        | int        |          |
| name      | string     |          |
| addr      | string     |          |
+-----------+------------+----------+--+
3 rows selected (0.271 seconds)
0: jdbc:hive2://master.hadoop:10000> insert into table t_seq
0: jdbc:hive2://master.hadoop:10000> select * from t_1;
INFO  : Number of reduce tasks is set to 0 since there's no reduce operator
INFO  : number of splits:1
INFO  : Submitting tokens for job: job_1535503381660_0001
INFO  : The url to track the job: http://master.hadoop:8088/proxy/application_1535503381660_0001/
INFO  : Starting Job = job_1535503381660_0001, Tracking URL = http://master.hadoop:8088/proxy/application_1535503381660_0001/
INFO  : Kill Command = /apps/hadoop-2.8.0//bin/hadoop job  -kill job_1535503381660_0001
INFO  : Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
INFO  : 2018-08-29 09:34:51,400 Stage-1 map = 0%,  reduce = 0%
INFO  : 2018-08-29 09:35:50,891 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 2.8 sec
INFO  : MapReduce Total cumulative CPU time: 2 seconds 800 msec
INFO  : Ended Job = job_1535503381660_0001
INFO  : Stage-4 is selected by condition resolver.
INFO  : Stage-3 is filtered out by condition resolver.
INFO  : Stage-5 is filtered out by condition resolver.
INFO  : Moving data to: hdfs://ns/user/hive/warehouse/mydb.db/t_seq/.hive-staging_hive_2018-08-29_09-33-06_088_8510141274510902888-1/-ext-10000 from hdfs://ns/user/hive/warehouse/mydb.db/t_seq/.hive-staging_hive_2018-08-29_09-33-06_088_8510141274510902888-1/-ext-10002
INFO  : Loading data to table mydb.t_seq from hdfs://ns/user/hive/warehouse/mydb.db/t_seq/.hive-staging_hive_2018-08-29_09-33-06_088_8510141274510902888-1/-ext-10000
INFO  : Table mydb.t_seq stats: [numFiles=1, numRows=6, totalSize=249, rawDataSize=84]
No rows affected (173.614 seconds)
0: jdbc:hive2://master.hadoop:10000> 
0: jdbc:hive2://master.hadoop:10000> show tables;
+-----------+--+
| tab_name  |
+-----------+--+
| t_1       |
| t_seq     |
+-----------+--+
2 rows selected (0.237 seconds)
0: jdbc:hive2://master.hadoop:10000> select * from t_seq;
+-----------+-------------+-------------+--+
| t_seq.id  | t_seq.name  | t_seq.addr  |
+-----------+-------------+-------------+--+
| 1         | user1       | 123123      |
| 2         | user2       | 123123      |
| 3         | user3       | 123123      |
| 1         | user1       | 123123      |
| 2         | user2       | 123123      |
| 3         | user3       | 123123      |
+-----------+-------------+-------------+--+
6 rows selected (0.28 seconds)
0: jdbc:hive2://master.hadoop:10000> 

本地模式:(注意执行之前添加这句set hive.exec.mode.local.auto=true;)

0: jdbc:hive2://master.hadoop:10000> drop table t_seq;
No rows affected (0.474 seconds)
0: jdbc:hive2://master.hadoop:10000> create table t_seq(id int, name string, addr string)
0: jdbc:hive2://master.hadoop:10000> stored as sequencefile;
No rows affected (0.236 seconds)
0: jdbc:hive2://master.hadoop:10000> desc t_seq;
+-----------+------------+----------+--+
| col_name  | data_type  | comment  |
+-----------+------------+----------+--+
| id        | int        |          |
| name      | string     |          |
| addr      | string     |          |
+-----------+------------+----------+--+
3 rows selected (0.225 seconds)
0: jdbc:hive2://master.hadoop:10000> set hive.exec.mode.local.auto=true;
No rows affected (0.055 seconds)
0: jdbc:hive2://master.hadoop:10000> insert into table t_seq
0: jdbc:hive2://master.hadoop:10000> select * from t_1;
INFO  : Number of reduce tasks is set to 0 since there's no reduce operator
INFO  : number of splits:1
INFO  : Submitting tokens for job: job_local1471930920_0001
INFO  : The url to track the job: http://localhost:8080/
INFO  : Job running in-process (local Hadoop)
INFO  : 2018-08-29 09:42:15,722 Stage-1 map = 100%,  reduce = 0%
INFO  : Ended Job = job_local1471930920_0001
INFO  : Stage-4 is selected by condition resolver.
INFO  : Stage-3 is filtered out by condition resolver.
INFO  : Stage-5 is filtered out by condition resolver.
INFO  : Moving data to: hdfs://ns/user/hive/warehouse/mydb.db/t_seq/.hive-staging_hive_2018-08-29_09-42-13_245_3754575447692258889-1/-ext-10000 from hdfs://ns/user/hive/warehouse/mydb.db/t_seq/.hive-staging_hive_2018-08-29_09-42-13_245_3754575447692258889-1/-ext-10002
INFO  : Loading data to table mydb.t_seq from hdfs://ns/user/hive/warehouse/mydb.db/t_seq/.hive-staging_hive_2018-08-29_09-42-13_245_3754575447692258889-1/-ext-10000
INFO  : Table mydb.t_seq stats: [numFiles=1, numRows=6, totalSize=249, rawDataSize=84]
No rows affected (3.024 seconds)
0: jdbc:hive2://master.hadoop:10000> show tables;
+-----------+--+
| tab_name  |
+-----------+--+
| t_1       |
| t_seq     |
+-----------+--+
2 rows selected (0.068 seconds)
0: jdbc:hive2://master.hadoop:10000> select * from t_seq;
+-----------+-------------+-------------+--+
| t_seq.id  | t_seq.name  | t_seq.addr  |
+-----------+-------------+-------------+--+
| 1         | user1       | 123123      |
| 2         | user2       | 123123      |
| 3         | user3       | 123123      |
| 1         | user1       | 123123      |
| 2         | user2       | 123123      |
| 3         | user3       | 123123      |
+-----------+-------------+-------------+--+
6 rows selected (0.281 seconds)
0: jdbc:hive2://master.hadoop:10000> 

 

Hive支持本地模式(Local Mode)的执行,这种模式适合在单机环境下进行测试或处理小规模数据。本地模式通过将MapReduce任务直接在本地运行,而非提交到Hadoop集群,从而减少资源开销和提升执行效率。以下是Hive本地模式的配置方法和使用指南。 ### 配置Hive本地模式 1. **修改Hive配置文件** 在`hive-site.xml`文件中添加或修改以下配置项以启用本地模式: ```xml <property> <name>hive.exec.mode.local.auto</name> <value>true</value> <description>启用自动本地模式执行</description> </property> ``` 通过设置`hive.exec.mode.local.auto`为`true`,Hive将根据数据量和任务复杂度自动决定是否使用本地模式执行任务[^1]。 2. **设置本地模式的最大输入数据量** Hive本地模式适用于小规模数据集,因此可以通过以下参数限制输入数据的大小: ```xml <property> <name>hive.exec.mode.local.auto.inputbytes.max</name> <value>134217728</value> <description>自动本地模式下输入数据的最大字节数,默认为128MB</description> </property> ``` 上述配置限制了Hive在自动本地模式下处理的最大输入数据量,默认值为128MB。如果输入数据量超过此限制,Hive将回退到集群模式执行。 3. **设置本地模式的最大任务数** 为了控制本地模式的任务复杂度,可以设置任务的最大数量: ```xml <property> <name>hive.exec.mode.local.auto.tasks.max</name> <value>4</value> <description>自动本地模式下任务的最大数量,默认为4</description> </property> ``` 上述配置限制了本地模式下并行执行的任务数量,默认值为4。如果任务数量超过此限制,Hive将不再使用本地模式[^1]。 ### 使用Hive本地模式Hive查询执行时,可以通过HiveQL语句动态启用本地模式,而无需更改配置文件。例如,在Hive命令行界面中执行以下命令: ```sql SET hive.exec.mode.local.auto=true; SET hive.exec.mode.local.auto.inputbytes.max=134217728; SET hive.exec.mode.local.auto.tasks.max=4; ``` 上述命令在当前会话中启用了本地模式,并设置了输入数据量和任务数的限制。这种方式适用于临时测试或调试场景[^2]。 ### 验证本地模式是否生效 执行查询后,可以通过查看Hive执行日志或任务信息验证本地模式是否生效。如果任务未提交到Hadoop集群,并且执行时间明显缩短,则说明本地模式已成功启用。 例如,执行以下查询: ```sql SELECT * FROM x; ``` 如果查询结果返回迅速且未出现Hadoop任务日志,则表示任务已通过本地模式执行。 ### 注意事项 - **数据规模限制**:本地模式适用于小规模数据处理,大规模数据仍需使用Hadoop集群模式。 - **性能优化**:适当调整`hive.exec.mode.local.auto.inputbytes.max`和`hive.exec.mode.local.auto.tasks.max`参数,以匹配实际数据量和任务需求。 - **兼容性**:确保Hive版本支持本地模式特性,部分旧版本可能需要手动编译或更新。 通过上述配置和使用方法,可以在Hive中启用本地模式,从而在单机环境下高效处理小规模数据集。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值