Удаленный доступ к конечному узлу при использовании memsql-spark-connector
Я пытаюсь протестировать https://github.com/memsql/memsql-spark-connector и для этого я создал кластер MemSQL с одним узлом на AWS ( https://docs.memsql.com/docs/quick-start-with-amazon-webservices).
На моем ноутбуке я хочу запустить приложение Spark в локальном режиме. Это приложение должно просто создать Dataframe
для таблицы и собрать все строки. Вот код:
val conf = new SparkConf()
.setAppName("Test App")
.setMaster("local[*]")
.set("memsql.host", "x.x.x.x")
.set("memsql.port", "3306")
.set("memsql.user", "root")
.set("memsql.password", "1234")
.set("memsql.defaultDatabase", "dataframes_test")
val sc = new SparkContext(conf)
val memsql = new MemSQLContext(sc)
val df = memsql.table("person")
df.collect().foreach(println(_))
где x.x.x.x
это адрес моего экземпляра AWS.
Проблема в том, что я могу подключиться к серверу MemSQL с моего ноутбука, memsql-spark-connector
пытается получить доступ к конечному узлу напрямую (т.е. подключиться к порту 3307 вместо 3306). И когда это происходит, я получаю следующую ошибку:
java.sql.SQLException: Access denied for user 'root'@'108.208.196.149' (using password: YES)
Но root
пользователь на самом деле имеет все разрешения:
memsql> show grants for 'root'@'%';
+--------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@% |
+--------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*A49656EC00D74D3524072F3452C1FBA7A1F3B561' WITH GRANT OPTION |
+--------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Можно ли предоставить разрешения для конечных узлов, чтобы это соединение x.x.x.x:3307
также успешен?
Я понимаю, что, вероятно, это не тот способ, которым он предназначен для использования, но я хочу сделать это только для тестирования. Удобно отлаживать, когда все в одной JVM, и я не хочу сейчас беспокоиться об установке Spark. Я мог бы установить MemSQL локально, чтобы решить мою проблему, но я не могу сделать это на Mac (верно, кстати?).
Любая помощь приветствуется!
ОБНОВЛЕНИЕ: Только что попытался подключиться локально на сервере и все еще не работает:
ubuntu@ip-x-x-x-x:~$ memsql -P 3307 -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Пароль, который я предоставляю, правильный, в AWS это идентификатор экземпляра, поэтому очень сложно ошибиться.
Это означает, что это не будет работать, даже если бы у меня был Spark executor в одном экземпляре с листовым узлом. Похоже, что-то не так с моей настройкой, но я на самом деле не изменил никаких настроек, все по умолчанию.
Предполагается, что главный узел и конечный узел используют одинаковые учетные данные? Есть ли способ настроить их для листа отдельно?
1 ответ
Эта ошибка означает, что вход в систему был отклонен, то есть неверное имя пользователя / пароль (не то, что у пользователя недостаточно прав). Убедитесь, что пароль, который вы используете в соединителе зажигания, совпадает с паролем на всех узлах.