我想用我的两个虚拟机将Spark Standlone模式安装到Cluster.
使用spark-0.9.1-bin-hadoop1的版本,我在每个vm中成功执行spark-shell.我按照官方文档制作一个vm(ip:xx.xx.xx.223)作为Master和Worker,并将另一个(ip:xx.xx.xx.224)作为Worker.
但是224-ip vm无法连接223-ip vm.接下来是223(Master)的主日志:
[@tc-52-223 logs]# tail -100f spark-root-org.apache.spark.deploy.master.Master-1-tc-52-223.out
Spark Command: /usr/local/jdk/bin/java -cp :/data/test/spark-0.9.1-bin-hadoop1/conf:/data/test/spark-0.9.1-bin-hadoop1/assembly/target/scala-2.10/spark-assembly_2.10-0.9.1-hadoop1.0.4.jar -Dspark.akka.logLifecycleEvents=true -Djava.library.path= -Xms512m -Xmx512m org.apache.spark.deploy.master.Master --ip 10.11.52.223 --port 7077 --webui-port 8080
log4j:WARN No appenders could be found for logger (akka.event.slf4j.Slf4jLogger).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
14/04/14 22:17:03 INFO Master: Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
14/04/14 22:17:03 INFO Master: Starting Spark master at spark://10.11.52.223:7077
14/04/14 22:17:03 INFO MasterWebUI: Started Master web UI at http://tc-52-223:8080 …Run Code Online (Sandbox Code Playgroud) 我正在构建一个非常简单的计算器,我无法弄清楚这些按钮周围的填充来自哪里.以下是我构建流程窗格的方法:
private FlowPane addFlowPaneRightSide() {
FlowPane flow = new FlowPane();
//flow.setPadding(new Insets(0, 0, 0, 0));
flow.setVgap(0);
flow.setHgap(0);
flow.setPrefWrapLength(WIDTH_OF_CENTER / 3); // width of function buttons
flow.setStyle("-fx-background-color: 978c87;");
// setup arrays to hold the buttons and images for the right column
Button operatorButtons[] = new Button[NUM_OP_BUTTONS];
ImageView operatorImages[] = new ImageView[NUM_OP_BUTTONS];
for (int i=0; i < NUM_OP_BUTTONS; i++) {
operatorImages[i] = new ImageView(
new Image(Calculator.class.getResourceAsStream(
"images/orange-"+(i)+".png")));
operatorButtons[i] = new Button();
operatorButtons[i].setGraphic(operatorImages[i]);
operatorButtons[i].setId("orange-"+(i));
flow.getChildren().add(operatorButtons[i]);
}
return flow;
}
Run Code Online (Sandbox Code Playgroud)
当我只是将图像放在流程窗格中时,它运行正常,但是当我开始在循环中创建按钮时,它给了我:

