用yarn提交pyspark程序

目录

首先验证sparkPi的demo可以运行成功

用yarn提交pyspark程序

继续提交pyspark程序,首先测试client方式

以cluster方式提交

命令行方式查看log

访问Application URL,查看job的DAG

Configurations

Running Web Application Proxy

yarn的RM起不来

访问Tracking URL


首先验证sparkPi的demo可以运行成功

如果这个跑不成功,检查下/usr/local/spark/conf/spark-env.sh里是否设置了yarn_conf_dir:

用yarn提交pyspark程序

报错:

异常信息:pyspark.sql.utils.AnalysisException: ‘java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;’

这个错误的意思是找不到存储hive元数据的客户端,而hive元数据的客户端是存储在mysql里的,所以连接不上。

为了验证这个问题,运行下hive。

运行hive也报错:

hive> show databases;
FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

针对这个问题,通常是由于hive的服务断没有打开, 解决方法:

1)hive --service metastore &
2)然后Ctrl+C
3)再hive,进去,show databases;

继续提交pyspark程序,首先测试client方式

错误:user did not initialize spark context!

原因:

这是代码的问题,因为之前是用standalone的方式提交的,所以代码没有修改,还带着master。

而现在要用yarn提交,就不能在程序里再指定其他的master了。

代码修改后,client方式测试通过。

以cluster方式提交

成功。

打开8088端口可以看到application的状态是succeeded.

命令行方式查看log

1.找到application id

21/06/23 02:11:39 INFO client.RMProxy: Connecting to ResourceManager at hadoop-master/172.18.0.3:8032
Total number of applications (application-types: [] and states: [NEW, NEW_SAVING, SUBMITTED, ACCEPTED, RUNNING, FINISHED, FAILED, KILLED]):11
                Application-Id      Application-Name        Application-Type          User           Queue                   State             Final-State         Progress                         Tracking-URL
application_1624348847726_0010          yarn_demo.py                   SPARK          root         default                FINISHED               SUCCEEDED             100%                                  N/A
application_1624348847726_0009          yarn_demo.py                   SPARK          root         default                FINISHED                  FAILED             100%                                  N/A

2. yarn logs -applicationId application_1624348847726_0010

访问Application URL,查看job的DAG

http://hadoop-master:8088/proxy/application_1624348847726_0011/

yarn自带了web接口,默认是和RM一起的(8088端口)。但是为了减少从web接口受到的攻击,可以把Web接口单独放在别的机器上。

如果要设置自己的web接口,需要设置如下三个参数。

如果不设置这三个参数,就是用RM的接口。

Configurations

Configuration PropertyDescription
yarn.web-proxy.addressThe address for the web proxy as HOST:PORT, if this is not given then the proxy will run as part of the RM.
yarn.web-proxy.keytabKeytab for WebAppProxy, if the proxy is not running as part of the RM.
yarn.web-proxy.principalThe kerberos principal for the proxy, if the proxy is not running as part of the RM.

Running Web Application Proxy

Standalone Web application proxy server can be launched with the following command.

  $ yarn proxyserver

Or users can start the stand alone Web Application Proxy server as a daemon, with the following command

  $ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh start proxyserver

来源: http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/WebApplicationProxy.html

yarn的RM起不来

修改了yarn-site.xml中的Ha,设为true。重启后RM起不来了,8088端口也无法访问了。

debug的过程是看logs: 

cd /usr/local/hadoop/logs
tail -500 yarn--resourcemanager-hadoop-master.log | grep -v 'INFO' | more

HA mode requires atleast two RMs
org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Invalid configuration! Invalid value of yarn.resourcemanager.ha.rm-ids. Current value is null
HA mode requires atleast two RMs

原来HA需要至少两个RM来提供高可用性。

我们这种只有一个,是不可以用HA的。

去掉HA后,重启,jps可以看到resourcemanager了。

访问Tracking URL

1. 需要在yarn-site.xml中设置yarn.web-proxy.address,不用非得4040,找一个没用过的端口即可。

2. 在启动docker的时候,需要把这个端口(我这里用的是4040)映射出来。

3. 启动proxyserver: hadoop/sbin/yarn-daemon.sh start proxyserver

4. jps查看是否有WebAppProxyServer这个进程启动

然后点击tracking url后,跳转到hadoop-master:4040/proxy/applicationid了。

但是我遇到一个问题,跳转后无法现实,但是如果把hadoop-master修改为实际的IP就能正常显示了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值