컴퓨터에서 로컬로 Apache Spark의 웹 크롤링 / 스크래핑 프로그램을 테스트하고있었습니다.
프로그램은 산발적으로 실패하는 휘발성 함수를 취하는 몇 가지 RDD 변환을 사용합니다. (이 함수의 목적은 URL 링크를 웹 페이지로 변환하는 것입니다. 가끔은 헤드리스 브라우저가 일시적으로 중단되거나 오버로드되었습니다. 피할 수는 없습니다)
Apache Spark에는 강력한 장애 조치 및 재시도 기능이 있으며, 실패한 변환 또는 손실 된 데이터는 찾을 수있는 리소스 (마법처럼 들리나요?)에서 처음부터 다시 계산할 수 있으므로 장애 조치 나 try-catch를 넣지 않았습니다. 암호.
이것은 내 스파크 구성입니다.
val conf = new SparkConf().setAppName("MoreLinkedIn")
conf.setMaster("local[*]")
conf.setSparkHome(System.getenv("SPARK_HOME"))
conf.setJars(SparkContext.jarOfClass(this.getClass).toList)
conf.set("spark.task.maxFailures","40") //definitely enough
불행히도 대부분의 단계와 개별 작업이 성공한 후에 작업이 실패했습니다. 최신 로그인 콘솔에 다음이 표시됩니다.
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 1.0:7 failed 1 times, most recent failure: Exception failure in TID 23 on host localhost: org.openqa.selenium.TimeoutException: Timed out after 50 seconds waiting for...
Spark는 한 번 실패한 후 비겁하게 포기한 것 같습니다. 좀 더 끈기있게 구성하려면 어떻게해야합니까?
(내 프로그램은 https://github.com/tribbloid/spookystuff 에서 다운로드 할 수 있습니다 . 희소하고 체계화되지 않은 코드 / 문서에 대해 죄송합니다. 며칠 동안 시작합니다.)
추가 : 직접 시도하려면 다음 코드가이 문제를 보여줄 수 있습니다.
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Spark Pi")
conf.setMaster("local[*]")
conf.setSparkHome(System.getenv("SPARK_HOME"))
conf.setJars(SparkContext.jarOfClass(this.getClass).toList)
conf.set("spark.task.maxFailures","400000")
val sc = new SparkContext(conf)
val slices = if (args.length > 0) args(0).toInt else 8
val n = 100000 * slices
val count = sc.parallelize(1 to n, slices).map { i =>
val x = java.lang.Math.random()
if (x > 0.9) throw new IllegalStateException("the map has a chance of 10% to fail")
x
}.reduce(_ + _)
sc.stop()
println("finished")
}
이 게시물에서 동일한 IllegalStateException이 32 번 재 시도되었습니다. Apache Spark Throws java.lang.IllegalStateException : unread block data
가장 권위있는 답변을 전달하겠습니다.
이것이 로컬 모드에 유용한 기능이라면 JIRA를 열어 설정을 문서화하거나 개선해야합니다 (특수 URL 형식 대신 spark.local.retries 속성을 추가하고 싶습니다). 우리는 초기에 유닛 테스트를 제외한 모든 것에 대해 비활성화했습니다. 로컬 모드의 예외는 애플리케이션에 문제가 있음을 의미하기 때문에 90 %의 시간 동안 사용자가 작업을 여러 번 재 시도하고 걱정하는 것보다 즉시 디버그하도록 놔 두었습니다. 왜 그렇게 많은 오류가 발생하는지.
매튜
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다