Bug死磕之hue集成的oozie+pig出现资源任务死锁问题

这两天,打算给现有的Apache Hadoop2.7.1的集群装个hue,方便业务人员使用hue的可视化界面,来做一些数据分析任务,这过程遇到不少问题,不过大部分最终都一一击破,收获经验若干,折腾的过程,其实也是一个学习的过程,一个历练的过程,我相信优秀的人,都是经历过无数磨难成就的,并且有着坚持不放弃的心态,迎接各种挑战,如果你总是遇到困难就放弃,那么你永远也不能成为最优秀的人,废话不多说了,下面开始进入正题: 框架版本如下: Centos6.5 Apache Hadoop2.7.1 Apache Hbase0.98.12 Apache Hive1.2.1 Apache Pig0.15.0 Apache oozie4.2.0 Apache Spark1.6.0 Cloudrea Hue3.8.1 (一)安装hue 1,到官网下载 http://gethue.com/category/release/ 2,解压到某个目录hue 3,安装依赖:yum install -y asciidoc cyrus-sasl-devel cyrus-sasl-gssapi gcc gcc-c++ krb5-devel libtidy libxml2-devel libxslt-devel make mysql mysql-devel openldap-devel python-devel sqlite-devel openssl-devel gmp-devel 4,进入hue目录,运行make apps编译 5,配置desktop/conf/hue.ini 6,启动build/env/bin/supervisor 杀死脚本(ps -ef | grep hue- | gawk '{print $2}' | xargs kill -9) 如果你的hue只是用来操作hive的,那么没必要安装oozie了,那么整个流程就简单了,进入hive目录启动memstore和hiveserver2服务即可: bin/hive --service metastore bin/hiveserver2 一个使用hue查询的hive的查询如下:

很漂亮,用来调试sql非常方便,如果你想使用工作流或者pig功能,那么就需要安装oozie了 oozie安装编译比较坑,这里需要注意一下,目前最新的版本oozie的最新版本是4.2.0,但是依赖的 hive只支持0.13.1 hbase支持到0.94.2 spark,hadoop,pig均可支持当然最新版本 而且pom文件里面用到的codehash镜像已经失效,如果不去掉,则会编译失败:

Java代码

  1. <repository>
  2. <id>Codehaus repository</id>
  3. <url>http://repository.codehaus.org/</url>
  4. <snapshots>
  5. <enabled>false</enabled>
  6. </snapshots>
  7. </repository>

(二) 安装oozie 1,下载oozie wget http://archive.apache.org/dist/oozie/4.2.0/oozie-4.2.0.tar.gz 2,解压至某个盘符,修改其根目录下的pom文件里面的pig(加载类是h2,代表hadoop2.x),hadoop,hbase,hive,spark等版本,hbase和hive使用最新的可能会编译失败,这一点需要注意,经测试hbase0.94.2和hive0.13.1可正常编译通过, 3,修改完毕后,执行编译 bin/mkdistro.sh -P hadoop-2 -DskipTests 或 mvn clean package assembly:single -P hadoop-2 -DskipTests 4,执行成功后,拷贝oozie-4.2.0/distro/target/oozie-4.2.0-distro.tar.gz 至安装目录, 具体请参考我的这篇文章: http://qindongliang.iteye.com/blog/2212503 (三)在hue里面测试pig脚本: 写一个简单的pig脚本:

点击运行,发现oozie会启动两个任务,一个是launcher,一个pig脚本,lancher任务一直卡着95%进度,不再有任何变化,而主体的pig脚本,则一直在初始化阶段,不能被执行,看日志log无任何错误,就是一直打印 Heart beat Heart beat Heart beat ...... 经过查资料,发现在集群小的时候,如果集群资源不充足,导致RM无法分配多个MR的资源,就会一直等待,然后整个任务就会处于假死状态,一直死锁不运行,其实就是多个MR任务,抢占资源,导致最后谁也运行不了造成的,如何解决? 方案一: 切换haodop集群默认使用的容量调度器为公平调度器,允许当前队列最多只能运行一个MR任务,多了就阻塞等待。 方案二: 切换haodop集群默认使用的容量调度器为公平调度器,创建多个队列把任务提交到不同的队列里面,避免资源抢占

Xml代码

  1. <property>
  2. <name>yarn.resourcemanager.scheduler.class</name>
  3. <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
  4. </property>
  5. <property>
  6. <name>yarn.scheduler.fair.allocation.file</name>
  7. <value>file:/%HADOOP_HOME%/etc/hadoop/fair-scheduler.xml</value>
  8. lt;/property>

fair-scheduler.xml配置:

