我尝试在纱线簇上运行Java-spark代码,以检查在处理大数据时速度较慢的本地效率, 但是在创建工作流程并创建上述代码的jar之后,有时在提交作业时我的sparkjob被杀死,但是在本地运行jar时运行正常,没有任何错误。
我在代码中使用了一些简单的java方法,其中我将两个参数用作两个路径,并且其中一个路径导致hdfs中的错误,表明找不到该路径(java.nio.file.NoSuchFileException)
下面是发生异常的地方
f.repartition(1).write()
.mode(SaveMode.Overwrite)
.format("com.databricks.spark.csv")
.option("header", "true")
.option("delimiter", "|")
.save("E:\\data\\Dump\\praga\\showtest");
String inputFile ="E:\\data\\Dump\\praga\\showtest", outFile="E:\\data\\Dump\\praga\\showtest\\showout2.csv";
inputFile+="\\part-00000";
call(inputFile, outFile);
上面的方法纯粹是Java代码,不包含任何spark方法,这会导致作业被杀死吗?
下面的方法
public static void call(String a, String b) {
ArrayList <Do> result = new ArrayList <Do> ();
try {
BufferedReader br = new BufferedReader(new FileReader(a));
String line = "";
Boolean setDate = false;
while ((line = br.readLine()) != null) {
Do do1 = new Do();
System.err.println(line);
java.lang.String[] lineArray = line.split("\\|");
int index = 0;
setDate = false;
String openDate = null,
closedDate = null;
while (index < lineArray.length) {
//System.out.println("processing data "+index);
if (index == 0) {
do1.setTelephone(lineArray[0]);
do1.setOpen(lineArray[1]);
do1.setUpdate(lineArray[1]);
List < Do > do2 = result.stream().filter(customer - >lineArray[0].equals(customer.getTelephone())).collect(Collectors.toList());
if (!do2.isEmpty()) {
int indexOf = do2.size() - 1;
int inc = 0;
for (Do item: do2) {
if (indexOf == inc) {
////
some conditions and getter setter methods using pojo classes
}
//System.out.println(do1);
if (!setDate) {
result.add(do1);
}
}
System.err.println("result size" + result.size());
System.out.println("result " + result);
br.close();
FileWriter writer;
//System.err.println("list "+result.size());
writer = new FileWriter(b); //here the output path is writted
//True = Append to file, false = Overwrite
//remove the header column from the list
result.remove(0);
//
// // Write CSV
String[] lineArray = headerColumn.split("\\|");
int index = 0;
while (index < lineArray.length) {
writer.write(lineArray[index]);
writer.write("|");
index++;
}
writer.write("\r\n");
for (Do do1: result) {
//for all columns conditions checked and thwy are wriiten as csv file format in the outpath
}
writer.write("\r\n");
}
System.out.println("Write success!");
System.err.println("result size" + result.size());
writer.close();
在本地运行上述代码时,csv文件已成功写入输出文件路径,并且代码已成功执行
但是在群集上运行时,它在色调浏览器中被杀死,并显示未找到指定输出路径的路径
在这一部分之前,代码将在hue浏览器yarn集群中成功执行
f.repartition(1).write()
.mode(SaveMode.Overwrite)
.format("com.databricks.spark.csv")
.option("header", "true")
.option("delimiter", "|")
.save("E:\\data\\Dump\\praga\\showtest");
在hdfs中创建了showtest文件夹,还成功创建了部分00000文件,但是在该部分获取异常之后,是否有任何方法可以解决此问题?