Erro de shell do Mac ao inicializar SparkContext

87

Tentei iniciar o Spark 1.6.0 (spark-1.6.0-bin-hadoop2.4) no Mac OS Yosemite 10.10.5 usando

"./bin/spark-shell". 

Tem o erro abaixo. Também tentei instalar diferentes versões do Spark, mas todas apresentaram o mesmo erro. Esta é a segunda vez que estou executando o Spark. Minha corrida anterior funciona bem.

log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Using Spark's repl log4j profile: org/apache/spark/log4j-defaults-repl.properties
To adjust logging level use sc.setLogLevel("INFO")
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.6.0
      /_/

Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_79)
Type in expressions to have them evaluated.
Type :help for more information.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
16/01/04 13:49:40 ERROR SparkContext: Error initializing SparkContext.
java.net.BindException: Can't assign requested address: Service 'sparkDriver' failed after 16 retries!
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:444)
    at sun.nio.ch.Net.bind(Net.java:436)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:125)
    at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:485)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1089)
    at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:430)
    at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:415)
    at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:903)
    at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:198)
    at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:348)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:357)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
    at java.lang.Thread.run(Thread.java:745)
java.net.BindException: Can't assign requested address: Service 'sparkDriver' failed after 16 retries!
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:444)
    at sun.nio.ch.Net.bind(Net.java:436)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:125)
    at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:485)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1089)
    at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:430)
    at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:415)
    at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:903)
    at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:198)
    at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:348)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:357)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
    at java.lang.Thread.run(Thread.java:745)

