我已创建一个AWS EMR集群并上传,
sparkify_log_small.json
并使用以下代码创建了一个EMR Jupyter笔记本,认为它可以从用户(hadoop)主目录中读取。
sparkify_log_data = "sparkify_log_small.json"
df = spark.read.json(sparkify_log_data)
df.persist()
df.head(5)
但是提交代码时,出现以下错误。
'Path does not exist: hdfs://ip-172-31-50-58.us-west-2.compute.internal:8020/user/livy/sparkify_log_small.json;'
Traceback (most recent call last):
File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/readwriter.py", line 274, in json
return self._df(self._jreader.json(self._spark._sc._jvm.PythonUtils.toSeq(path)))
File "/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
answer, self.gateway_client, self.target_id, self.name)
File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 69, in deco
raise AnalysisException(s.split(': ', 1)[1], stackTrace)
pyspark.sql.utils.AnalysisException: 'Path does not exist: hdfs://ip-172-31-50-58.us-west-2.compute.internal:8020/user/livy/sparkify_log_small.json;'
从谷歌搜索了解到YARN的默认用户是livy。如何将Jupyter Notebook中的用户从livy更改为hadoop(或)指向正确的目录。
我已经尝试创建如下所示的文件夹并将文件从/home/hadoop/sparkify_log_small.json复制到/home/livy/sparkify_log_small.json
但是没有用。
基本上,我在这里尝试从笔记本读取ec2-master的文件。
以下步骤已解决,
已检查的hadoop文件
hadoop fs -ls
hadoop文件系统中的已创建文件夹
hdfs dfs -mkdir /home
hdfs dfs -mkdir /home/hadoop
复制到该位置的文件
hadoop fs -put ./sparkify_log_small.json /home/hadoop/sparkify_log_small.json
然后在jupyter单元中运行python代码。有效。