標籤:
本教程記錄 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
spark sql 的metastore 對接 postgresql