Spark 1.6.2에서 Spark 2.0.2로 응용 프로그램을 업그레이드하고 있습니다. 이 문제는 엄격하게 스파크 관련 문제가 아닙니다. Spark 1.6.2에는 Kryo 2.21이 포함되어 있습니다. Spark 2.0.2에는 Kryo 3.0.3이 포함되어 있습니다.Spark 2.0으로 업그레이드 할 때 크라이 오 등록 문제가 발생했습니다.
응용 프로그램은 HDFS에 Kryo와 직렬화 된 일부 데이터를 저장합니다. 공간을 절약하기 위해 Kryo 등록이 시행됩니다. 클래스가 Kryo에 등록되면 순차적 ID를 얻고이 ID는 전체 클래스 이름 대신 클래스를 유선 형식으로 나타내는 데 사용됩니다. 우리가 새로운 클래스를 등록 할 때, 우리는 항상 그것을 마지막에 놓는다. 그래서 그것은 사용되지 않은 ID를 얻는다. 또한 등록 된 수업을 삭제하지 않습니다. 클래스가 삭제되면 ID를 예약하기 위해 자리 표시자를 등록합니다. 이렇게하면 ID가 안정되고 응용 프로그램의 한 버전이 이전 버전에서 작성된 데이터를 읽을 수 있습니다.
Kryo는 동일한 등록 메커니즘을 사용하여 생성자에서 기본 클래스를 등록합니다. Kryo 2.21에서는 9 개의 기본 클래스를 등록하므로 첫 번째 사용자 등록 클래스는 ID 9를 얻습니다. 그러나 Kryo 2.22 이상에서는 10 개의 기본 클래스를 등록합니다. (void
was added.) 이것은 사용자 등록 클래스가 ID 10부터 시작한다는 것을 의미합니다.
Spark 2.0.2로 업그레이드 한 후에도 이전 데이터를로드 할 수 있습니까?
(우리의 첫 번째 사용자 등록 클래스가 사용되지 않는 클래스 있다면 그것은 좋은 것입니다.하지만이 아니다. 그것은 scala.Tuple2[_, _]
입니다.)
어떻게 Kryo가 2.21에서 2.22로 변경 될 수 있습니까? 부상을 입히기 위해 changelog는 모든 릴리스에 대해 직렬화 호환성을 "예"로 나열합니다. 그러나 changelog는 2.22에서 시작됩니다. –
그래, 해결 방법이 그렇게 나쁘지는 않습니다. 나는 거기에서 너무 극적이었다고 생각한다. –