java.lang.NullPointerException
    at org.apache.spark.sql.SQLContext$.createListenerAndUI(SQLContext.scala:1367)
    at org.apache.spark.sql.hive.HiveContext.<init>(HiveContext.scala:101)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.apache.spark.repl.SparkILoop.createSQLContext(SparkILoop.scala:1028)
    at $iwC$$iwC.<init>(<console>:15)
    at $iwC.<init>(<console>:24)
    at <init>(<console>:26)
    at .<init>(<console>:30)
    at .<clinit>(<console>)
    at .<init>(<console>:7)
    at .<clinit>(<console>)
    at $print(<console>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.spark.repl.SparkIMain$ReadEvalPrint.call(SparkIMain.scala:1065)
    at org.apache.spark.repl.SparkIMain$Request.loadAndRun(SparkIMain.scala:1346)
    at org.apache.spark.repl.SparkIMain.loadAndRunReq$1(SparkIMain.scala:840)
    at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:871)
    at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:819)
    at org.apache.spark.repl.SparkILoop.reallyInterpret$1(SparkILoop.scala:857)
    at org.apache.spark.repl.SparkILoop.interpretStartingWith(SparkILoop.scala:902)
    at org.apache.spark.repl.SparkILoop.command(SparkILoop.scala:814)
    at org.apache.spark.repl.SparkILoopInit$$anonfun$initializeSpark$1.apply(SparkILoopInit.scala:132)
    at org.apache.spark.repl.SparkILoopInit$$anonfun$initializeSpark$1.apply(SparkILoopInit.scala:124)
    at org.apache.spark.repl.SparkIMain.beQuietDuring(SparkIMain.scala:324)
    at org.apache.spark.repl.SparkILoopInit$class.initializeSpark(SparkILoopInit.scala:124)
    at org.apache.spark.repl.SparkILoop.initializeSpark(SparkILoop.scala:64)
    at org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$process$1$$anonfun$apply$mcZ$sp$5.apply$mcV$sp(SparkILoop.scala:974)
    at org.apache.spark.repl.SparkILoopInit$class.runThunks(SparkILoopInit.scala:159)
    at org.apache.spark.repl.SparkILoop.runThunks(SparkILoop.scala:64)
    at org.apache.spark.repl.SparkILoopInit$class.postInitialization(SparkILoopInit.scala:108)
    at org.apache.spark.repl.SparkILoop.postInitialization(SparkILoop.scala:64)
    at org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$process$1.apply$mcZ$sp(SparkILoop.scala:991)
    at org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$process$1.apply(SparkILoop.scala:945)
    at org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$process$1.apply(SparkILoop.scala:945)
    at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:135)
    at org.apache.spark.repl.SparkILoop.org$apache$spark$repl$SparkILoop$$process(SparkILoop.scala:945)
    at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:1059)
    at org.apache.spark.repl.Main$.main(Main.scala:31)
    at org.apache.spark.repl.Main.main(Main.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

<console>:16: error: not found: value sqlContext
         import sqlContext.implicits._
                ^
<console>:16: error: not found: value sqlContext
         import sqlContext.sql

Então eu adiciono

export SPARK_LOCAL_IP="127.0.0.1"

para spark-env.sh, o erro muda para:

 ERROR : No route to host
    java.net.ConnectException: No route to host
        at java.net.Inet6AddressImpl.isReachable0(Native Method)
        at java.net.Inet6AddressImpl.isReachable(Inet6AddressImpl.java:77)
        at java.net.InetAddress.isReachable(InetAddress.java:475)
...
<console>:10: error: not found: value sqlContext
       import sqlContext.implicits._
              ^
<console>:10: error: not found: value sqlContext
       import sqlContext.sql
Jia
fonte
Na minha máquina de trabalho 10.10.5 - Também recebo um erro (diferente) se exportar essa variável, portanto, não acho que seja uma correção de qualquer maneira. Sem ele funciona bem. Você já tentou executar no nível de log DEBUG para obter mais informações?
jbrown
1
Isso pode ser porque o Spark não funciona bem com ipv6 agora. Você poderia tentarbin/spark-shell --driver-java-options "-Djava.net.preferIPv4Stack=true"
zsxwing
@zsxwing eu tentei e tem um erro semelhante16/01/05 10:29:39 ERROR : No route to host 16/01/05 10:29:39 ERROR : No route to host java.net.ConnectException: No route to host at java.net.Inet4AddressImpl.isReachable0(Native Method) at java.net.Inet4AddressImpl.isReachable(Inet4AddressImpl.java:70) at java.net.InetAddress.isReachable(InetAddress.java:475) at java.net.InetAddress.isReachable(InetAddress.java:434) at tachyon.util.NetworkUtils.getLocalIpAddress(NetworkUtils.java:122) at tachyon.util.NetworkUtils.getLocalHostName(NetworkUtils.java:78)...
Jia
Talvez algum problema de configuração de rede em sua máquina. Você poderia tentar ping 127.0.0.1?
zsxwing
@zsxwing Tentei ping 127.0.0.1 e funciona bem.
Jia

Respostas:

139

As etapas a seguir podem ajudar:

  1. Obtenha seu nome de host usando o comando "hostname".

  2. Faça uma entrada no arquivo / etc / hosts para o seu nome de host se não estiver presente da seguinte maneira:

    127.0.0.1      your_hostname
    

Espero que isto ajude!!

Gaurav Sharma
fonte
Obrigado pelo conselho. Eu tive um problema semelhante em um servidor ubuntu jupyter quando estava tentando criar um sparkContext de um cliente jupyter. Adicionar o mapeamento no arquivo de hosts corrigiu o problema :-)
Julien Bachmann
2
Você deve editar "sudo nano / private / etc / hosts" no mac
Saeed
1
executar ping $(hostname), deve resolver para 127.0.0.1
Thomas Decaux
Consertou para mim. Obrigado!
Andrés Mejía
1
Executar este comando também me ajudou -> sudo hostname -s 127.0.0.1
MRTJ
119

Sempre percebo isso quando alterno entre redes. Isso resolve:

$ sudo hostname -s 127.0.0.1

Ardavan
fonte
4
Isso funcionou para mim também. No meu caso, acontece logo depois que eu logo na minha VPN corporativa. Eu tenho que executar isso algumas vezes por semana enquanto estou desenvolvendo meus aplicativos Spark.
AdrianVeidt
vpn corporativa - o inimigo oculto
StephenBoesch
1
no GNU / Linux:$ sudo hostname -b 127.0.0.1
orluke
1
Impressionante. Eu também enfrentei isso devido à vpn corporativa, e isso resolveu.
Dileep Kumar Patchigolla
1
Obrigado, funcionou. Você poderia explicar, por favor, por que isso funciona?
vitalii de
34

Eu construí a partir do branch master atual com versão 2.0.0-SNAPSHOT. Depois de adicionar export SPARK_LOCAL_IP="127.0.0.1"a load-spark-env.shele funcionou para mim. Estou usando Macos 10.10.5. Então pode ser um problema de versão?

meltac
fonte
3
Eu fui capaz de usar $ SPARK_LOCAL_IP="127.0.0.1" gradle my-gradle-task-using-local-spark. O problema surgiu ao usar o vpn. Estou usando Macos 10.11.1.
Sergey Orshanskiy
31

