我们在使用aws的emr自带的hue+oozie服务时,遇到一个诡异的问题,描述如下:我们的hue有多个账号,每个用户都可以执行workflow并提交scheduler,但是会报一个错误:Cann't submit scheduler
先查了一通oozie的日志,未发现明显问题,随后将问题定位到hue,查看了hue日志,果然有报错:
WebHdfsException: 403 Client Error: Forbidden for url: http://ip-10-0-11-224.cn-northwest-1.compute.internal:50075/webhdfs/v1/user/hue/oozie/deployments/coordinator.xml?op=CREATE&doas=test01&user.name=hue&namenoderpcaddress=ip-10-0-11-84.cn-northwest-1.compute.internal:8020&createflag=&createparent=true&overwrite=true&permission=644
{"RemoteException":{"exception":"AccessControlException","javaClassName":"org.apache.hadoop.security.AccessControlException","message":"Permission denied: user=test01, access=WRITE, inode=\"/user/hue/oozie/deployments/coordinator.xml\":yanzhou:hue:-rw-r--r--\n\tat org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:319)\n\tat org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.
后来经过分析,问题是出在/user/hue/oozie/deployments/ 这个目录上,查看了hue.ini的配置,发现是remote_deployement_dir
问题就在于不同用户无法去写彼此的文件,而且我觉得默认这种配置应该有很大问题的,那么现在有两种方式可以解决这个问题,第一个就是专门找一个用户执行scheduler,其他用户只能制作workflow,显示不是很合理。第二种方法就是应该让每个用户拥有自己独有的目录,这样就应该是很符合需求的,于是仔细研究hue.ini发现里面的变量可以支持$USER这种参数,于是抱着试试的态度将
remote_deployement_dir=/user/hue/oozie/deployments/$USER
然后重启hue,问题解决~