我必须在Azure中的群集Hdinsight上运行一个简单的wordcount。我创建了一个带有hadoop和spark的集群,我已经有了代码的jar文件,我不知道如何设置集群的问题以及在Azure上启动spark的正确代码行,I想尝试不同的节点组合(工人,2-4-8),看看程序如何扩展。
每次我使用spark-submit in mode yarn-client启动应用程序时,它都可以工作,但总是带有2个执行器和1个核心,大约3分钟即可获得1gb输入文本文件,如果我设置更多执行程序和更多核心设置,但他没有使用它,所以我认为它与RDD的问题,它不会在正确的模式分割输入文件,因为它只创建2个任务开始2 worknode和其他节点保持不活动状态。
使用sbt包创建的jar文件。
启动Spark的命令:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import java.io._
import org.apache.hadoop.fs
import org.apache.spark.rdd.RDD
object SimpleApp {
def main(args: Array[String]){
//settingsparkcontext
val conf = new SparkConf().setAppName("SimpleApp")
val sc = new SparkContext(conf)
//settingthewordtosearch
val word = "word"
//settingtime
val now = System.nanoTime
//settingtheinputfile
val input = sc.textFile("wasb://xxx@storage.blob.core.windows.net/dizionario1gb.txt")
//wordlookup
val splittedLines = input.map(line=>line.split(""))
val find = System.nanoTime
val tot = splittedLines.map(x => x.equals(word)).count()
val w=(System.nanoTime-find)/1000000
val rw=(System.nanoTime-now)/1000000
//reportingtheresultofexecutioninatxtfile
val writer = new FileWriter("D:\\Users\\user\\Desktop\\File\\output.txt",true)
try {
writer.write("Word found "+tot+" time total "+rw+" mstimesearch "+w+" time read "+(rw-w)+"\n")
}
finally writer.close()
//terminatingthesparkserver
sc.stop()
}}
WordCount代码:
label {
display:block;
}
span {
float:left;
margin-right: 50px;
}
input {
width:50px;
}
#total:before {
content: "=";
float: left;
position: relative;
top: 21px;
left: -34px;
}
答案 0 :(得分:0)
并行程度
“除非您为每个操作设置足够高的并行度,否则将无法充分利用群集.Spark会自动设置每个文件根据其大小运行的”map“任务的数量(尽管您可以通过可选项控制它)参数到SparkContext.textFile等)您可以将并行级别作为第二个参数传递(请参阅spark.PairRDDFunctions文档),或者设置配置属性spark.default.parallelism以更改默认值。一般情况下,我们建议2-群集中每个CPU核心有3个任务。“