您的位置:首页 > 数据库

SequoiaDB Spark Connector教程

2015-08-06 13:26 267 查看
近日,Spark的官方博客中刊登了其全球战略合作伙伴SequoiaDB发布的技术博客,介绍SequoiaDB对于Spark的整合以及SequoiaDB+Spark的解决方案。目前,SequoiaDB也成为了Spark官方认证的全球合作伙伴和授权的Spark提供商之一,全球只有14家企业获得了该认证,其中包括了IBM、Oracle、SAP和华为这些行业巨头,SequoiaDB也是国内唯一获得该认证的数据库。

 

 

这次的教程,也就来跟大家分享如何简单的配置Spark与SequoiaDB实现对接。

1.SequoiaDB的下载安装

这部分内容在此不做赘述,可以前往SequoiaDB文档中心查看:

http://www.sequoiadb.com/cn/index.php?a=index&m=Files

 

2.Spark的下载安装

此处我们将介绍Spark的安装和配置,其中配置部分需要符合SequoiaDB使用的需求,所以需要注意。

 

2.1安装

用 SequoiaDBAdministration Console 来安装 Apache Spark 是非常简单的。

首先,你需要获取最新版本的 Sparkframework。打开以下链接获取最新版本:http://spark.apache.org/downloads.html.

以 Spark1.3+Hadoop 2.4为例,下载文件名为“spark-1.3.0-bin-hadoop2.4.tgz”。

安装包可以通过以下指令获取:

$ tar –zxvf spark-1.3.0-bin-hadoop2.4.tgz –directory /opt/


当安装包文件获取后,你可以 cd 至他的目录下,使用 spark-shell 进行一个简单的试用:

