Ich habe Funke im Standalone-Modus (einzelne Knoten in meinem Laptop), versucht zu integrieren opencv, um eine Reihe von Bildern aus einem Verzeichnis zu lesen und Gesichter in jedem zu erkennen Bild. Ich versuche zu verstehen, wie die nativen Abhängigkeiten an Executor jvm geliefert werden, ich hätte gedacht, dass in dem unten angegebenen Programm die System.loadLibrary-Funktion als Teil von Treiber jvm ausgeführt würde, und der Executor jvm würde fehlschlagen, wenn die anonyme Funktion versucht um die native Bibliothek zu finden. Aber entgegen meinem Verständnis funktioniert das Programm gut. Kann jemand erklären, wie das funktioniert und welcher Teil des Codes vom Treiber zum Executor geliefert wird?Apache spark mit nativen Abhängigkeiten - Treiber/Executor Code-Fluss im Standalone-Modus
public static void main(String[] args)
{
SparkConf conf = new SparkConf().setMaster("spark://localhost:7077").setAppName("Image detect App");
JavaSparkContext sc = new JavaSparkContext(conf);
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
CascadeClassifier faceDetector = new CascadeClassifier("/home/xx/Project/opencv-3.1.0/data/haarcascades_cuda/haarcascade_frontalface_alt.xml");
File tempDir = new File("/home/xx/images/new");
String tempDirName = tempDir.getAbsolutePath();
JavaPairRDD<String, PortableDataStream> readRDD = sc.binaryFiles(tempDirName,3);
List<Tuple2<String, PortableDataStream>> result = readRDD.collect();
for (Tuple2<String, PortableDataStream> res : result)
{
Mat image = Imgcodecs
.imread(res._1().replace("file:",""));
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
for (Rect rect : faceDetections.toArray()) {
Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0));
}
String filename = res._1().replace("file:","") + "_out";
Imgcodecs.imwrite(filename, image);
}
} Haben Sie ein Glas mit dem obigen Programm erstellt und lief die folgenden Zündbefehl einreichen, es funktioniert wie erwartet gut.
./bin/spark-submit --verbose --master funke: // localhost: 7077 --num-executors 2 --klasse com.xxx.MainSparkImage --jars/home/xx/Project/opencv- 3.1.0/release/bin/opencv-310.jar --driver-library-path /home/xx/Project/opencv-3.1.0/release/lib /home/xx/ImageProcess.jar
Dank Srivatsan
spark.driver.extraClassPath spark.executor.extraClassPath haben Sie diese während des Sendens von Spark versucht? –
Wird versuchen, spark.executor.extraClassPath, mit seinem Namen, sieht aus wie das sollte derjenige sein, die Abhängigkeiten an den Executor zu versenden. Danke vielmals. –