CentOS 6.4用yum默認安裝的PostgreSql版本是8.x,比目前最新的9.3差了一代,須要更新yum repository以後,才能用yum安裝。用yum安裝的好處是方便、模塊化,並且之後比較好卸載。 php
首先到http://yum.postgresql.org/repopackages.php找到對應操做系統的合適的yum repository版本,我使用的服務器環境是CentOS 6.4 x86_64,找到該版本對用的rpm url後,用rpm安裝yum repository: sql
sudo rpm –i http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm 數據庫
而後就能夠經過yum安裝PostgreSql 9.3了: centos
sudo yum install postgresql93-server postgresql93 postgresql93-contrib postgresql93-devel 瀏覽器
這幾個安裝包分別對應的是: 緩存
安裝程序會建立postgres用戶和postgres組,爲了安全起見,建議將這個用戶禁止從遠程登陸(具體方法請自行查找)。而後設置postgres用戶的密碼: 安全
sudo passwd postgres 服務器
至此,postgresql9.3安裝過程完成。 網絡
提醒:這個postgres用戶是操做系統的用戶,和後面將會講到的數據庫登陸用戶postgres不是一個東西,千萬不要混淆。 dom
sudo service postgresql-9.3 initdb
對於使用yum安裝的PostgreSql Server,默認配置是服務器會將數據庫的數據文件放在/var/lib/pgsql/9.3/data目錄下,初始化數據庫後,這個目錄下保存有最基本的數據和配置文件;一般這個目錄都是在磁盤的系統分區中,若是服務器有可靠性更高、速度更快的存儲空間(例如磁盤陣列),最好把數據文件目錄移到那裏,移動的方法是:假設有一個磁盤陣列已經掛載在了/dwdata下,咱們想將數據文件放在/dwdata/data/postgresql/目錄下,則咱們須要作以下移動:
sudo mkdir –p /dwdata/data
sudo cp –r /var/lib/pgsql/9.3/data/ /dwdata/data
sudo mv /dwdata/data/data /dwdata/data/postgresql
設置新數據目錄及其全部內容的owner和group爲postgres:
sudo chowm –r postgres /dwdata/data/postgresql
sudo chgrp –r postgres /dwdata/data/postgresql
Sudo vi /etc/init.d/postgresql-9.3
找到以下字樣的行:
# Set defaults for configuration variables
PGENGINE=/usr/pgsql-9.3/bin
PGPORT=5432
PGDATA=/var/lib/pgsql/9.3/data
PGLOG=/var/lib/pgsql/9.3/pgstartup.log
# Log file for pg_upgrade
PGUPLOG=/var/lib/pgsql/$PGMAJORVERSION/pgupgrade.log
這裏面值得改的幾個參數及其含義是:
這裏我須要將其中幾個參數修改成新的數據文件目錄:
PGDATA=/dwdata/data/postgresql
PGLOG=/dwdata/data/postgresql/pgstartup.log
PGUPLOG=/dwdata/data/postgresql/pgupgrade.log
PostgreSql就會將數據文件和關鍵的log文件放到建立的數據目錄中。
上述設置完成後,就能夠用下述命令啓動PostgreSql Server了:
sudo service postgresql-9.3 start
下述命令中止PostgreSql Server:
sudo service postgresql-9.3 stop
下述命令檢查PostgreSql Server的運行狀態:
sudo service postgresql-9.3 status
下述命令從新啓動PostgreSql Server:
sudo service postgresql-9.3 restart
PostgreSql Server的配置文件在數據文件目錄中(在這裏即爲/dwdata/data/postgresql目錄)。最主要的配置文件是postgresql.conf,裏面有關於網絡、性能、緩存大小等各種設置,對於具有多塊網卡的服務器來講,最主要的設置是服務器監聽的地址,在配置文件中能夠找到以下條目:
#listen_addresses = ‘localhost’ # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to ‘localhost’; use ‘*’ for all
# (change requires restart)
通常狀況況下,要求PostgreSql Server在全部網卡上均監聽,能夠將此條目前的「#」註釋符去掉,並改成:
listen_addresses=’*’便可監聽來自全部網卡的請求。若是須要監聽特定的網卡,則能夠用網卡的IP地址替換「*」字符。
如需修改監聽的端口,則能夠找到#port=5432這一條目,去掉「#」註釋符並按須要修改之。對於不直接暴露在公網上的服務器,不須要修改這個端口。
上述配置修改後,須要從新啓動PostgreSql Server才能生效。
爲了保證安全,PostgreSql Server在安裝後,僅容許來自服務器本機的鏈接,若是須要對PostgreSql Server進行網絡訪問(好比用另外一臺服務器訪問,或者用圖形化的管理工具從遠程管理服務器),就須要對訪問權限進行設置。
控制網絡訪問權限的配置文件是pg_hba.conf,在文件末尾會有以下條目:
# TYPE DATABASE USER ADDRESS METHOD
# 「local」 is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
……
爲了打開PostgreSql Server的外部訪問,須要向文件末尾添加內容。例如:假如咱們安裝PostgreSql Server的服務器IP地址是192.168.66.23,咱們但願該子網內(即IP爲192.168.66.*)全部計算機都能鏈接這臺PostgreSql Server,而且都須要用戶名/密碼登陸,則能夠添加以下行:
host all all 192.168.66.1/24 md5
這個例子中,「192.168.66.1/24」表示容許全部IP爲「192.168.66.*」的計算機對服務器進行訪問,「24」即IP的掩碼有24個二進制的「1」,就是子網掩碼的概念;例如,若是咱們但願全部IP爲「192.168.*.*」的計算機對服務器進行訪問,則能夠寫爲「192.168.1.1/16」。
第一個all表示容許訪問全部數據庫,第二個all表示容許全部用戶名的用戶登陸;這兩個域的設置能夠參閱該文件前面長長的說明內容,本文再也不贅述。
最後的md5表示用加密後的密碼進行用戶名/密碼匹配的認證,這裏的「用戶名」是指數據庫的用戶,而不是操做系統的用戶。經常使用的幾種其餘認證方式有ident(與操做系統的用戶名作映射,採用操做系統的認證,數據庫用戶與操做系統用戶之間的映射在pg_ident.conf文件中配置)、password(在網絡傳送明文密碼認證,不安全)、trust(徹底信任)、peer(取客戶端操做系統的用戶名,通常僅用來作本地鏈接)。
一般,採用數據庫用戶的用戶名和密碼進行認證,即md5。
PostgreSql Server安裝後,數據庫中會有一個默認的用戶叫postgres(注意這裏是數據庫登錄用戶postgres,不是上面提到的操做系統用戶postgres),具有管理員級別的權限。若是咱們想經過圖形化的管理界面登陸到PostgreSql Server上對服務器進行管理,就須要先設置這個用戶的密碼,首先要切換到操做系統的postgres用戶,該用戶具備使用psql進行數據庫管理的權限:
su postgres
而後執行psql,進入PostgreSql Server的命令行界面,提示符是「postgres=#」,這時咱們就能夠鍵入PostgreSql的命令了,例如用來修改用戶密碼的ALTER USER命令,咱們將數據庫用戶postgres的密碼修改成abcdefg:
psql
postgres=#ALTER USER postgres with password ‘abcdefg‘;
ALTER ROLE
postgres=#\q
exit
上面一段命令中,粗體藍色表示咱們要鍵入的操做系統命令,灰色表示psql的提示與輸出,藍色表示咱們要鍵入的PostgreSql命令。psql界面用\q命令退出。
因而PostgreSql Server具有了一個超級用戶postgres,其密碼是abcdefg。能夠從遠程用各類客戶端工具鏈接這臺服務器了。
目前PostgreSql比較成熟的圖形化管理界面是PgAdmin,具備Windows、Mac、Linux等多種版本,網站是http://www.pgadmin.org/,支持PostgreSql Server 9.3須要PgAdmin 1.18.0或更高的版本。咱們能夠用本身的筆記本做爲客戶端,安裝管理界面,前提是筆記本與服務器之間的網絡是直接連通的,5432端口可以正常通訊。
下載安裝都是圖形化的。安裝完成並運行,因爲還沒有鏈接過任何服務器,因此Server Groups中是空的。
點擊左上角的「Add a connection to a server」按鈕:
在彈出的對話框中,填入PostgreSql Server的地址和用戶信息:
Name一欄能夠自行填寫易於識別的名字;Host是PostgreSql Server的機器名或IP地址;Port是Server的端口(默認是5432);Service一欄留空;Maintenance DB留默認的postgres便可;Username填入postgres,這是上面被設定過密碼的數據庫用戶;Password填入上面設定的密碼,並勾選Store password。因爲我是在Windows下安裝PgAdmin來鏈接虛擬機中CentOS中的postgresql,所以須要利用VirtualBox的端口轉發規則:Host是我在Windows下的IP地址(cmd->ipconfig);而後在VirtualBox中設置->網絡->端口轉發->插入新規則,以下圖所示添加端口轉發規則,自定義主機端口,子系統IP是CentOS(ifconfig)中的IP地址,子系統端口是postgresql server端口,默認是5432。
完成後點擊OK按鈕,便可看到Server Groups列表中多了一臺服務器,點擊它,便可一級一級的展開各類數據庫對象:
在使用pgAdmin鏈接postgresql數據庫的過程當中,老是出現「端口監聽未開啓」等的問題鏈接不上,通過各類排錯,我把CentIOS中的防火牆關閉,而且關閉了SELinux功能,同時修改了postgresql的配置文件pg-hba.conf,添加host all all 10.0.2.2/24 md5,這樣才最後成功鏈接。
至此,在CentOSPostgreSql 6上安裝PostgreSql 9.3的過程就成功完成了,並且也具備了可以管理該PostgreSql Server的圖形化管理界面,能夠進行任何服務器管理、監控、用戶增刪、數據查詢、存儲過程編寫和運行等各種工做了。
現有一份一千萬條數據記錄的文件FakeData,須要部署到HDFS上,先建立一個文件夾命名爲FakeDataDir:hadoop dfs –mkdir FakeDataDir
而後使用命令將文件放到HDFS上:hadoop dfs –put FakeData FakeDataDir,
使用命令查看HDFS下的文件:hadoop dfs –ls
進入hive的所在路徑,個人是/usr/local/hive/hive-0.12.0/bin,輸入如下命令:
./hive
建立外部表:
create external table if not exists fakedata(JULIAN_DATE string, PLATFORM string,…, LOG_ID double) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’ location ‘/user/root/FakeDataDir’
注意因爲LOG_ID字段是一個20位整隨機數,因此使用double類型。
因爲數據文件是由逗號分隔,因此TERMINATED BY ‘,’
最後定位數據文件所在位置,被放在HDFS路徑/user/root/FakeDataDir下,注意location只要寫文件所在目錄便可。
這樣就能夠經過hive對數據文件進行查詢了,以下圖所示:
首先須要在postgresql中建立表fakedata;而後在CentOS 6.4上安裝Sqoop:
yum install sqoop
而且下載postgresql-9.3-1100.jdbc41.jar和hadoop-0.20.2-CDH3B4.tar.gz,放入sqoop所在路徑的lib文件夾下/usr/lib/sqoop/lib。同時須要修改配置文件configure-sqoop,將hbase和zookeeper註釋掉檢查:(除非須要使用HBase等Hadoop組件)
而且確保sqoop所需的HADOOP_HOME正確指向hadoop安裝目錄,執行echo $HADOOP_HOME查看HADOOP_HOME是否正確配置。
而後使用命令將以前部署在HDFS上的數據文件導入postgresql:
./sqoop export --connect jdbc:postgresql://localhost:5432/postgres --username postgres --password 123456 --table fakedata--fields-terminated-by ',' --export-dir /user/root/FakeDataDir
這樣就可使用pgAdmin在postgresql中進行查詢了。
須要注意的是,sqoop與hadoop可能會出現鏈接失敗,提示:ident authenation failed for user postgres,這時須要修改postgresql的配置文件pg_hba,conf,修改postgresql的認證方式爲trust:
local all all trust
host all all 127.0.0.1/32 trust
這樣終於可以將postgresql鏈接到hadoop。
而後我對fakedata文件中的數據進行計算,並須要把計算結果導出到postgresql數據庫中,按照以下步驟進行:
一、經過pgAdmin在postgresql中建立表,建表的字段和數據類型要符合計算結果的字段和數據類型。
二、而後在hive中建立相應的表做爲存儲計算結果的臨時表。在瀏覽器輸入localhost:50070,browse the filesystem,hive內部表默認位置在hive安裝路徑conf下的hive-site.xml中規定,設置爲/user/hive/warehouse。輸入下面命令建表:
create table success(pv bigint, uv bigint) row format delimited fields terminated by ‘,’;(不設置行分隔符默認爲\001,是8進制的ASCII碼序始字符SOH,start of header)
show tables;
desc success;
insert into success select sum(pv), count(distinct uv) from testdata group by julian_date;
三、而後經過sqoop將hive的表中的數據導出到postgresql數據庫中:
./sqoop export –connect jdbc:postgresql://localhost:5432/postgres –username postgres –password 123456 –table testdata –fields-terminated-by ‘,’ –export-dir /user/hive/warehouse/success
注意:因爲是初學者,我在實踐過程當中在分隔符上栽了大跟頭,仍是要注意這些命令的細節!這篇文檔也不徹底是本身完成的,固然要感謝提供我材料和解決方案的技術人員!!!