$ cd /opt/spark-1.3.0-bin-hadoop2.4
$ bin/spark-shell 2>/dev/null
Welcome to
____              __
/ __/__  ___ _____/ /__
_\ \/ _ \/ _ `/ __/  '_/
/___/ .__/\_,_/_/ /_/\_\   version 1.3.0
/_/

Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_35)
Type in expressions to have them evaluated.
Type :help for more information.
Spark context available as sc.
SQL context available as sqlContext.

scala> val textFile = sc.textFile("README.md")
textFile: org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[1] at textFile at < console >:21
scala> textFile.count()
res0: Long = 98
scala> textFile.first()
res1: String = # Apache Spark

scala> textFile.filter(line => line.contains("Spark")).count()
res2: Long = 19


为了建立一个高可用的集群,集群至少需要3个物理主机。在这个例子中,我们将其命名为“server1”,“server2” 和 “server3”。

下载和安装需要在集群中的这三个主机下各执行一次。

2.2 Standalone 模式下配置 Spark

当 Spark 安装后(安装路径假设为/opt/spark-1.3.0-bin-hadoop2.4),在部署为高可用的集群之前,还需要进行几部简单的操作。

2.2.1下载和配置 Apache ZooKeeper.

Apache ZooKeeper 是一个管理配置信息和命名的中央集中的服务。它提供分布式的同步和群组的服务,而所有这些服务都将会被分布式的应用所使用。

ZooKeeper下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper

至少需要3个节点才能构成一个高可用的 ZooKeeper 集群。

当安装包被下载到每个主机时,以下指令会自动获取安装文件:

$ tar –zxvf zookeeper-3.4.6.tar.gz –directory /opt/


2.2.2 调整 ZooKeeper配置

$ cd /opt/zookeeper-3.4.6/conf
$ cp zoo_sample.cfg zoo.cfg
$ vi zoo.cfg<strong>
</strong>


加入以下3行代码,并将 hostname 主机名替换为真实的主机地址:

server.1=server1:2888:3888
server.2=server2:2888:3888
server.3=server3:2888:3888


Note:

请记得修改“dataDir”(不可使用/tmp),如“/data/zookeeper”。

接着,在每个 server 创建 myid 文件。在这个例子中,可以针对每个 server 执行以下指令:

Server1: echo "1" > /data/zookeeper/myid
Server2: echo "2" > /data/zookeeper/myid
Server3: echo "3" > /data/zookeeper/myid

Note:

请注意,id 数需要与 zoo.cfg 中的 server.x 配置参数一致。

2.2.3 启动 ZooKeeper服务

以下指令可以在每个由ZooKeeper 配置的主机执行:

1. $ bin/zkServer.sh start

你需要在3个节点都启动 ZooKeeper 服务。使用以下指令查看 ZooKeeper 服务的状态:

1. $ bin/zkServer.sh status

其中的一个节点应该会显示“Mode:leader”,其余的节点显示“Mode: follower”。

2.2.3 在 Standalone模式下配置 Apache Spark

Apache Spark 可以以不同模式运行。当结合 Spark和 SequoiaDB 集群时,我们推荐使用 Spark 的 Standalone 模式。

因为本地数据访问优先于远程数据查找的,推荐将 Apache Spark 安装在所有的 SequoiaDB 数据库集群。

Apache Spark Standalone 模式的部署架构如下图:

Spark 集群中,可能存在多于一个的 Master节点,而其中只有一个会是“Primary”(主要)的,其余的都是“Standby”(预备)模式。ZooKeeper 就被用于跟踪每个 Master 节点,确保时刻都有一个“Primary”节点存在。

<
4000
p>Note:
推荐在每个 SequoiaDB 集群的主机中,运行一个 Worker 节点。

SequoiaDB 和 Apache Spark对接需要相应的驱动,登录 https://oss.sonatype.org,搜索
sequoiadb-driver下载 SequoiaDB 最新的 java 驱动, 搜索 spark-sequoiadb 下载 SequoiaDB 最新的 spark 驱动,注意 scala 版本,然后把他们复制集群中的每个节点 $SPARK_HOME/lib 目录。

Apache Spark 配置文件默认位于conf/spark-env.sh,假设 SequoiaDB 安装在 /opt/sequoiadb,你可以复制一个spark-env.sh.template 后作出以下的配置修改:

SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=server1:2181,server2:2181,server3:2181 -Dspark.deploy.zookeeper.dir=/spark"
SPARK_WORKER_DIR=/data/spark_works
SPARK_LOCAL_DIRS=/data/spark_data1,/data/spark_data2
SPARK_CLASSPATH=${SPARK_HOME/lib/sequoiadb-driver-1.12.jar:$SPARK_HOME/lib/spark-sequoiadb_2.10-1.12.0.jar"


Note:

1) 替换 ${SPARK_HOME为 Spark 的绝对路径。

2) spark.deploy.zookeeper.dir配置的目录必须与其他主机上的配置一致。

下列的配置参数是非必须的,其基于硬件和负载设置。若通过 SequoiaDB Administration Center安装,那么SequoiaDB 将会自动设置这些参数:

SPARK_WORKER_MEMORY

3) 启动 Spark
的 master 节点

如果你想启动 Master 节点,以下指令可在你需要启动 Master 的主机执行:

$ cd /opt/spark-1.3.0-bin-hadoop2.4
$ sbin/start-master.sh


3) 启动 Spark
的 worker 节点

因为我们推荐在每个 SequoiaDB集群的主机下都运行 Worker 节点,你可以运行以下指令来启动每个主机的 Worker 节点:

$ cd /opt/spark-1.3.0-bin-hadoop2.4
$ nohup bin/spark-class org.apache.spark.deploy.worker.Worker spark://serverA:7077,serverB:7077>logs/worker.out &

3.SparkSQL

3.1 开始使用SparkSQL

SparkSQL 是 Spark下处理结构化数据执行的模块,它提供了名为 DataFrames 的程序抽象工具,同时他还能作为分布式的 SQL 查询引擎。

只要 Spark 的安装配置符合要求,通过 SequoiaDB 使用 SparkSQL 也是很简单的。

假设集合名为“test.data”,协调节点在 serverX 和 serverY 上,以下指令可以在 spark-shell 执行,并创建一个临时表来对应 SequoiaDB 的 Collection(集合):

scala>sqlContext.sql("CREATE TEMPORARY TABLE datatable USING com.sequoiadb.spark OPTIONS ( host 'serverX:11810,serverY:11810', collectionspace 'test', collection 'data')")


除了特别定义的表模式,其将会扫描整个表同时根据每条记录的字段信息来构建表的模式。如果集合中的记录非常多,处理速度将会很慢。

另一种构建表的方式是使用 CREATETABLE 指令来构建表模式:

scala>sqlContext.sql("CREATE temporary table datatable ( c1 string, c2 int, c3 int ) using com.sequoiadb.spark OPTIONS ( host 'serverX:11810,serverY:11810', collectionspace 'test', collection 'data')")


Note:

临时表只在它被创建的那一个Session 期间有效,以下 query 查询可被用于获取表中的数据

scala> sqlContext.sql("select * from datatable").foreach(println)

3.2在SparkSQL
使用 JDBC

此处使用的 ThriftJDBC/ODBC 服务器对应着 Hive 0.12 的HiveServer2。你可以用直线脚本在 Hive0.12 或者 Spark 测试 JDBC 服务器。

Spark 的镜像需要在选项-Phive,-Phivethriftserver下配置。否则sbin/start-thriftserver.sh 将会显示以下的错误信息:

failed to launch org.apache.spark.sql.hive.thriftserver.HiveThriftServer2:
You need to build Spark with -Phive and -Phive-thriftserver.

需要启动 JDBC/ODBCserver,请执行以下的 Spark 目录内容:

./sbin/start-thriftserver.sh

此处的脚本接收所有bin/spark-submit 的命令行选项,同时还有 --hiveconf 选项来置顶 Hive 属性。你可以执行 ./sbin/start-thriftserver.sh–help 获取所有可用的选项。服务器默认的监听端口为 localhost:10000 你可以使用以下任意环境变量来重写它:

export HIVE_SERVER2_THRIFT_PORT=<listening-port>
export HIVE_SERVER2_THRIFT_BIND_HOST=<listening-host>
./sbin/start-thriftserver.sh   --master <master-uri>   ...</master-uri></listening-host></listening-port>

或是系统属性:

./sbin/start-thriftserver.sh  --hiveconf hive.server2.thrift.port=<listening-port>   --hiveconf hive.server2.thrift.bind.host=<listening-host>   --master <master-uri>   ...</master-uri></listening-host></listening-port>

现在可使用直线脚本测试 ThriftJDBC/ODBC server:

./bin/beeline


在直线脚本连接 JDBC/ODBCserver in beeline :

beeline> !connect jdbc:hive2://localhost:10000

Beeline 直线脚本会询问用户名和密码。在非安全模式下,简单输入 username和空白密码即可。在安全模式下,请按照 beelinedocumentation 下的说明来执行。

Hive 的配置将hive-site.xml文件移动到 conf/.目录下

你也可以使用 Hive 自带的直线脚本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息