如何使用 apache spark 访问从 impala 创建的 apache kudu 表

Posted

技术标签:

【中文标题】如何使用 apache spark 访问从 impala 创建的 apache kudu 表【英文标题】:How to access to apache kudu table created from impala using apache spark 【发布时间】:2017-05-23 22:16:29 【问题描述】:

我下载了 apache kudu 的快速启动虚拟机,并按照示例在此页面中出现https://kudu.apache.org/docs/quickstart.html,实际上我创建了名为“sfmta”的表,但是当我尝试使用访问 kudu 表时spark-shell 加上下面这句话:

val df = spark.sqlContext.read.options(Map("kudu.master" -> "quickstart.cloudera:7051","kudu.table" -> "sfmta")).kudu

我收到此错误

org.apache.kudu.client.NonRecoverableException: The table does not exist: table_name: "sfmta"

我也尝试过指定不同的表名,如“default:sfmta”、“default::sfmta”,结果相同。你能告诉我为什么会这样吗?为什么我无法访问 kudu 表?这是用 impala 创建的吗?

提前致谢。

【问题讨论】:

【参考方案1】:

在向 kudu 邮件用户组询问后,我终于找到了这个问题的答案。

在http://quickstart.cloudera:8051/tables检查表名后,我可以看到我想查询的表的全名,而不是使用“sfmta”,我应该使用“impala::default.sfmta”,如下所示:

val df = spark.sqlContext.read.options(Map("kudu.master" -> "quickstart.cloudera:7051","kudu.table" -> "impala::default.sfmta")).kudu

所以在替换表名后它起作用了。

【讨论】:

【参考方案2】:

如果你创建一个数据库(而不是“默认”),表应该是,

impala:database_name.table_name

【讨论】:

【参考方案3】:

Will 的答案可能有误。更正一个(2 个冒号):

impala::database_name.table_name

对于默认数据库:

impala::default.table_name

已使用 CDH 5.1X 和 Spark 1.6.X 进行了测试。我希望这会节省您的时间。

【讨论】:

以上是关于如何使用 apache spark 访问从 impala 创建的 apache kudu 表的主要内容,如果未能解决你的问题,请参考以下文章

如何在Spark提交中使用s3a和Apache spark 2.2(hadoop 2.8)?

从 Apache Spark Streaming 上下文访问 JAR 中资源目录中的文件

如何在 Spark Submit 中将 s3a 与 Apache spark 2.2(hadoop 2.8) 一起使用?

org.apache.spark.sql.AnalysisException:无法从概率中提取值

为啥不能在 UDF 中访问数据框? [Apache Spark Scala] [重复]

Apache Spark MLlib:如何从 PMML 导入模型