通过CloudFormation创建的AWS EMR集群HDFS目录缺失问题排查
我来帮你梳理下正常AWS EMR集群的预期表现,以及针对你遇到的问题的排查思路:
正常情况下AWS EMR集群的HDFS与Spark Shell预期表现
首先明确标准EMR集群的默认状态:
- /user/hive目录:只要你的集群包含Hive服务组件(EMR创建时默认会勾选,除非手动取消),HDFS根目录下的
/user/hive会在集群启动时自动生成,里面默认有warehouse子目录——这是Hive的默认数据仓库路径,用来存储Hive表的底层数据。 - /user/hadoop/jobs目录:这个目录不是EMR的默认自动生成目录,它的存在大概率是你之前的集群通过Bootstrap启动脚本创建,或者有作业往这个路径写入过数据。新集群如果没有复用相同的初始化逻辑,自然不会有这个目录。
- Spark Shell执行SPARQL:只要集群包含Spark组件,你可以直接通过
spark-shell命令启动交互式Shell。不过要执行SPARQL操作,你需要提前准备好对应的依赖库(比如Apache Jena的Spark集成包),启动时可以用spark-shell --jars <依赖包路径>引入,之后就能在Shell里编写SPARQL相关的代码逻辑了。
针对你的问题的排查建议
按优先级一步步来:
- 检查集群的软件组件配置
登录EMR控制台,查看新旧集群的「软件配置」,确认是否都勾选了Hive服务。如果新集群没装Hive,/user/hive肯定不会自动创建,你可以手动创建并设置权限:hadoop fs -mkdir -p /user/hive/warehouse hadoop fs -chmod 777 /user/hive/warehouse # 或者根据需求设置更严格的权限,比如给hive用户专属权限 - 核对Bootstrap启动脚本
回忆下之前的集群是否用了自定义Bootstrap脚本(用来创建目录、安装依赖等),如果有,要确保新集群也复用了这个脚本。如果没加,手动创建/user/hadoop/jobs即可:hadoop fs -mkdir -p /user/hadoop/jobs - 检查HDFS权限与当前用户
你执行hadoop fs -ls时用的是哪个用户?默认EMR登录是hadoop用户,可能存在权限限制看不到/user/hive。可以先执行hadoop fs -ls /user查看根目录下的所有用户目录,或者切换到hive用户再查看:
也可以直接查看目录权限:sudo su - hive hadoop fs -ls /user/hivehadoop fs -ls -d /user/hive,确认当前用户是否有读取权限。 - 等待HDFS初始化完成
有时候EMR集群启动后,HDFS的目录初始化可能有延迟,尤其是大集群。可以等个5-10分钟再执行目录查看命令,或者在EMR控制台的「步骤」里重启HDFS相关服务。 - 确认Spark Shell的SPARQL依赖
如果启动Spark Shell后无法执行SPARQL,要检查是否引入了必要的依赖库。比如使用Apache Jena的话,需要把对应的jar包上传到集群,然后用以下命令启动Shell:
或者如果是EMR预装的组件,确认是否已经集成了SPARQL相关工具,没有的话需要手动安装。spark-shell --jars s3://your-bucket/path/to/jena-spark.jar
内容的提问来源于stack exchange,提问作者dedpo
相关产品推荐
相关产品推荐

