我不经常来这里寻求帮助,但我对此非常沮丧,我希望有人以前遇到过它.
每当我尝试使用多个连接从表中获取记录时,我都会收到此错误:
#126 - Incorrect key file for table '/tmp/#sql_64d_0.MYI'; try to repair it
Run Code Online (Sandbox Code Playgroud)
所以这个查询会产生错误:
SELECT * FROM `core_username`
INNER JOIN `core_person` ON (`core_username`.`person_id` = `core_person`.`id`)
INNER JOIN `core_site` ON (`core_username`.`site_id` = `core_site`.`id`)
ORDER BY `core_username`.`name` ASC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
但是这个不会:
SELECT * FROM `core_username`
INNER JOIN `core_person` ON (`core_username`.`person_id` = `core_person`.`id`)
ORDER BY `core_username`.`name` ASC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
这一个也不会:
SELECT * FROM `core_username`
INNER JOIN `core_site` ON (`core_username`.`site_id` = `core_site`.`id`)
ORDER BY `core_username`.`name` ASC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
可能是什么导致了这个?我真的不知道如何修复tmp表,但我不认为这是问题,因为它每次都是一个新的tmp表.用户名表相当大(现在有233,718条记录),但我怀疑它与它有什么关系.
任何帮助将非常感激.
更新:经过一些进一步的测试后,似乎错误只发生在我尝试订购结果时.也就是说,这个查询会给我我的期望:
SELECT …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的PySpark脚本,它从S3上的一些拼花数据创建一个数据帧,然后调用count()方法并打印出记录数.
我在AWS EMR集群上运行脚本,我看到以下奇怪的WARN信息:
17/12/04 14:20:26 WARN ServletHandler:
javax.servlet.ServletException: java.util.NoSuchElementException: None.get
at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489)
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
at org.spark_project.jetty.servlet.ServletHolder.handle(ServletHolder.java:845)
at org.spark_project.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1689)
at org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter.doFilter(AmIpFilter.java:164)
at org.spark_project.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)
at org.spark_project.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581)
at org.spark_project.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
at org.spark_project.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
at org.spark_project.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
at org.spark_project.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.spark_project.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:461)
at org.spark_project.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)
at org.spark_project.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
at org.spark_project.jetty.server.Server.handle(Server.java:524)
at org.spark_project.jetty.server.HttpChannel.handle(HttpChannel.java:319)
at org.spark_project.jetty.server.HttpConnection.onFillable(HttpConnection.java:253)
at org.spark_project.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
at org.spark_project.jetty.io.FillInterest.fillable(FillInterest.java:95)
at org.spark_project.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
at org.spark_project.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
at org.spark_project.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
at org.spark_project.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
at org.spark_project.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
at org.spark_project.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.util.NoSuchElementException: None.get
at scala.None$.get(Option.scala:347)
at scala.None$.get(Option.scala:345)
at org.apache.spark.status.api.v1.MetricHelper.submetricQuantiles(AllStagesResource.scala:313) …Run Code Online (Sandbox Code Playgroud) 我在AWS上有一个集群,有2个从属和1个主服务器.所有实例都是m1.large类型.我正在运行Spark 1.4版本.我正在对来自红移的4米数据的火花性能进行基准测试.我通过pyspark shell发出了一个查询
df = sqlContext.load(source="jdbc", url="connection_string", dbtable="table_name", user='user', password="pass")
df.registerTempTable('test')
d=sqlContext.sql("""
select user_id from (
select -- (i1)
sum(total),
user_id
from
(select --(i2)
avg(total) as total,
user_id
from
test
group by
order_id,
user_id) as a
group by
user_id
having sum(total) > 0
) as b
"""
)
Run Code Online (Sandbox Code Playgroud)
当我执行d.count()时,上面的查询在df未缓存时需要30秒,df在内存中缓存时需要17秒.
我期待这些时间接近1-2秒.
这些是我的火花配置:
spark.executor.memory 6154m
spark.driver.memory 3g
spark.shuffle.spill false
spark.default.parallelism 8
Run Code Online (Sandbox Code Playgroud)
rest设置为默认值.任何人都能看到我在这里失踪的东西吗?
包含RDD的元素数量与理想的分区数量之间是否存在任何关系?
我有一个拥有数千个分区的RDD(因为我是从一个由多个小文件组成的源文件加载它,这是一个我无法解决的约束所以我必须处理它).我想重新分区(或使用coalesce方法).但我事先并不知道RDD将包含的确切事件数.
所以我想以自动化的方式做到这一点.看起来像:
val numberOfElements = rdd.count()
val magicNumber = 100000
rdd.coalesce( numberOfElements / magicNumber)
Run Code Online (Sandbox Code Playgroud)
关于RDD的最佳分区数量及其元素数量是否有任何经验法则?
谢谢.
我在亚马逊s3中有csv文件,大小为62mb(114000行).我正在将其转换为spark数据集,并从中获取前500行.代码如下;
DataFrameReader df = new DataFrameReader(spark).format("csv").option("header", true);
Dataset<Row> set=df.load("s3n://"+this.accessId.replace("\"", "")+":"+this.accessToken.replace("\"", "")+"@"+this.bucketName.replace("\"", "")+"/"+this.filePath.replace("\"", "")+"");
set.take(500)
Run Code Online (Sandbox Code Playgroud)
整个操作需要20到30秒.
现在我尝试相同但是使用csv我正在使用带有119 000行的mySQL表.MySQL服务器在亚马逊ec2.代码如下;
String url ="jdbc:mysql://"+this.hostName+":3306/"+this.dataBaseName+"?user="+this.userName+"&password="+this.password;
SparkSession spark=StartSpark.getSparkSession();
SQLContext sc = spark.sqlContext();
DataFrameReader df = new DataFrameReader(spark).format("csv").option("header", true);
Dataset<Row> set = sc
.read()
.option("url", url)
.option("dbtable", this.tableName)
.option("driver","com.mysql.jdbc.Driver")
.format("jdbc")
.load();
set.take(500);
Run Code Online (Sandbox Code Playgroud)
这需要5到10分钟.我在jvm里面运行火花.在两种情况下使用相同的配置.
我可以使用partitionColumn,numParttition等但我没有任何数字列,还有一个问题是我不知道该表的模式.
我的问题不是如何减少所需的时间,因为我知道在理想情况下火花将在集群中运行,但我无法理解的是为什么在上述两种情况下这个大的时间差异?
apache-spark ×4
mysql ×2
pyspark ×2
amazon-emr ×1
amazon-s3 ×1
java ×1
jdbc ×1
partitioning ×1
sql ×1