【发布时间】:2017-04-16 23:24:50
【问题描述】:
我正在尝试测试 memsql-spark-connector,为此我在 AWS (https://docs.memsql.com/docs/quick-start-with-amazon-webservices) 上创建了一个单节点 MemSQL 集群。
我想在我的笔记本电脑上以本地模式运行 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 上它是一个实例 ID,所以很难出错。
这意味着即使我在与叶节点相同的实例上拥有 Spark 执行器,它也无法工作。感觉我的设置有问题,但实际上我没有更改任何设置,都是默认设置。
主节点和叶节点是否应该使用相同的凭据?有没有办法为叶子单独设置它们?
【问题讨论】: