AWS EMR: Spark - SparkException java IOException: не удалось создать локальный каталог в / tmp / blockmgr * - PullRequest
1 голос
/ 07 мая 2019

У меня кластер AWS EMR со Spark. Я могу подключиться к нему (искра):

  • из главного узла после SSHing в него
  • из другого кластера AWS EMR

Но НЕ МОЖЕТ подключиться к нему:

  • с моей локальной машины (macOS Mojave)
  • от не-EMR машин, таких как Метабаза и Redash

Я прочитал ответы на этот вопрос . Я проверил, что права доступа к папкам и дисковое пространство в порядке на всех узлах. Я предполагаю, что сталкиваюсь с подобной проблемой, о которой Джеймс Вежба просит в комментариях. Однако мне не хватает репутации, чтобы добавить туда комментарий. Кроме того, это может быть другой проблемой, учитывая, что она специфична для AWS EMR.

После SSHing подключение к главному узлу работает нормально.

# SSHed to master node 
$ ssh -i ~/identityfile hadoop@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com

# on master node
$ /usr/lib/spark/bin/beeline -u 'jdbc:hive2://localhost:10001/default'
# it connects fine and I can run commands, for e.g., 'show databases;'

# Beeline version 1.2.1-spark2-amzn-0 by Apache Hive

Соединение с этим узлом также работает нормально с главного узла другого кластера EMR.

Однако соединение не работает с моей локальной машины (macOS Mojave), Метабаза и Redash .

Моя локальная машина:

# installed hive (for beeline)
$ brew install hive

# Beeline version 3.1.1 by Apache Hive
# connect directly
# I have checked that all ports are open for my IP

$ beeline -u 'jdbc:hive2://ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com:10001/default'
# ERROR: ConnectException: Operation timed out 
#
# this connection timeout probably has something to do with spark accepting only localhost connections 
# I have allowed all the ports in AWS security group for my IP

# connect via port forwarding

# open a port
$ ssh -i ~/identityfile -Nf -L 10001:localhost:10001 hadoop@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com


$ beeline -u 'jdbc:hive2://localhost:10001/default'
# Failed to connect to localhost:10001
# Required field 'client_protocol' is unset!

$ beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http'
# org.apache.http.ProtocolException: The server failed to respond with a valid HTTP response

У меня настроена метабаза и Redash в ec2.

метабаза & rarr; подключиться с помощью источника данных Spark SQL & rarr; результаты в java.sql.SQLException: org.apache.spark.SparkException: java.io.IOException: Failed to create local dir in /mnt/tmp/blockmgr*

Redash & rarr; подключиться с помощью источника данных Hive & rarr; приводит к той же ошибке.

1 Ответ

0 голосов
/ 08 мая 2019

Вам необходимо обновить входящие правила группы безопасности, связанной с главным узлом EMR. Вам нужно будет добавить публичный IP-адрес вашего сетевого провайдера. Вы можете найти свой публичный IP-адрес на следующем веб-сайте:

Какой у меня IP

Подробнее о том, как обновить входящие правила с помощью вашего IP-адреса, см. В документации AWS:

Авторизация входящего трафика для ваших экземпляров Linux

Вам также следует проверить исходящие правила вашей собственной сети на случай, если вы работаете в ограниченной сетевой среде.

Убедитесь, что у вас есть исходящий доступ в вашей сети и входящий доступ в группе безопасности главного узла EMR для всех портов, к которым вы хотите получить доступ.

...