无需额外部署即可使用Apache Spark - Apache HBase Connector。
首先你必须包含这个包。可以通过以下选项完成*
spark.jars.packages com.hortonworks:shc-core:1.1.1-2.1-s_2.11
spark.jars.repositories http://repo.hortonworks.com/content/groups/public/
在您的spark-defaults.conf 或spark-submit / SparkR 的等效命令行参数中
--packages com.hortonworks:shc-core:1.1.1-2.1-s_2.11 \
--repositories http://repo.hortonworks.com/content/groups/public/
包的版本(s_2.11 以上)必须与用于构建 Spark 的 Scala 版本相匹配。
现在假设您将表定义为
create 'FooBar', 'Foo', 'Bar'
并且您希望 SparkR 插入等效于:
put 'FooBar', '1000', 'Foo:Value', 'x1'
put 'FooBar', '1000', 'Bar:Value', 'y1'
put 'FooBar', '2000', 'Foo:Value', 'x2'
put 'FooBar', '2000', 'Bar:Value', 'y2'
您必须提供目录映射:
catalog = '{
"table":{"namespace":"default", "name":"FooBar"},
"rowkey":"key",
"columns":{
"rowkey":{"cf":"rowkey", "col":"key", "type":"string"},
"foo_value":{"cf":"Foo", "col":"Value", "type":"string"},
"bar_value":{"cf":"Bar", "col":"Value", "type":"string"}
}
}'
和输入表:
df <- createDataFrame(data.frame(
rowkey = c("1000", "2000"), foo_value = c("x1", "x2"), bar_value = c("y1", "y2")
))
最后,您可以使用以下选项申请write.ml:
write.df(df,
source = "org.apache.spark.sql.execution.datasources.hbase",
mode = "append", catalog = catalog)
详情请参考official connector documantion。
如果您不介意其他依赖项,您可以部署 Apache Phoenix,映射您的 HBase 表(例如检查 PHOENIX-447),然后使用 the official connector 或 built-in JDBC source 来写入您的数据。
需要额外付费才能提供更好的用户体验。例如,如果您将 Phoenix 表定义为:
CREATE TABLE foobar (
id VARCHAR NOT NULL PRIMARY KEY,
foo INTEGER,
bar VARCHAR
);
你可以
SparkR:::callJStatic(
"java.lang.Class", "forName",
"org.apache.phoenix.jdbc.PhoenixDriver"
)
df <- createDataFrame(data.frame(
id = c("1000", "2000"), foo = c(1, 2), bar = c("x", "y")
))
write.df(
dfr, source = "org.apache.phoenix.spark",
# Note that the only supported mode is `overwrite`,
# which in fact works like `UPSERT`
mode = "overwrite",
table = "FooBar",
# ZooKeeper URL
zkUrl = "host:port"
)
与第一个选项类似,您必须包含corresponding connector。但是,与 HBase 连接器不同,它不是自给自足的,需要在 CLASSPATH 上安装 Phoenix Core 和 Client jar。
* 以后别忘了调整包的版本。