我的CSS:
/*
Document …Run Code Online (Sandbox Code Playgroud) 两个问题,一般问题的答案将指导我如何最小化MVCE.
1)我怎么知道预先注册WrappedArray,(以及我可能使用的Scala中的其他所有类)?必须使用Kryo从库中注册类是否正常?
具体:
2)我该如何解决这个问题?(如果在这里反映一个错误的错误,我愿意承认我可能还有别的东西会搞错,所以不要为了重现这个而自杀
细节
使用与遗传学和统计相关的客户类,在Spark 1.4.1,Scala 2.11.5上使用SparkConf上的以下设置测试Java中的Spark程序:
// for kyro serializer it wants to register all classes that need to be serialized
Class[] kryoClassArray = new Class[]{DropResult.class, DropEvaluation.class, PrintHetSharing.class};
SparkConf sparkConf = new SparkConf().setAppName("PipeLinkageData")
<SNIP other settings to declare master>
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
//require registration of all classes with Kryo
.set("spark.kryo.registrationRequired", "true")
.registerKryoClasses(kryoClassArray);
Run Code Online (Sandbox Code Playgroud)
获取此错误(在长错误列表结束时重复):
Caused by: java.lang.IllegalArgumentException: Class is not
registered: scala.collection.mutable.WrappedArray$ofRef Note: To
register this class use:
kryo.register(scala.collection.mutable.WrappedArray$ofRef.class);
Run Code Online (Sandbox Code Playgroud)
但我从来没有从我的代码中调用该类.我可以添加scala.collection.mutable.WrappedArray到kryoClassArray但它不能解决问题.如果我添加scala.collection.mutable.WrappedArray $ ofRef.class(如错误中所示)这是一个语法错误,我看到我不能在这里声明一个匿名函数?
MVCE:我已经启动了一个MVCE,但问题是,对我们的类做一个需要外部库和文本/数据文件.一旦我删除了我们的课程,我就没有问题.如果有人能够回答一般性问题,那么可能有助于指导我能够提出多少MVCE.
当我写这个问题时,我得到了更新到1.5.2,将看看是否有任何变化,如果有更新问题.
没有MVCE这里是我的班级声明:
public class …Run Code Online (Sandbox Code Playgroud) 在Spark文档中提交应用程序时,从1.6.0及更早版本开始,目前尚不清楚如何指定--jars参数,因为它显然不是冒号分隔的类路径而不是目录扩展.
文档说"捆绑jar的路径,包括你的应用程序和所有依赖项.URL必须在集群内部全局可见,例如,hdfs://路径或所有节点上都存在的file://路径. "
问题:在$ SPARK_HOME/bin的spark-submit脚本中使用--jars提交类路径的所有选项有哪些?任何未记录的内容可以作为文档的改进提交?
我问,因为当我测试 - 今天的时候,我们必须明确地提供每个jar的路径:
/usr/local/spark/bin/spark-submit --class jpsgcs.thold.PipeLinkageData ---jars=local:/usr/local/spark/jars/groovy-all-2.3.3.jar,local:/usr/local/spark/jars/guava-14.0.1.jar,local:/usr/local/spark/jars/jopt-simple-4.6.jar,local:/usr/local/spark/jars/jpsgcs-core-1.0.8-2.jar,local:/usr/local/spark/jars/jpsgcs-pipe-1.0.6-7.jar /usr/local/spark/jars/thold-0.0.1-1.jar
Run Code Online (Sandbox Code Playgroud)
我们选择在每个worker上的/ usr/local/spark/jars中使用所有jar预填充集群,似乎如果没有提供local:/ file:/或hdfs:那么默认为file:/并且驱动程序使驱动程序运行的Web服务器上的jar可用.我选择了本地,如上所述.
而且似乎我们不需要将主jar放在--jars参数中,我还没有测试过最后一个参数中的其他类(application-jar arg per docs,即/ usr/local/spark/jars/thold-0.0.1-1.jar)被发送给worker,或者如果我需要将application-jar放在-jars路径中以获取未在--class之后命名的类.
(并且使用--deploy-mode客户端使用Spark独立模式授予,您还必须在每个worker上放置驱动程序的副本,但您不知道哪个worker会运行驱动程序)
嵌套并行化?
假设我正在尝试在 Spark 中执行相当于“嵌套 for 循环”的操作。就像在常规语言中一样,假设我在内部循环中有一个例程,它以 Pi 平均 Spark 示例的方式估计 Pi(请参阅估计 Pi)
i = 1000; j = 10^6; counter = 0.0;
for ( int i =0; i < iLimit; i++)
for ( int j=0; j < jLimit ; j++)
counter += PiEstimator();
estimateOfAllAverages = counter / i;
Run Code Online (Sandbox Code Playgroud)
我可以在 Spark 中嵌套并行化调用吗?我正在尝试并且还没有解决问题。很乐意发布错误和代码,但我想我在问一个更具概念性的问题,关于这是否是 Spark 中的正确方法。
我已经可以并行化单个 Spark Example / Pi Estimate,现在我想这样做 1000 次以查看它是否收敛于 Pi。(这与我们试图解决的一个更大的问题有关,如果需要更接近 MVCE 的东西,我很乐意添加)
底线问题我只需要有人直接回答:这是使用嵌套并行化调用的正确方法吗?如果不是请指点一下具体的,谢谢!这是我认为正确方法的伪代码方法:
// use accumulator to keep track of each Pi Estimate result
sparkContext.parallelize(arrayOf1000, slices).map{ …Run Code Online (Sandbox Code Playgroud) 我在基本层面上理解了build.gradle构建脚本的各种移动部分,但是很难将它们捆绑在一起.
在Apache Spark独立模式下,只需尝试在build.gradle的同一个框中启动master和worker.(稍后将使用$ SPARK_HOME/sbin/start-slaves调用masterIP的正确参数进行扩展.)
问题:如何将我的IP地址分配给Groovy/build.gradle中的变量,以便将其传递给Exec任务中的命令?我们希望这可以在几台不同的开发机器上运行.
我们有一个(我认为相当标准)/ etc/hosts配置,其FQDN和主机名分配给127.0.1.1.驱动程序可以解决这个问题,但启动主机和主机名的从机不是一个选项,我需要IP地址.
我在尝试:
task getMasterIP (type: Exec){
// declare script scope variable using no def or
executable "hostname"
args += "-I"
// need results of hostname call assigned to script scope variable
sparkMasterIP = <resultsOfHostnameCall>
}
// added this because startSlave stops if Master is already running
task startSlaveOnly(dependsOn:'getMasterIP', type: Exec){
executable "/usr/local/spark/sbin/start-slave.sh"
args += "spark://$sparkMasterIP:7077"
doLast {
println "enslaved"
}
}
// now make startSlave call startSlaveOnly after the initial startMaster
task startSlave(dependsOn:'startMaster', type: …Run Code Online (Sandbox Code Playgroud) 关于分辨率的摘要,我认为我正在处理一个Scala问题,但事实证明Stopwatch和Scala Logging具有私有构造函数,并且我没有调用适当的公共方法来实例化它们。以下gzm0的答案指出了这一点。
尝试使用Guava秒表和Scala日志记录,无论我是在Main中还是在实例化类中创建一个,new Stopwatch()还是new Logger()在Main类中创建此错误,我都将遇到以下错误gradle run:
constructor Logger in class Logger cannot be accessed in class RedBlackTree4150
var loggerInst = new Logger()
constructor Stopwatch in class Stopwatch cannot be accessed in class RedBlackTree4150
var stopWatchInst = new Stopwatch()
Run Code Online (Sandbox Code Playgroud)
如果这是一个重复的这个或这个问题我不知道够不够去实现它。我看了这个问题,但没有一个可接受的答案,我试图(只是为了好玩)将我的构造函数调用中的内容删除了,但没有用。
编写我的第一个Gradle / Scala项目以进行算法分配分析。我想如果我是在Java中,我会问的是静态还是非静态,不知道那是我要处理的问题类型。Scala不是作业的一部分,所以我没有使用作业标签。
这是我的调用方式,程序的第一部分,完整的.scala文件和build.gradle位于Github上
import com.google.common.base.Stopwatch
import com.typesafe.scalalogging.slf4j.Logger
import scala.collection.immutable.TreeMap
import java.util.concurrent.TimeUnit
object Main extends App {
// var rbtree = new RedBlackTree4150(logger, stopWatch)
var rbtree = …Run Code Online (Sandbox Code Playgroud) 问题是:
EdX 上的基本 C 编程 MOOC 展示了如何在通过指针传递结构时访问函数内结构的成员。他们到底为什么在&旁边使用*???
他们展示: scanf("%lf", &(*studptr).aveGrade);
为什么不只studptr.aveGrade在 scanf 中使用?
(撇开单独的问题,“为什么要使用 scanf”)
(被要求提供完整的例子)
void readStudent(struct student *studptr) {
print("\nEnter a new student record: \n");
printf("First name: ");
scanf("%s", (*studptr).firstName);
printf("Last name: ");
scanf("%s", (*studptr).lastName);
printf("Birth year: ");
scanf("%d", &(*studptr).birthYear);
printf("Average grade: ");
scanf("%lf", &(*studptr).aveGrade);
}
Run Code Online (Sandbox Code Playgroud)