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 2>&1 &

7 为 postgresql 创建一个名为“foo” 的database

bin/createdb -p 5432 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和设置变量之类)

\i /opt/hive/scripts/metastore/upgrade/postgres/hive-schema-1.2.0.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-1103.jdbc41.jar  /opt/spark-1.3.1-bin-hadoop2.6/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-1103.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.1-bin-hadoop2.6/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

时间: 2024-07-31 13:10:53

spark sql 的metastore 对接 postgresql的相关文章

spark sql metastore 配置 mysql

本文主要介绍如何为 spark sql 的 metastore 配置成 mysql . spark 的版本 2.4.0 版本 hive script 版本为 hive 1.2.2 mysql 为 5.7.18 mysql 的安装部署就不在这里介绍了. 首先为 mysql 的root 用户设置密码 mysql -uroot > set password= password('mysql'); 设置mysql 允许其他机器登录 > GRANT ALL PRIVILEGES ON *.* TO 'r

Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN

Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession 创建 DataFrames 无类型的Dataset操作 (aka DataFrame 操作) Running SQL Queries Programmatically 全局临时视图 创建Datasets RDD的互操作性 使用反射推断Schema 以编程的方式指定Schema Aggregatio

Spark 官方文档(5)——Spark SQL,DataFrames和Datasets 指南

Spark版本:1.6.2 概览 Spark SQL用于处理结构化数据,与Spark RDD API不同,它提供更多关于数据结构信息和计算任务运行信息的接口,Spark SQL内部使用这些额外的信息完成特殊优化.可以通过SQL.DataFrames API.Datasets API与Spark SQL进行交互,无论使用何种方式,SparkSQL使用统一的执行引擎记性处理.用户可以根据自己喜好,在不同API中选择合适的进行处理.本章中所有用例均可以在spark-shell.pyspark shel

spark sql 查询hive表并写入到PG中

import java.sql.DriverManager import java.util.Properties import com.zhaopin.tools.{DateUtils, TextUtils} import org.apache.log4j.{Level, Logger} import org.apache.spark.sql.SparkSession /** * Created by xiaoyan on 2018/5/21. */ object IhrDownloadPg

Spark SQL数据源

SparkSQL数据源:从各种数据源创建DataFrame 因为 spark sql,dataframe,datasets 都是共用 spark sql 这个库的,三者共享同样的代码优化,生成以及执行流程,所以 sql,dataframe,datasets 的入口都是 sqlContext. 可用于创建 spark dataframe 的数据源有很多: SparkSQL数据源:RDD val sqlContext = new org.apache.spark.sql.SQLContext(sc)

Spark SQL中的broadcast join分析

在Spark-1.6.2中,执行相同join查询语句,broadcast join模式下,DAG和执行时间如下图所示: 1.broadcast join (1)DAG (2)执行时间 122 rows selected (22.709 seconds) 2.非broadcast join (1)DAG (2)执行时间 122 rows selected (55.512 seconds) 对于broadcast join模式,会将小于spark.sql.autoBroadcastJoinThres

spark结构化数据处理:Spark SQL、DataFrame和Dataset

本文讲解Spark的结构化数据处理,主要包括:Spark SQL.DataFrame.Dataset以及Spark SQL服务等相关内容.本文主要讲解Spark 1.6.x的结构化数据处理相关东东,但因Spark发展迅速(本文的写作时值Spark 1.6.2发布之际,并且Spark 2.0的预览版本也已发布许久),因此请随时关注Spark SQL官方文档以了解最新信息. 文中使用Scala对Spark SQL进行讲解,并且代码大多都能在spark-shell中运行,关于这点请知晓. 概述 相比于

第57课:Spark SQL on Hive配置及实战

1,首先需要安装hive,参考http://lqding.blog.51cto.com/9123978/1750967 2,在spark的配置目录下添加配置文件,让Spark可以访问hive的metastore. [email protected]:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf# vi hive-site.xml <configuration> <property>   <name>hive.metast

Spark SQL笔记——技术点汇总

目录 · 概述 · 原理 · 组成 · 执行流程 · 性能 · API · 应用程序模板 · 通用读写方法 · RDD转为DataFrame · Parquet文件数据源 · JSON文件数据源 · Hive数据源 · 数据库JDBC数据源 · DataFrame Operation · 性能调优 · 缓存数据 · 参数调优 · 案例 · 数据准备 · 查询部门职工数 · 查询各部门职工工资总数,并排序 · 查询各部门职工考勤信息 概述 1. Spark SQL是Spark的结构化数据处理模块.