SequoiaSQL 和 Spark 的安装配置放在在这里不赘述。
Thrift server 最好是配合 Hive 元数据库使用。所以这里讲一下如何配置,并启动 Thrift server ,最后可以用 beeline 命令行比较方便清爽的使用 Spark SQL 。下面是配置步骤。
1. Postgresql JDBC 驱动
下载 Postgresql jdbc驱动: https://jdbc.postgresql.org/download.html
注意驱动版本不仅跟Postgresql版本相关,还跟 jdk 版本相关。
下载之后,上传postgresql jdbc驱动包到spark集群所有服务器的某一个目录下:
例如,上传 postgresql-9.3-1104.jdbc41.jar 到目录 /opt/spark-2.1.1-bin-hadoop2.7/jars/
2. 配置spark-defaults.conf 或者 spark-env.sh
conf/spark-defaults.conf :
spark.executor.extraClassPath /opt/spark-2.1.1-bin-hadoop2.7/jars/sequoiadb.jar:/opt/spark-2.1.1-bin-hadoop2.7/jars/spark-sequoiadb_2.11-2.6.0.jar:/opt/spark-2.1.1-bin-hadoop2.7/jars/postgresql-9.3-1104.jdbc41.jar
或者 conf/spark-env.sh :
SPARK_CLASSPATH=/opt/spark-2.1.1-bin-hadoop2.7/jars/sequoiadb.jar:/opt/spark-2.1.1-bin-hadoop2.7/jars/spark-sequoiadb_2.11-2.6.0.jar:/opt/spark-2.1.1-bin-hadoop2.7/jars/postgresql-9.3-1104.jdbc41.jar
3. 下载并上传hive metastore建表脚本:
下载hive的源代码包:
http://mirror.bit.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-src.tar.gz
关于下载的hive版本,需要注意 spark 里边对应的 hive 版本。 Spark 2.1.1 的 hive 版本是 1.2.1 。不过, Hive 1.2.2 也一样可以用。
解压apache-hive-1.2.2-src.tar.gz之后,找到目录 metastore\scripts\upgrade\postgres\ 下边的两个SQL脚本:
hive-schema-1.2.0.postgres.sql
hive-txn-schema-0.13.0.postgres.sql
上传 这两个sql脚本 到服务器上某个目录下,待用。
4. 创建SequoiaSQL数据库和用户
首先创建数据库和用户:
./bin/psql -p 5432 foo
postgres=# CREATE DATABASE metastore TEMPLATE=template0 ENCODING='UTF8';
postgres=# CREATE USER hiveuser WITH PASSWORD 'mypassword';
postgres=# CREATE DATABASE metastore;
postgres=# \c metastore;
You are now connected to database 'metastore'.
然后执行 hive 里的sql 脚本。这个脚本会创建Hive存储元数据需要的库表。
postgres=# \i hive-schema-1.2.0.postgres.sql
然后授权。运行下面这个SQL语句可以生成授权语句:
postgres=# SELECT 'GRANT SELECT,INSERT,UPDATE,DELETE ON "' || schemaname || '"."' || tablename || '" TO hiveuser ;' FROM pg_tables WHERE tableowner = CURRENT_USER and schemaname = 'public';
把上一步生成的授权语句都运行一遍。(hive-schema-1.2.0.postgres.sql脚本应该创建了54个表)
然后,为了方便起见,把所有权限授权给hiveuser:
GRANT ALL ON DATABASE hive_metastore to hiveuser;
5. 配置 Hive 的数据库连接配置文件 hive-site.xml
在Spark目录下新建配置文件 conf/hive-site,编写内容如下 :
hive.metastore.schema.verification
false
javax.jdo.option.ConnectionURL
jdbc:postgresql://IP或者主机名:5432或者端口号/数据库名
JDBC connect string for a JDBC metastore
javax.jdo.option.ConnectionDriverName
org.postgresql.Driver
Driver class name for a JDBC metastore
javax.jdo.option.ConnectionUserName
用户名
javax.jdo.option.ConnectionPassword
密码
datanucleus.autoCreateSchema
false
creates necessary schema on a startup if one doesn't exist. set this to false, after creating it once
几个配置项说明:
javax.jdo.option.ConnectionURL 填写postgresql 的服务地址、端口号和database
javax.jdo.option.ConnectionUserName 填写postgresql 用户名
javax.jdo.option.ConnectionPassword 填写用户密码
6. 重新启动spark , 并启动 thriftserver
启动 Spark : sbin/start-all.sh
启动 thrift server : sbin/start-thriftserver.sh --master spark://10.131.9.62:7077 --total-executor-cores 12 --executor-memory 1g
用jps命令可以看到 thrift server 启动之后才出现的 spark-submit 和 CoarseGrainedExecutorBackend 。 例如:
[sdbadmin@pop-s-invquery-a ~]$ jps
2252 BeeLine
1336 Worker
717 Master
1630 CoarseGrainedExecutorBackend
3588 Jps
1634 CoarseGrainedExecutorBackend
903 Worker
1194 Worker
1650 CoarseGrainedExecutorBackend
1633 CoarseGrainedExecutorBackend
1484 SparkSubmit
1047 Worker
7. 进入PG 查看thriftserver是否已经连接到spark
select * from pg_stat_activity where datname='hive_metastore';
输出示例:
hive_metastore=# select * from pg_stat_activity where datname='hive_metastore';
datid | datname | pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | xact_s
tart | query_start | state_change | waiting | state | query
-------+----------------+------+----------+----------+------------------+-------------+-----------------+-------------+-------------------------------+----------------
---------------+-------------------------------+-------------------------------+---------+--------+----------------------------------------------------------------
27070 | hive_metastore | 3171 | 25592 | hiveuser | | 10.131.9.63 | | 42538 | 2017-06-30 18:31:34.694261+08 |
| 2017-06-30 18:31:34.699031+08 | 2017-06-30 18:31:34.699086+08 | f | idle | SET extra_float_digits = 3
27070 | hive_metastore | 3172 | 25592 | hiveuser | | 10.131.9.63 | | 42539 | 2017-06-30 18:31:34.700751+08 |
| 2017-06-30 18:31:34.704812+08 | 2017-06-30 18:31:34.704852+08 | f | idle | SET extra_float_digits = 3
27070 | hive_metastore | 3173 | 25592 | hiveuser | | 10.131.9.63 | | 42540 | 2017-06-30 18:31:35.111469+08 |
| 2017-06-30 18:31:35.1159+08 | 2017-06-30 18:31:35.115951+08 | f | idle | SET extra_float_digits = 3
27070 | hive_metastore | 3174 | 25592 | hiveuser | | 10.131.9.63 | | 42541 | 2017-06-30 18:31:35.11745+08 |
| 2017-06-30 18:31:35.121512+08 | 2017-06-30 18:31:35.121552+08 | f | idle | SET extra_float_digits = 3
27070 | hive_metastore | 3461 | 25592 | hiveuser | | 10.131.9.62 | | 37933 | 2017-06-30 18:49:13.029259+08 |
| 2017-06-30 18:49:13.033074+08 | 2017-06-30 18:49:13.033113+08 | f | idle | SET extra_float_digits = 3
27070 | hive_metastore | 3462 | 25592 | hiveuser | | 10.131.9.62 | | 37934 | 2017-06-30 18:49:13.0348+08 |
| 2017-06-30 18:49:13.038215+08 | 2017-06-30 18:49:13.038248+08 | f | idle | SET extra_float_digits = 3
27070 | hive_metastore | 3489 | 25592 | hiveuser | | 10.131.9.62 | | 37935 | 2017-06-30 18:50:42.775977+08 |
| 2017-06-30 18:50:42.77983+08 | 2017-06-30 18:50:42.779869+08 | f | idle | SET extra_float_digits = 3
27070 | hive_metastore | 3490 | 25592 | hiveuser | | 10.131.9.62 | | 37936 | 2017-06-30 18:50:42.781191+08 |
| 2017-06-30 18:50:42.784706+08 | 2017-06-30 18:50:42.784739+08 | f | idle | SET extra_float_digits = 3
27070 | hive_metastore | 3636 | 10 | sdbadmin | psql | | | -1 | 2017-06-30 18:52:03.679178+08 | 2017-06-30 18:5
2:09.564151+08 | 2017-06-30 18:52:09.564151+08 | 2017-06-30 18:52:09.564158+08 | f | active | select * from pg_stat_activity where datname='hive_metastore';
(9 rows)
8. 使用 beeline
/opt/spark-2.1.1-bin-hadoop2.7/bin/beeline -u jdbc:hive2://10.131.9.62:10000 -n hiveuser -p hiveuser
beeline 命令小提示:
连接数据库: !connect
退出: !quit