hive local mr转

在hive中运行的sql有很多是比较小的sql,数据量小,计算量小.这些比较小的sql如果也采用分布式的方式来执行,那么是得不偿失的.因为sql真正执行的时间可能只有10秒,但是分布式任务的生成得其他过程的执行可能要1分钟.这样的小任务更适合采用lcoal mr的方式来执行.就是在本地来执行,通过把输入数据拉回客户端来执行.

拿select 1 from dual来看下,两种执行方式的效率差距.

分布式mr:

hive> select 1 from dual;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there’s no reduce operator
Selecting distributed mode: Input Size (= 10) is larger than hive.exec.mode.local.auto.inputbytes.max (= -1)
Starting Job = job_201208241319_7711163, Tracking URL = http://hdpjt:50030/jobdetails.jsp?jobid=job_201208241319_7711163
Kill Command = /dhwdata/hadoop/bin/../bin/hadoop job  -Dmapred.job.tracker=hdpjt:9001 -kill job_201208241319_7711163
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
2012-10-15 13:16:29,825 Stage-1 map = 0%,  reduce = 0%
2012-10-15 13:16:38,044 Stage-1 map = 100%,  reduce = 0%
Ended Job = job_201208241319_7711163
OK
1
Time taken: 15.278 seconds

本地mr:

hive> select 1 from dual;
Automatically selecting local only mode for query
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there’s no reduce operator
Execution log at: /tmp/dwapp/dwapp_20121015131717_eb78662f-2ccd-497c-a7eb-ba9a2234e153.log
Job running in-process (local Hadoop)
Hadoop job information for null: number of mappers: 0; number of reducers: 0
2012-10-15 13:17:28,644 null map = 0%,  reduce = 0%
2012-10-15 13:17:29,646 null map = 100%,  reduce = 0%
Ended Job = job_local_0001
2012-10-15 01:17:29     End of local task; Time Taken: 6.411 sec.
OK
1
Time taken: 7.859 seconds

因为仅仅是换了执行方式,效率提高了一倍.这还不算是差距大的,还遇到过效率差4倍以上的情况,如果jobtracker过忙,或者slots资源比较紧张的时候,这个差距会更大.

所以,合理的使用local mr对性能的提高有非常的提升.

下面两个参数是local mr中常用的控制参数:

1,hive.exec.mode.local.auto.inputbytes.max

设置local mr的最大输入数据量,当输入数据量小于这个值的时候会采用local  mr的方式

2,hive.exec.mode.local.auto.tasks.max

设置local mr的最大输入文件个数,当输入文件个数小于这个值的时候会采用local mr的方式

这个两个条件是与的条件,一定要都满足才可以

### 正确启动 Hive Metastore 服务并使用 Hive CLI 的方法 在解决 Hive Metastore 服务启动问题以及 Hive CLI 使用过程中终端无响应或无法输入的问题时,需要从多个角度进行排查和配置。以下是详细说明: #### 1. 启动 Hive Metastore 服务 Hive Metastore 服务的启动依赖于 MySQL 数据库服务以及 Hadoop 环境的正常运行。确保以下条件满足后,再尝试启动 Hive Metastore 服务。 - **启动 MySQL 服务**:MySQL 是 Hive Metastore 的存储后端,必须先启动 MySQL 服务。 ```bash service mysql start ``` [^3] - **启动 Hadoop 服务**:Hive 需要依赖 Hadoop 提供的分布式文件系统(HDFS)支持。如果 Hadoop 尚未启动,请执行以下命令: ```bash hdfs namenode -format # 如果是首次启动 Hadoop 或修改了 HDFS 存储设置,则需要执行该命令 start-all.sh mr-jobhistory-daemon.sh start historyserver ``` [^3] - **启动 Hive Metastore 服务**:在确认 MySQL 和 Hadoop 服务正常运行后,可以启动 Hive Metastore 服务。 ```bash nohup hive --service metastore & ``` #### 2. 使用 Hive CLI Hive CLI 是一个交互式工具,用于执行 Hive 查询。如果遇到终端无响应或无法输入的问题,可能是由于以下原因导致的: - **检查 Hive 配置文件**:确保 `hive-site.xml` 文件中正确配置了 Metastore 的连接信息。例如: ```xml <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive_metastore?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive_user</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive_password</value> </property> ``` [^3] - **启动 Hive CLI**:在确认配置文件无误后,可以启动 Hive CLI。 ```bash hive ``` 如果终端无响应或无法输入,可能是因为 Hive CLI 在启动时遇到了错误。可以通过以下方式排查: - 查看 Hive 日志文件(通常位于 `/tmp/<username>/hive.log`),定位具体的错误信息。 - 确保 Metastore 服务已成功启动,并且可以通过 JDBC 连接。 #### 3. 解决终端无响应或无法输入的问题 如果在使用 Hive CLI 时遇到终端无响应或无法输入的问题,可能是由于以下原因导致的: - **键盘输入法冲突**:在 Linux 系统中,某些输入法框架可能导致终端输入异常。建议切换到英文输入法,或者安装并配置 IBus 输入法框架[^2]。 ```bash sudo apt install ibus ibus-pinyin im-config -n ibus ``` - **虚拟机环境问题**:如果在虚拟机中使用 Hive CLI,可能是虚拟机键盘捕获机制导致的问题。可以尝试按下 `Ctrl + Alt` 组合键释放鼠标和键盘捕获,然后重新尝试输入。 - **Hive CLI 启动失败**:如果 Hive CLI 启动失败,可能是由于 Metastore 服务未正常运行或配置文件错误。可以通过以下命令检查 Metastore 服务状态: ```bash ps -ef | grep metastore ``` #### 4. 使用 Beeline 客户端替代 Hive CLI 如果 Hive CLI 的问题无法解决,可以考虑使用 Beeline 客户端替代。Beeline 是 Hive 提供的一个轻量级客户端,支持 JDBC 连接。 - **启动 Beeline 客户端**: ```bash beeline ``` - **连接到 Hive Server2**: ```sql !connect jdbc:hive2://localhost:10000 ``` 确保 Hive Server2 已启动: ```bash nohup hive --service hiveserver2 & ``` [^1] --- ### 注意事项 - 如果 Hive CLI 或 Beeline 客户端仍然无法正常使用,建议检查日志文件中的错误信息,进一步定位问题。 - 确保所有依赖服务(如 MySQL、Hadoop、Metastore)均已正常启动。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值