我正在运行通过EMR控制台下拉列表安装Spark(1.3.1)的AWS EMR集群.Spark是当前和处理数据,但我试图找到已分配给WebUI的端口.我尝试过端口转发4040和8080没有连接.我这样转发
ssh -i ~/KEY.pem -L 8080:localhost:8080 hadoop@EMR_DNS
Run Code Online (Sandbox Code Playgroud)
1)如何找出Spark WebUI分配的端口是什么?2)如何验证Spark WebUI是否正在运行?
我想调试在AWS EMR集群上运行的Spark应用程序.如果我可以使用IntelliJ远程连接和调试它将是太棒了.我搜索过但发现很少.
有可能,如果是这样,有人可以指出我正确的方向吗?
谢谢.
remote-debugging intellij-idea amazon-web-services amazon-emr apache-spark
我最近在学习 Amazon EMR,据我所知,EMR 集群让我们可以选择 3 个节点。
我问你们为什么 EMR 提供任务节点?hadoop 建议我们应该在同一个节点上安装 Datanode 守护进程和 Tasktracker 守护进程。亚马逊这样做背后的逻辑是什么?您可以将 S3 中的数据通过流传输到核心节点上的 HDFS,在 HDFS 上进行处理,而不是将数据从 HDFS 共享到任务节点,在这种情况下这会增加 IO 开销。因为就我在 hadoop 中的知识而言,TaskTrackers 运行在 DataNodes 上,DataNodes 具有用于该特定任务的数据块,那么为什么在不同的节点上有 TaskTracker 呢?
我正在尝试在我的 EMR 集群的主实例上安装 pyarrow,但是我总是收到此错误。
[hadoop@ip-XXX-XXX-XXX-XXX ~]$ sudo /usr/bin/pip-3.4 install pyarrow
Collecting pyarrow
Downloading https://files.pythonhosted.org/packages/c0/a0/f7e9dfd8988d94f4952f9b50eb04e14a80fbe39218520725aab53daab57c/pyarrow-0.10.0.tar.gz (2.1MB)
100% |????????????????????????????????| 2.2MB 643kB/s
Requirement already satisfied: numpy>=1.10 in /usr/local/lib64/python3.4/site-packages (from pyarrow)
Requirement already satisfied: six>=1.0.0 in /usr/local/lib/python3.4/site-packages (from pyarrow)
Installing collected packages: pyarrow
Running setup.py install for pyarrow ... error
Complete output from command /usr/bin/python3.4 -u -c "import setuptools, tokenize;__file__='/mnt/tmp/pip-build-pr3y5_mu/pyarrow/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-vmywdpeg-record/install-record.txt --single-version-externally-managed --compile:
/usr/lib64/python3.4/distutils/dist.py:260: UserWarning: Unknown distribution option: 'long_description_content_type'
warnings.warn(msg)
/mnt/tmp/pip-build-pr3y5_mu/pyarrow/.eggs/setuptools_scm-3.1.0-py3.4.egg/setuptools_scm/utils.py:118: UserWarning: 'git' was not found
running …Run Code Online (Sandbox Code Playgroud) 我打开了一个 AWS EMR 集群,并在 pyspark3 jupyter notebook 中运行了以下代码:
"..
textRdd = sparkDF.select(textColName).rdd.flatMap(lambda x: x)
textRdd.collect().show()
.."
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
An error was encountered:
Invalid status code '400' from http://..../sessions/4/statements/7 with error payload: {"msg":"requirement failed: Session isn't active."}
Run Code Online (Sandbox Code Playgroud)
运行线路:
sparkDF.show()
Run Code Online (Sandbox Code Playgroud)
作品!
我还创建了该文件的一小部分,并且我的所有代码都运行良好。
问题是什么?
使用以下引导代码启动集群并获取以下标准输出后,当我尝试在 pyspark 中导入 pandas 时,由于与标准输出中不存在的不同 numpy 版本冲突,出现以下错误。因此,pyspark 似乎选择性地忽略了 numpy 安装并使用导致冲突的旧版本。我该如何解决这个问题?
我使用的emr版本是emr-5.33.0
import pandas as pd
File "/usr/local/lib64/python3.7/site-packages/pandas/__init__.py", line 22, in <module>
from pandas.compat import (
File "/usr/local/lib64/python3.7/site-packages/pandas/compat/__init__.py", line 15, in <module>
from pandas.compat.numpy import (
File "/usr/local/lib64/python3.7/site-packages/pandas/compat/numpy/__init__.py", line 21, in <module>
f"this version of pandas is incompatible with numpy < {_min_numpy_ver}\n"
ImportError: this version of pandas is incompatible with numpy < 1.17.3
your numpy version is 1.16.5.
Please upgrade numpy to >= 1.17.3 to use this pandas version
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的引导代码 …
我正在尝试删除由于MapReduce作业而创建的文件夹.存储桶中的其他文件删除就好了,但此文件夹不会删除.当我尝试从控制台中删除它时,其状态旁边的进度条保持为0.已进行多次尝试,包括其间的注销/登录.
我正在尝试ssh到Amazon EMR Spark Cluster.这是我做的:
获取集群主机的IP:
aws emr describe-cluster --cluster-id <cluster_id> | grep MasterPublicDnsName
Run Code Online (Sandbox Code Playgroud)使用IP ssh到框中:
ssh -i CSxxx.pem hadoop@ec2-xx-xxx-xxx-xxx.ap-southeast-1.compute.amazonaws.com
Run Code Online (Sandbox Code Playgroud)我被困在这里,因为跑步(2)给了我以下错误:
ssh: connect to host ec2-xx-xxx-xxx-xxx.ap-southeast-1.compute.amazonaws.com port 22: Operation timed out
Run Code Online (Sandbox Code Playgroud)
有什么想法来解决这个问题?
我在Windows 7上.我安装了mrjob,当我从网站运行示例word_count文件时,它在本地计算机上运行正常.但是,我在尝试在Amazon EMR上运行它时收到错误.我甚至测试了用boto连接亚马逊s3并且它有效.
mrjob.conf文件
runners:
emr:
aws_access_key_id: xxxxxxxxxxxxx
aws_region: us-east-1
aws_secret_access_key: xxxxxxxx
ec2_key_pair: bzy
ec2_key_pair_file: C:\aa.pem
ec2_instance_type: m1.small
num_ec2_instances: 3
s3_log_uri: s3://myunique/
s3_scratch_uri: s3://myunique/
Run Code Online (Sandbox Code Playgroud)
在我的cmd中运行以下内容
python word_count.py -c mrjob.conf -r emr mytext.txt
Run Code Online (Sandbox Code Playgroud)
它产生

根据建议这是一个与Windows路径相关的问题,我在源代码中仔细检查了parse.py,它似乎有处理窗口文件类型的相关检查
# Used to check if the candidate candidate uri is actually a local windows path.
WINPATH_RE = re.compile(r"^[aA-zZ]:\\")
def is_windows_path(uri):
"""Return True if *uri* is a windows path."""
if WINPATH_RE.match(uri):
return True
else:
return False
def is_uri(uri):
"""Return True if *uri* is any sort …Run Code Online (Sandbox Code Playgroud) 我们正在运行spark 2.3.0 AWW EMR.以下DataFrame" df"非空且大小适中:
scala> df.count
res0: Long = 4067
Run Code Online (Sandbox Code Playgroud)
下面的代码工作正常写df到hdfs:
scala> val hdf = spark.read.parquet("/tmp/topVendors")
hdf: org.apache.spark.sql.DataFrame = [displayName: string, cnt: bigint]
scala> hdf.count
res4: Long = 4067
Run Code Online (Sandbox Code Playgroud)
但是,使用相同的代码写入本地parquet或csv文件最终结果为空:
df.repartition(1).write.mode("overwrite").parquet("file:///tmp/topVendors")
scala> val locdf = spark.read.parquet("file:///tmp/topVendors")
org.apache.spark.sql.AnalysisException: Unable to infer schema for Parquet. It must be specified manually.;
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$9.apply(DataSource.scala:207)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$9.apply(DataSource.scala:207)
at scala.Option.getOrElse(Option.scala:121)
Run Code Online (Sandbox Code Playgroud)
我们可以看到它失败的原因:
ls -l /tmp/topVendors
total 0
-rw-r--r-- 1 hadoop hadoop 0 Jul 30 …Run Code Online (Sandbox Code Playgroud) amazon-emr ×10
apache-spark ×4
pyspark ×2
amazon-s3 ×1
cmake ×1
hadoop ×1
hadoop2 ×1
mrjob ×1
numpy ×1
pandas ×1
pip ×1
pyarrow ×1
python ×1
python-3.x ×1
ssh ×1