2017-01-03 9 views
0

Итак, во-первых, я хочу сказать, что единственное, что я видел, касается этой проблемы: Spark 1.6.1 SASL. Однако при добавлении конфигурации для проверки искры и пряжи она все еще не работает. Ниже моя конфигурация для искры с помощью искры подати на кластере пряжи на ОЙ Амазонке:Spark SASL не работает на emr с пряжей

SparkConf sparkConf = new SparkConf().setAppName("secure-test"); 
    sparkConf.set("spark.authenticate.enableSaslEncryption", "true"); 
    sparkConf.set("spark.network.sasl.serverAlwaysEncrypt", "true"); 
    sparkConf.set("spark.authenticate", "true"); 
    sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); 
    sparkConf.set("spark.kryo.registrator", "org.nd4j.Nd4jRegistrator"); 
    try { 
     sparkConf.registerKryoClasses(new Class<?>[]{ 
       Class.forName("org.apache.hadoop.io.LongWritable"), 
       Class.forName("org.apache.hadoop.io.Text") 
     }); 
    } catch (Exception e) {} 

    sparkContext = new JavaSparkContext(sparkConf); 
    sparkContext.hadoopConfiguration().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem"); 
    sparkContext.hadoopConfiguration().set("fs.s3a.enableServerSideEncryption", "true"); 
    sparkContext.hadoopConfiguration().set("spark.authenticate", "true"); 

Обратите внимание, что я добавил spark.authenticate к конфигурации Hadoop в sparkContext в коде вместо колонкового site.xml (который Я предполагаю, что смогу это сделать, потому что другие вещи тоже работают).

Означает здесь: https://github.com/apache/spark/blob/master/common/network-yarn/src/main/java/org/apache/spark/network/yarn/YarnShuffleService.java Кажется, что оба искры.authenticate's необходимы. Когда я запускаю это приложение, я получаю следующую трассировку стека.

17/01/03 22:10:23 INFO storage.BlockManager: Регистрация исполнителя с локальным внешним сервисом тасования. 17/01/03 22:10:23 ERROR client.TransportClientFactory: исключение при загрузке клиента после 178 мс java.lang.RuntimeException: java.lang.IllegalArgumentException: Неизвестный тип сообщения: -22 at org.apache.spark. network.shuffle.protocol.BlockTransferMessage $ Decoder.fromByteBuffer (BlockTransferMessage.java:67) at org.apache.spark.network.shuffle.ExternalShuffleBlockHandler.receive (ExternalShuffleBlockHandler.java:71) at org.apache.spark.network. server.TransportRequestHandler.processRpcRequest (TransportRequestHandler.java:149) на org.apache.spark.network.server.TransportRequestHandler.handle (TransportRequestHandler.java:102) в org.apache.spark.network.server.TransportChannelHandler.channelRead0 (TransportChannelHandler.java:104) на org.apache.spark.network.server.TransportChannelHandler.channelRead0 (TransportChannelHandler.java:51) в io.netty.channel.SimpleChannelInboundHandler.channelRead (SimpleChannelInboundHandler.java:105) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:333) на io.netty.channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.java:319) на io.netty.handler.timeout.IdleStateHandler.channelRead (IdleStateHandler.java:254) в io.netty .channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:333) на io.netty.channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.java:319) в io.netty.handler.codec.MessageToMessageDecoder.ch annelRead (MessageToMessageDecoder.java:103) на io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:333) на io.netty.channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.java:319) на org.apache. spark.network.util.TransportFrameDecoder.channelRead (TransportFrameDecoder.java:86) на io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:333) на io.netty.channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.java: 319) на io.netty.channel.DefaultChannelPipeline.fireChannelRead (DefaultChannelPipeline.java:787) на io.netty.channel.nio.AbstractNioByteChannel $ NioByteUnsafe.read (AbstractNioByteChannel.java:130)на io.netty.channel.nio.NioEventLoop.processSelectedKey (NioEventLoop.java:511) в io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized (NioEventLoop.java:468) в io.netty.channel.nio. NioEventLoop.processSelectedKeys (NioEventLoop.java:382) на io.netty.channel.nio.NioEventLoop.run (NioEventLoop.java:354) на io.netty.util.concurrent.SingleThreadEventExecutor $ 2.run (SingleThreadEventExecutor.Java: 116) на java.lang.Thread.run (Thread.java:745)

В Документах искру, он говорит

For Spark on YARN deployments, configuring spark.authenticate to true will automatically handle generating and distributing the shared secret. Each application will use a unique shared secret. 

, который кажется неправильным на основе комментариев в файле пряжи выше, но с проблемой стрельбы, я все еще теряюсь на том, куда я должен пойти, чтобы заставить салз работать? Я пропустил что-то очевидное, что где-то задокументировано?

ответ

1

Итак, я, наконец, понял это. Предыдущий поток StackOverflow был технически корректным. Мне нужно было добавить spark.authenticate к конфигурации пряжи. Возможно, это возможно, но я не могу понять, как добавить эту конфигурацию в код, что имеет смысл на высоком уровне, почему это так. Я напишу свою конфигурацию ниже, если кто-то еще столкнется с этой проблемой в будущем.

Во-первых, я использовал AWS конфигураций ЭМИ файл (Примером этого является при использовании АМС кли aws emr create-cluster --configurations file://youpathhere.json)

Затем я добавил следующий JSON к файлу:

[{ 
    "Classification": "spark-defaults", 
    "Properties": { 
     "spark.authenticate": "true", 
     "spark.authenticate.enableSaslEncryption": "true", 
     "spark.network.sasl.serverAlwaysEncrypt": "true" 
    } 
}, 
{ 
    "Classification": "core-site", 
    "Properties": { 
     "spark.authenticate": "true" 
    } 
}]