spark sql 的metastore 对接 postgresql
本教程记录 spark 1.3.1 版本的thriftserver 的metastore 对接 postgresql
postgresql 的编译,参考:http://www.cnblogs.com/chenfool/p/4530925.html
一 启动postgresql 服务
1 首先需要将postgresql 的lib 加载到 LD_LIBRARY_PATH 环境变量中
export LD_LIBRARY_PATH=/opt/sequoiadb/lib:${LD_LIBRARY_PATH}
我这里直接将命令加到了 ~/.bash_profile 配置文件中,用户每次登陆,都能自动加载这个环境变量
2 创建数据目录
mkdir -p database/pg_data
3 初始化pg 的数据目录
bin/initdb -D database/pg_data/
4 创建pg 的logs 目录
mkdir -p database/pg_data/logs
5 修改postgresql 的配置,允许其他用户 远程登陆 postgresql
linenum=$(cat -n database/pg_data/pg_hba.conf | grep "# IPv4 local connections:" | awk '{print $1}'); \
let "linenum=linenum+1";varStr="host all all 0.0.0.0/0 trust"; \
sed -i "${linenum} a${varStr}" database/pg_data/pg_hba.conf;
sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '0.0.0.0'/g" database/pg_data/postgresql.conf
6 启动 postgresql 服务,启动时,使用的是 sdbadmin 用户
bin/postgres -D database/pg_data/ >> database/pg_data/logs/logfile >& &
7 为 postgresql 创建一个名为“foo” 的database
bin/createdb -p foo
8 登录pg shell 后,修改sdbadmin 用户的密码
登录pg shell
bin/psql foo
在shell 中执行下面命令,将sdbadmin 用户的密码修改为 sdbadmin
alter user sdbadmin with password 'sdbadmin';
可以在root 用户下,执行命令来测试
/opt/sequoiadb/bin/psql --username=sdbadmin -W foo
输入sdbadmin 密码后,就能正常登录 pg shell
继续在pg shell 中执行命令,创建名为 metastore 的 database
CREATE DATABASE metastore ;
将database 切换到metastore
\c metastore
执行 hive 里的sql 脚本,由于我这里的hive 版本为 1.2.0 ,所以执行的hive 脚本也是1.2.0(注意:这里用户在登陆pg shell 时,需要先切换到 ${HIVE_HOME}/scripts/metastore/upgrade/postgres/ 目录下,否则会出错)
但是我看到spark 官网上说,spark sql 1.3.1 目前是对接 hive 0.12 0.13 版本的,所以我们可能对接那个版本的脚本会更好(这个命令其实就是给postgresql 预先创建一些未来要用到的table和设置变量之类)
hive 0.13 的sql 脚本测试通过
\i /opt/hive/scripts/metastore/upgrade/postgres/hive-schema-1.2..postgres.sql
二 spark thriftserver 对接 postgresql
1 参考之前我写的hive 对接mysql 作为metastore 的教程:http://www.cnblogs.com/chenfool/p/3574789.html
我们直接在 spark 的 conf 目录下创建一个名为 hive-site.xml 空文件,然后将需要配置的信息写到hive-site.xml 文件中
<configuration>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:postgresql://ubuntu2:5432/metastore</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.postgresql.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>sdbadmin</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>sdbadmin</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>false</value>
<description>creates necessary schema on a startup if one doesn't exist. set this to false, after creating it once</description>
</property>
</configuration>
javax.jdo.option.ConnectionURL 填写postgresql 的服务地址、端口号和database
javax.jdo.option.ConnectionUserName 填写postgresql 用户名
javax.jdo.option.ConnectionPassword 填写用户密码
2 下载 postgresql 的 jdbc 驱动
下载链接 https://jdbc.postgresql.org/download/postgresql-9.3-1103.jdbc41.jar
3 将jar 包放到 spark 的lib 下,并且修改spark-env.sh 文件
mv postgresql-9.3-.jdbc41.jar /opt/spark-1.3.-bin-hadoop2./lib/
修改spark-env.sh 文件,由于我之前对接过 SequoiaDB 与 Spark sql 的连接,所以spark_classpath 里有sequoiadb 相关的jar 包
SPARK_CLASSPATH="/opt/sequoiadb/java/sequoiadb.jar:/opt/sequoiadb/spark/spark-sequoiadb_2.10-1.12.jar:/opt/sequoiadb/hadoop/hadoop-connector-2.2.jar:/opt/spark-1.3.1-bin-hadoop2.6/lib/postgresql-9.3-1103.jdbc41.jar"
4 设置CLASSPATH,添加 postgresql jdbc 驱动路径
export CLASSPATH=/opt/postgresql-9.3-.jdbc4.jar:${CLASSPATH}
如果不设置,会在启动thriftserver 时,报下面的错误
Attempt to invoke the "dbcp-builtin" plugin to create a ConnectionPool gave an error : The specified datastore driver ("org.postgresql.Driver") was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.
5 启动spark thriftserver 服务
/opt/spark-1.3.-bin-hadoop2./sbin/start-thriftserver.sh --master spark://ubuntu1:7800 --hiveconf "hive.metastore.warehouse.dir=hdfs://ubuntu1:9000/user/hive/warehouse"
通过netstat 命令应该能看到10000 端口被启动
而且在 logs/spark-root-org.apache.spark.sql.hive.thriftserver.HiveThriftServer2-1-ubuntu2.out 能看到
INFO ThriftCLIService: ThriftBinaryCLIService listening on 0.0.0.0/0.0.0.0:10000 证明启动成功了
怎么操作thriftserver ,可以参考我以前的博客:
http://www.cnblogs.com/chenfool/p/4502212.html
参考文章:
http://www.cloudera.com/content/cloudera/en/documentation/cdh4/v4-2-0/CDH4-Installation-Guide/cdh4ig_topic_18_4.html
http://docs.hortonworks.com/HDPDocuments/Ambari-1.6.1.0/bk_ambari_reference/content/nndb-using-hive-postresql.html
http://www.sequoiadb.com/cn/index.php?p=whitepaper_7
spark sql 的metastore 对接 postgresql的更多相关文章
- spark sql metastore 配置 mysql
本文主要介绍如何为 spark sql 的 metastore 配置成 mysql . spark 的版本 2.4.0 版本 hive script 版本为 hive 1.2.2 mysql 为 5. ...
- Spark 官方文档(5)——Spark SQL,DataFrames和Datasets 指南
Spark版本:1.6.2 概览 Spark SQL用于处理结构化数据,与Spark RDD API不同,它提供更多关于数据结构信息和计算任务运行信息的接口,Spark SQL内部使用这些额外的信息完 ...
- Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN
Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession ...
- Spark官方1 ---------Spark SQL和DataFrame指南(1.5.0)
概述 Spark SQL是用于结构化数据处理的Spark模块.它提供了一个称为DataFrames的编程抽象,也可以作为分布式SQL查询引擎. Spark SQL也可用于从现有的Hive安装中读取数据 ...
- Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets
Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession ...
- spark SQL (五)数据源 Data Source----json hive jdbc等数据的的读取与加载
1,JSON数据集 Spark SQL可以自动推断JSON数据集的模式,并将其作为一个Dataset[Row].这个转换可以SparkSession.read.json()在一个Dataset[Str ...
- spark sql 对接 HDFS
上一篇博客我向大家介绍了如何快速地搭建spark run on standalone,下面我将介绍saprk sql 如何对接 hdfs 我们知道,在spark shell 中操作hdfs 上的数据是 ...
- Spark SQL访问PostgreSQL
随着Spark SQL的正式发布,以及它对DataFrame的支持,它可能会取代HIVE成为越来越重要的针对结构型数据进行分析的平台.在博客文章What’s new for Spark SQL in ...
- Spark SQL 之 Data Sources
#Spark SQL 之 Data Sources 转载请注明出处:http://www.cnblogs.com/BYRans/ 数据源(Data Source) Spark SQL的DataFram ...
随机推荐
- 九度OJ 1084:整数拆分 (递归)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2274 解决:914 题目描述: 一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1 ...
- Cocos2d-JS 项目接入 触控广告平台(基于anysdk2.0.2)
本文以Cocos2d-JS项目作为示例,讲解如何集成AnySDK-JS. 一.如何创建项目我就省略了,直接进入主题. 1.1 首先,我需要下载anysdk框架包,下载地址:http://www.any ...
- react面试宝典
调用 setState 之后发生了什么? 在代码中调用setState函数之后,React 会将传入的参数对象与组件当前的状态合并,然后触发所谓的调和过程(Reconciliation).经过调和过程 ...
- BZOJ2759: 一个动态树好题
BZOJ2759: 一个动态树好题 Description 有N个未知数x[1..n]和N个等式组成的同余方程组:x[i]=k[i]*x[p[i]]+b[i] mod 10007其中,k[i],b[i ...
- sample code java pom.xml
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- ICE学习笔记 -- RFC 5245
RFC 5245 ICE 1, offer/answer model 2, ICE Step: 1) 产生候选地址(1.公网 2.NAT反射 3.Relay转发地址) Generate ca ...
- Android系统shell中的clear命令实现【转】
本文转载自:http://blog.csdn.net/morixinguan/article/details/73467845 之前一直不太清楚,当我们在shell命令行输入很多命令,会在屏幕上输出一 ...
- python不同目录下的调用
转自http://blog.csdn.net/hansel/article/details/8975663 Python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件 ...
- 使用ffmpeg添加logo
1 网上搜出的一些ffmpeg添加logo的命令都不成功,调查了官方手册后以下这种用法成功: ffmpeg -y -i input.mp4 -vf "movie=logo.png [logo ...
- 【转载】Myeclipse中实现js的提示
近期需要大量使用JS来开发,但是MyEclipse2014自带的JS编辑器没有代码提示的功能,开发效率有点低,所以安装了一个Spket的插件,过程非常简单,SVN插件的安装比这个更简单. Spket插 ...