Apenas defina o spark.driver.hostcomo seu host local se você usar IDE

SparkConf conf = new  SparkConf().setMaster("local[2]").setAppName("AnyName").set("spark.driver.host", "localhost");
JavaSparkContext sc = new JavaSparkContext(conf);
Mohamed Ahmed
fonte
o que significa local [2]? Acabei de definir o master como 'local' junto com a configuração da prop spark.driver.host, e resolvi meu problema.
medloh,
Boa ideia para adicionar spark.driver.hostdiretamente no código em vez de mexer com o$SPARK_HOME/conf/spark-defaults.conf
StephenBoesch
Esta é a solução exata que procuro. Funcionou. Por que deveria ser apenas se estivermos usando IDE? isso terá impacto para testes não IDE?
Buda de
8

Existem dois erros, eu acho.

  1. O ip local do spark não estava correto e precisa ser alterado para 127.0.0.1.
  2. Você não definiu o sqlContext corretamente.

Para 1. Eu tentei:

  • 1) exportou SPARK_LOCAL_IP = "127.0.0.1" em ~ / .bash_profile
  • 2) adicionado export SPARK_LOCAL_IP = "127.0.0.1" em load-spark-env.sh sob $ SPARK_HOME

Mas nenhum dos dois funcionou. Então tentei o seguinte e funcionou:

val conf = new SparkConf().
    setAppName("SparkExample").
    setMaster("local[*]").
    set("spark.driver.bindAddress","127.0.0.1")
val sc = new SparkContext(conf)

Para 2. você pode tentar:

sqlContext = SparkSession.builder.config("spark.master","local[*]").getOrCreate()

e depois import sqlContext.implicits._

O construtor em SparkSession usará automaticamente o SparkContext se ele existir, caso contrário, ele criará um. Você pode criar dois explicitamente, se necessário.

Rong Du
fonte
7

Se você não deseja alterar o nome do host do seu Mac, pode fazer o seguinte:

  1. Encontre o arquivo de modelo spark-env.sh.templateem sua máquina (provavelmente está em /usr/local/Cellar/apache-spark/2.1.0/libexec/conf/).
  2. cp spark-env.sh.template spark-env.sh
  3. Adicione export SPARK_LOCAL_IP=127.0.0.1sob o comentário para IP local.

Comece spark-shelle divirta-se.

Dvin
fonte
4

Se você estiver usando Scala para executar o código em um IDE, e se você enfrentar o mesmo problema e não estiver usando SparkConf () como apontado acima e usando SparkSession (), então você pode vincular o endereço do host local da seguinte forma, pois o conjunto só funciona em SparkConf (). Você deve usar .config () para definir a configuração do spark conforme mostrado abaixo:

    val spark = SparkSession
       .builder()
       .appName("CSE512-Phase1")
       .master("local[*]").config("spark.driver.bindAddress", "localhost")
       .getOrCreate()
Sidharth Panicker
fonte
3

export SPARK_LOCAL_IP = 127.0.0.1 (para mac .bash_profile)

altúrio
fonte
2

Às vezes, o firewall impede a criação e vinculação de um soquete. certifique-se de que seu firewall não está habilitado e também de verificar o ip de sua máquina em / etc / hosts e certificar-se de que está OK e tente novamente:

sudo ufw disable
Mahdi Esmailoghli
fonte
1
opa. no linux Obrigado pelo
aviso
2

Isso acontece quando você alterna entre diferentes redes (VPN - PROD, CI baseado nas redes da sua empresa para acessar diferentes ambientes).

Tive o mesmo problema, sempre que troco a VPN.

atualize sudo / etc / hosts com o valor do nome do host em seu Mac.

Yoga Gowda
fonte
2
sparkContext = new JavaSparkContext("local[4]", "Appname")

export SPARK_LOCAL_IP=127.0.0.1

apenas fazer acima funcionou para mim.

geekgirlspu
fonte
0

No Mac, verifique o IP em Preferências do sistema -> Rede -> clique no Wifi ao qual você está conectado (deve mostrar o ícone verde) -> verifique o IP logo acima do seu nome de rede.

Faça a seguinte entrada em ../conf/spark-env.sh:

SPARK_MASTER_HOST=<<your-ip>>
SPARK_LOCAL_IP=<<your-ip>>

e então tente o shell de faísca. Fazer as mudanças acima funcionou para mim.

Jyoti Valeja
fonte