2017年1月3号更新:

在Spark 2.x版本中更改了DataFrame的定义,而Phoenix4.9及以前(4.10后官方版本会修复)是在Spark1.x的环境下开发的,因此如果使用Spark2.x的环境,不能正常使用Phoenix Spark Interprter, 具体问题可以参考 https://issues.apache.org/jira/browse/PHOENIX-3333,这里给出本人利用链接中的补丁编译后的phoenix,其他参考1.x版本中的配置方式即可。

phoenix-4.9.0-HBase-1.2-server.jar

phoenix-4.9.0-HBase-1.2-client.jar


Phoenix 官方文档给出了如何配置Spark 连接的说明,但是由于版本更新比较快,教程已经有些过时了。

环境配置:

Spark 1.5.2
Phoenix 4.8.0
HBase 1.1.2

如果在 HBase上配置过 Phoenix ,服务端就不需要做任何改动了。

Phoenix 4.8 版本中,已经没有官方示例中的phoenix-<version>-client-spark.jar的文件了,所有的客户端需要的 jar 只有一个 phoenix-<version>-client.jar

连接在 Spark 中连接Phoenix 也有两种方式:

方法1

spark-shell 启动时添加 phoenix jar.

启动spark-shell 是添加参数–jars 即可

1
2
3
4
5
6
7
spark-shell --jars /usr/local/phoenix/phoenix-4.8.0-HBase-1.1-client.jar
# ....
# ....

import org.apache.phoenix.spark._

# 这一句不报错的话就说明搞定了

方法2

配置 spark-defaults.conf

如果不想每次启动都添加 –jars 参数,可以配置$SPARK_HOME/conf 下边的spark-defaults.conf文件,添加下面两个配置项,注意 jar 文件路径与名称的正确性。

1
2
spark.executor.extraClassPath      /usr/local/phoenix/phoenix-4.8.0-HBase-1.1-client.jar
spark.driver.extraClassPath /usr/local/phoenix/phoenix-4.8.0-HBase-1.1-client.jar

这样再启动spark-shell,就可以直接导入需要的包了,注意 SparkContext sc 和 SQLContext sqlContext 都已经是设置好了的,可以直接用。其他可以参考官方给出的示例。