Apache Hive插入数据卡住求助:伪分布式Hadoop环境
解决Hive伪分布式环境下INSERT语句卡住的问题
看起来你遇到的是Hive在伪分布式Hadoop环境中执行插入操作时的典型问题,结合你的日志和场景,我来帮你分析原因并给出可行的解决方案:
核心原因分析
从你的执行日志里能抓取到两个关键线索:
- 系统明确提示
Hive-on-MR is deprecated——Hive-on-MR是老旧的MapReduce执行引擎,效率极低,在伪分布式这种资源有限的环境下,多Job的插入操作很容易陷入阻塞。 - 任务启动了3个Job但卡在第一个阶段,结合伪分布式的特性,大概率是资源分配不足或者HDFS副本配置不合理导致的。
另外结合你提到的任务跟踪页面(截图),推测任务大概率处于Pending状态或Map/Reduce任务无法正常启动——这通常和YARN的资源配额、HDFS的副本策略直接相关。
具体解决方案
1. 修正HDFS副本数配置(伪分布式必改)
伪分布式环境只有一个DataNode,而HDFS默认副本数是3,这会导致写入数据时系统一直等待副本复制到其他节点,最终卡住:
- 查看当前副本数:
hdfs dfs -getconf -confKey dfs.replication - 如果结果是3,修改
$HADOOP_HOME/etc/hadoop/hdfs-site.xml,添加或更新配置:<property> <name>dfs.replication</name> <value>1</value> </property> - 重启HDFS服务:
stop-dfs.sh start-dfs.sh
2. 调整YARN资源配置适配伪分布式
伪分布式下默认的YARN资源分配过小,导致任务无法获取足够内存启动:
- 修改
$HADOOP_HOME/etc/hadoop/yarn-site.xml(以4G内存的机器为例,可根据实际内存调整):<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>2048</value> </property> - 修改
$HADOOP_HOME/etc/hadoop/mapred-site.xml:<property> <name>mapreduce.map.memory.mb</name> <value>512</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>1024</value> </property> - 重启YARN服务:
stop-yarn.sh start-yarn.sh
3. 替换为高效的执行引擎(替代Hive-on-MR)
Hive-on-MR已经被官方废弃,效率极低,建议换成Tez或Spark:
- 临时启用Tez(无需修改配置文件):
在Hive命令行中先执行:
再运行你的INSERT语句即可。set hive.execution.engine=tez; - 永久启用Tez:
修改$HIVE_HOME/conf/hive-site.xml,添加:
(注:如果环境未安装Tez,需先完成Tez的安装配置,新手推荐先试用临时启用的方式)<property> <name>hive.execution.engine</name> <value>tez</value> </property>
4. 验证Hadoop服务状态
确保核心服务都在运行:
jps
你应该能看到NameNode、DataNode、ResourceManager、NodeManager这几个进程,若有缺失,重启对应的服务即可。
5. 通过YARN日志定位深层问题
如果以上步骤未解决问题,打开YARN的Web UI(你日志中的http://neron-Latitude-3580:8088),找到对应的Job,查看任务的详细日志,里面会明确显示阻塞的具体原因(比如内存不足、权限异常等)。
额外小提示
你的INSERT语句中第二个邮箱Swetha@loonycorn缺少后缀,但这属于数据内容问题,不会导致任务卡住,无需担心。
内容的提问来源于stack exchange,提问作者Neron Joseph
相关产品推荐
相关产品推荐

