• 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和设置变量之类)

    hive 0.13 的sql 脚本测试通过

    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

  • 相关阅读:
    Linux中无法使用ifconfig命令
    Linux中运行程序的一些方法介绍
    python中一些函数的使用介绍
    pytorch中DataSet和DataLoader的使用详解
    gensim中有关word2vec的一些使用
    pytorch中比较两个tensor是否相等
    pytorch中的数据类型之间的转换
    pytorch中有关gpu的操作
    pytorch中保存模型
    Vscode配合远程服务器进行python项目开发
  • 原文地址:https://www.cnblogs.com/chenfool/p/4530956.html
Copyright © 2020-2023  润新知