Я хочу запустить Spark-задание в кластере виртуальных виртуальных машин Google и внутри операции с картами Мне нужно сделать запрос на поиск по эластичности. Моя проблема заключается в том, что Спарк и Elastic Search есть конфликт на библиотеке Гуава, а Спарк использует Guava 14 и ES Guava 18.Spark on YARN confilict with Elasticsearch TransportClient из-за библиотеки Гуавы разных версий
Моя проблема заключается в вызове метода com.google.common.util.concurrent.MoreExecutors.directExecutor()
, который существует в гуавы 18, но не в гуавы 14.
Более подробно работа, которую я пытаюсь сделать, это что-то вроде следующего.
input.map(record=>{
val client=openConnection()
val newdata=client.query(record.someInfo)
new record(newdata)
})
Метод openConnection
показан ниже
public static TransportClient openConnection(String ipAddress, int ipPort) throws UnknownHostException {
Settings settings = Settings.settingsBuilder().put("cluster.name", "elasticsearch").build();
TransportClient client = TransportClient.builder().settings(settings).build().
addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ipAddress), ipPort));
return client;
}
Я пытался использовать штриховку, чтобы заставить ES использовать Guava 18 путем добавления правила затенения в файле SBT следующим образом:
libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.6.0" % "provided"
libraryDependencies += "org.apache.spark" % "spark-graphx_2.10" % "1.6.0" % "provided" ,
libraryDependencies += "org.apache.spark" % "spark-sql_2.10" % "1.6.0" % "provided" ,
libraryDependencies += "org.apache.spark" % "spark-streaming_2.10" % "1.6.0" % "
libraryDependencies += "org.elasticsearch" % "elasticsearch" % "2.2.0",
assemblyShadeRules in assembly :=Seq(
ShadeRule.rename("com.google.common.*" -> "[email protected]").
inLibrary("org.elasticsearch" % "elasticsearch" % "2.2.0"))
Проблема, однако, похоже, остается. Есть ли способ разрешить этот конфликт?
Удалить правила штриховки для Спарк, так что это при условии, библиотека. Я бы также попытался использовать две звездочки ('**') в правиле переименования для Guava. Если он все еще не работает, проверьте выходную банку, если имена пакетов изменились. Вы можете сделать это, переименовав банку в zip, а затем проверив каталоги в нем. –