ios yarn 如何配置_基于腾讯云 EMR 大数据平台配置踩坑

14cea7f003d3e17a46b01923edaefd1c.png

状况:公司大数据刚起步没有经验,18年购买了 腾讯云的 EMR 服务 3 * 4核8G 的集群,配置的是 spark on yarn 。所有任务用在msater上用 python+crontab 提交到spark。此时可用的 EMR 组件只有: hdfs, sqoop, hive, hbase, spark。接下来我就讲诉一下我是如何一步步的把hive 引擎配置成 TEZ;把 sqoop, spark, livy 集成进 hue + oozie(工作流);然后把presto, airpal 安装到集群里。并实测 presto 和 hive on tez 的性能对比

问题1:

python 编写的spark 程序 总是 被莫名其妙的 killed

解决:

升级集群硬件配置。 不得。原因是 yarn 的资源管理模式是圈地式的分配,预先申请多少不可超过,否则直接 kill。例如 :
spark-submit --master yarn --executor-memory 4g xxx-python-file 这里指定了executor 的内存是4g,但是 spark 是 java 写,有一个东西叫堆外内存,即jvm消耗的额外内存,随随便便一个程序 8G 内存的节点就 oom 了 或者被 yarn kill。spark 提供了参数来调控这个问题:spark.yarn.executor.memoryOverhead (堆外内存)
yarn.scheduler.maximum-allocation-mb (executor 最大申请内存)
spark 申请内存的原则:
executor-memory + memoryOverhead <= yarn.scheduler.maximum-allocation-mb

spark 集群内存分配有个hadoop 官方工具:

spark on yarn 集群内存配置规划工具下载​public-repo-1.hortonworks.com

使用方法: -c cpu核数,-m 节点内存, -d 磁盘数, -k 是否有 HBASE

python hdp-configuration-utils.py -c 16 -m 64 -d 4 -k True

返回结果:

Using cores=16 memory=64GB disks=4 hbase=True
Profile: cores=16 memory=49152MB reserved=16GB usableMem=48GB disks=4 
Num Container=8
Container Ram=6144MB 
Used Ram=48GB
Unused Ram=16GB
yarn.scheduler.minimum-allocation-mb=6144 
yarn.scheduler.maximum-allocation-mb=49152 
yarn.nodemanager.resource.memory-mb=49152 
mapreduce.map.memory.mb=6144 
mapreduce.map.java.opts=-Xmx4096m 
mapreduce.reduce.memory.mb=6144 
mapreduce.reduce.java.opts=-Xmx4096m 
yarn.app.mapreduce.am.resource.mb=6144 
yarn.app.mapreduce.am.command-opts=-Xmx4096m 
mapreduce.task.io.sort.mb=1792 
tez.am.resource.memory.mb=6144 
tez.am.launch.cmd-opts =-Xmx4096m 
hive.tez.container.size=6144 
hive.tez.java.opts=-Xmx4096m

问题2:

EMR 升级到 8 核 16 G 以后, 修改 yarn.scheduler.maximum-allocation-mb=12288,重启机器,2个工作节点后,可用内存应该有 24G,但是 yarn 监控显示只有 19G。

解决:

登陆到各个节点 , 查看 yarn-site.xml 发现 yarn.scheduler.maximum-allocation-mb 有2个重复的,有一台工作节点的yarn.scheduler.maximum-allocation-mb 是 7192 (7G),所以只有19G。删除后重启集群即可。

问题3:

Hive 查询缓慢,每次都会 mapreduce;

解决:

配置hive 的查询引擎为 TEZ,并开启矢量查询。配置如下:
在 hive-site.xml 中加配置项:
<property>
<name>hive.execution.engine</name>
<value>tez</value>
</property>
<property>
<name>hive.vectorized.execution.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.vectorized.execution.reduce.enabled </name>
<value>true</value>
</property>

问题4:

Hue 不能使用:
1.无法登陆
2.oozie 工作流执行 sqoop 无法执行 (killed, main exit 1)
3.spark-notebook 未安装,无法使用 spark
4.工作流传递变量

解决:

1.登陆到 master 节点,执行 hue changepassword 重置密码
2.上传 jdbc mysql connect.jar 到 hdfs://xxx/usr/haoop/share/lib/sqoop/ 目录下
3.在master节点安装 livy
Apache Livy​livy.apache.org
4e71083e5241e4225562983216f8e315.png
并配置 livey 启动端口到 xx/hue/desktop/conf/hue.ini 文件中:
livy_server_port=xxx;
livy_server_host=xxx;
4.使用 ${wf:actionData(nodeName).variableName} 的方式获取上一个工作流节点的输出值

执行同样的SQL: hive on tez 用时 78秒, presto 用时 45秒

728a50bc099f27a6fc96352cb17a4893.png
大约6G数据,Hive on Tez 用时78.41秒

7c45f4022458b946255d4f5bd5dc4229.png
大约6G数据,Presto 用时44.74秒

未完待续....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值