[HADOOP] Apache SPARK : 브로드 캐스트 변수에 대한 -Nullpointer 예외 (YARN 클러스터 모드)
HADOOPApache SPARK : 브로드 캐스트 변수에 대한 -Nullpointer 예외 (YARN 클러스터 모드)
나는 YARN 클러스터에서 String 형 변수를 브로드 캐스팅하려고하는 간단한 스파크 애플리케이션을 가지고있다. 그러나 브로드 캐스트 된 변수 값에 액세스하려고 할 때마다 작업 내에서 null이 발생합니다. 너희들이 제안 할 수 있다면, 내가 여기서 잘못하고있는 일이 정말로 도움이 될 것이다. 내 코드는 다음과 같습니다 : -
public class TestApp implements Serializable {
static Broadcast<String[]> mongoConnectionString;
public static void main( String[] args ) {
String mongoBaseURL = args[0];
SparkConf sparkConf = new SparkConf().setAppName(Constants.appName);
JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);
mongoConnectionString = javaSparkContext.broadcast(args);
JavaSQLContext javaSQLContext = new JavaSQLContext(javaSparkContext);
JavaSchemaRDD javaSchemaRDD = javaSQLContext.jsonFile(hdfsBaseURL+Constants.hdfsInputDirectoryPath);
if(javaSchemaRDD!=null) {
javaSchemaRDD.registerTempTable("LogAction");
javaSchemaRDD.cache();
pageSchemaRDD = javaSQLContext.sql(SqlConstants.getLogActionPage);
pageSchemaRDD.foreach(new Test());
}
}
private static class Test implements VoidFunction<Row> {
private static final long serialVersionUID = 1L;
public void call(Row t) throws Exception {
logger.info("mongoConnectionString "+mongoConnectionString.value());
}
}
}
해결법
-
==============================
1.브로드 캐스트 변수가 클래스 수준에 있기 때문입니다. 그리고 클래스가 작업자 노드에서 초기화되면 main 메소드에서 할당 한 값을 볼 수 없게됩니다. 브로드 캐스트 변수가 초기화되지 않았기 때문에 null 만 표시됩니다. 내가 찾은 해법은 메서드를 호출 할 때 메서드에 브로드 캐스트 변수를 전달하는 것이 었습니다. 이것은 또한 Accumulators의 경우입니다.
브로드 캐스트 변수가 클래스 수준에 있기 때문입니다. 그리고 클래스가 작업자 노드에서 초기화되면 main 메소드에서 할당 한 값을 볼 수 없게됩니다. 브로드 캐스트 변수가 초기화되지 않았기 때문에 null 만 표시됩니다. 내가 찾은 해법은 메서드를 호출 할 때 메서드에 브로드 캐스트 변수를 전달하는 것이 었습니다. 이것은 또한 Accumulators의 경우입니다.
from https://stackoverflow.com/questions/28875921/apache-spark-nullpointer-exception-on-broadcast-variables-yarn-cluster-mode by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] java.lang.NoSuchMethodError : org.apache.hadoop.conf.Configuration.reloadExistingConfigurations () V (0) | 2019.07.20 |
---|---|
[HADOOP] 행 키에 대해 다른 값을 넣을 수 있지만 hbase에 동일한 타임 스탬프를 넣는 솔루션은 무엇입니까? (0) | 2019.07.20 |
[HADOOP] Apache Spark의 맥락에서 메모리 내 데이터 저장은 무엇을 의미합니까? (0) | 2019.07.20 |
[HADOOP] hiveql에서 열을 행으로 변환 (UNPIVOT) (0) | 2019.07.20 |
[HADOOP] 수백만 개의 작은 XML 파일 구문 분석 (0) | 2019.07.20 |