Xml代码

  1. <?xml version="1.0"?>
  2. <allocations>
  3. <queue name="test">
  4. <minResources>1000 mb, 1 vcores</minResources>
  5. <maxResources>5000 mb, 1 vcores</maxResources>
  6. <maxRunningApps>1</maxRunningApps>
  7. <aclSubmitApps>webmaster</aclSubmitApps>
  8. <weight>2.0</weight>
  9. <schedulingPolicy>fair</schedulingPolicy>
  10. <queue name="test-sub">
  11. <aclSubmitApps>webmaster</aclSubmitApps>
  12. <minResources>500 mb, 1 vcores</minResources>
  13. </queue>
  14. </queue>
  15. <user name="root">
  16. <maxRunningApps>1</maxRunningApps>
  17. </user>
  18. <user name="webmaster">
  19. <maxRunningApps>1</maxRunningApps>
  20. </user>
  21. <!--
  22. <user name="gpadmin">
  23. <maxRunningApps>5</maxRunningApps>
  24. </user>-->
  25. <userMaxAppsDefault>1</userMaxAppsDefault>
  26. <fairSharePreemptionTimeout>30</fairSharePreemptionTimeout>
  27. </allocations>

关于hadoop的资源调度,请参考下面的链接: https://support.pivotal.io/hc/en-us/articles/201999117-How-to-Configure-YARN-Capacity-Scheduler-on-a-PHD-Cluster 修改完成后同步分发所有的hadoop节点,并拷贝一份到oozie/conf/hadoop-conf/下面一份,重启hadoop集群和oozie服务,再次执行脚本,发现运行没有问题:

如果还想配置,solr,hbase,只要在hue.ini里面配置即可,注意hbase的服务,需要启动hbase的thrift端口才行, bin/hbase-daemon.sh start thrift 然后在hue.ini里面配置: hbase_clusters=(Cluster|h1:9090),必须是这种格式,否则hue不会识别

配置solr比较简单,支持写上solr的url即可:

原文发布于微信公众号 - 我是攻城师(woshigcs)

原文发表时间:2016-01-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏渠道合作伙伴技术圈

Windows server环境下混合云部署DFS文件服务

很多传统企业在设计身份验证和文件服务时,都会使用微软的活动目录和windows server自带的文件共享来实现以上的需求, 公有云的出现给这个场...

84316
来自专栏公有云大数据平台弹性 MapReduce

YARN之label调度在EMR中的应用

在腾讯云EMR的用户场景使用当中,有部分用户要求希望他们能在任务高峰期,对集群进行扩容,利用云端的弹性计算资源,为集群扩展计算能力,并且在集群相对空闲的情况下,...

3123
来自专栏北京马哥教育

使用monit搭建一个监控系统

马哥linux运维 | 最专业的linux培训机构 ---- 上周用monit搭建或者说定制了一个监控系统,来监控服务器发生事情。当然了主要是监控异常,因为我...

4217
来自专栏安智客

Android 8.0 中的安全增强功能

每个 Android 版本中都包含数十种用于保护用户的安全增强功能。以下是 Android 8.0 中提供的一些主要安全增强功能: 加密:在工作资料中增加了对...

24610
来自专栏PPV课数据科学社区

工具 | 大数据系列(3)——Hadoop集群完全分布式坏境搭建

文|指尖流淌 前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一...

3596
来自专栏蓝天

Linux后台开发常用工具

pwdx - report current working directory of a process,格式:pwdx pid 内存分析工具 v...

1622
来自专栏散尽浮华

Linux下日志文件监控系统Logwatch的使用记录

在维护Linux服务器时,经常需要查看系统中各种服务的日志,以检查服务器的运行状态,如登陆历史、邮件、软件安装等日志。作为运维人员,我们一个个去检查会十分不方便...

51810
来自专栏Linux运维学习之路

zabbix自动发现与自动注册及SNMP监控

自动发现与自动注册 自动发现:zabbix Server主动发现所有客户端,然后将客户端登记自己的小本本上,缺点zabbix server压力山大(网段大,客户...

8658
来自专栏步履前行

RabbitMQ学习 (二)---多消费者工作时的消息处理

ACK 在上一篇中,我们尝试安装并且运行了一个一对一的MQ,这一篇中,我们来看下多消费者和持久化相关的问题! 在我们的应用中,应用通常部署多个服务(当然,你部...

5696
来自专栏企鹅号快讯

Flume和Kafka

Flume+Kafka+Storm+Redis实时分析系统基本架构 1) 整个实时分析系统的架构是 2) 先由电商系统的订单服务器产生订单日志, 3...

6786

扫码关注云+社区

领取腾讯云代金券