目录
首先验证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 Property | Description |
---|---|
yarn.web-proxy.address | The 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.keytab | Keytab for WebAppProxy, if the proxy is not running as part of the RM. |
yarn.web-proxy.principal | The 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就能正常显示了。