初識Postgresql和Sqoop

1 在CentOS 6.4上安裝PostgreSql 9.3

1.1 用yum安裝PostgreSql Server:

CentOS 6.4yum默認安裝的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 瀏覽器

這幾個安裝包分別對應的是: 緩存

  • postgresql93-serverPostgreSql的服務器端;
  • postgresql93PostgreSql的客戶端程序和庫;
  • postgresql93-contrib:一些外部擴展;
  • postgresql93-devel:庫和頭文件,對於通常使用,這個是可選的;可是若是後面須要以編譯源文件的形式安裝一些PostgreSql的擴展(例如Multicorn),它們在編譯過程當中須要這些文件,那麼這個必定要有。

安裝程序會建立postgres用戶和postgres組,爲了安全起見,建議將這個用戶禁止從遠程登陸(具體方法請自行查找)。而後設置postgres用戶的密碼: 安全

sudo passwd postgres 服務器

至此,postgresql9.3安裝過程完成。 網絡

提醒:這個postgres用戶是操做系統的用戶,和後面將會講到的數據庫登陸用戶postgres不是一個東西,千萬不要混淆。 dom

1.2 設置PostgreSql Server:

1.2.1 首先初始化數據庫:

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

設置新數據目錄及其全部內容的ownergrouppostgres

sudo chowm –r postgres /dwdata/data/postgresql

sudo chgrp –r postgres /dwdata/data/postgresql

1.2.2 而後修改PostgreSql Server的啓動配置文件/etc/init.d/postgresql-9.3:

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

這裏面值得改的幾個參數及其含義是:

  • PGPORTPostgreSql Server蹲守的TCP端口,通常用默認值便可;
  • PGDATA:數據文件目錄,對於DW生產來講,要指定到磁盤陣列上;
  • PGLOGPostgreSql Server啓動日誌的位置,是一個全路徑文件名;
  • PGUPLOGPostgreSql升級日誌的位置,也是一個全路徑文件名;

這裏我須要將其中幾個參數修改成新的數據文件目錄:

PGDATA=/dwdata/data/postgresql

PGLOG=/dwdata/data/postgresql/pgstartup.log

PGUPLOG=/dwdata/data/postgresql/pgupgrade.log

PostgreSql就會將數據文件和關鍵的log文件放到建立的數據目錄中。

1.2.3 啓動和中止PostgreSql Server:

上述設置完成後,就能夠用下述命令啓動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

1.2.4 配置PostgreSql Server的網絡參數:

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才能生效。

1.2.5 控制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,咱們但願該子網內(即IP192.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

1.2.6 使用psql命令行界面設置postgres用戶的密碼:

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。能夠從遠程用各類客戶端工具鏈接這臺服務器了。

1.2.7 在客戶端安裝圖形化管理界面並鏈接PostgreSql Server:

目前PostgreSql比較成熟的圖形化管理界面是PgAdmin,具備WindowsMacLinux等多種版本,網站是http://www.pgadmin.org/,支持PostgreSql Server 9.3須要PgAdmin 1.18.0或更高的版本。咱們能夠用本身的筆記本做爲客戶端,安裝管理界面,前提是筆記本與服務器之間的網絡是直接連通的,5432端口可以正常通訊。

下載安裝都是圖形化的。安裝完成並運行,因爲還沒有鏈接過任何服務器,因此Server Groups中是空的。

點擊左上角的「Add a connection to a server」按鈕:

在彈出的對話框中,填入PostgreSql Server的地址和用戶信息:

Name一欄能夠自行填寫易於識別的名字;HostPostgreSql Server的機器名或IP地址;PortServer的端口(默認是5432);Service一欄留空;Maintenance DB留默認的postgres便可;Username填入postgres,這是上面被設定過密碼的數據庫用戶;Password填入上面設定的密碼,並勾選Store password。因爲我是在Windows下安裝PgAdmin來鏈接虛擬機中CentOS中的postgresql,所以須要利用VirtualBox的端口轉發規則:Host是我在Windows下的IP地址(cmd->ipconfig);而後在VirtualBox中設置->網絡->端口轉發->插入新規則,以下圖所示添加端口轉發規則,自定義主機端口,子系統IPCentOSifconfig)中的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的圖形化管理界面,能夠進行任何服務器管理、監控、用戶增刪、數據查詢、存儲過程編寫和運行等各種工做了。

 

2 將文件放到HDFS上並使用Hive查詢:

現有一份一千萬條數據記錄的文件FakeData,須要部署到HDFS上,先建立一個文件夾命名爲FakeDataDirhadoop 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對數據文件進行查詢了,以下圖所示:


 

3 安裝Sqoop1.3.0並將數據從HDFS導入到Postgresql數據庫:

首先須要在postgresql中建立表fakedata;而後在CentOS 6.4上安裝Sqoop

yum install sqoop

而且下載postgresql-9.3-1100.jdbc41.jarhadoop-0.20.2-CDH3B4.tar.gz,放入sqoop所在路徑的lib文件夾下/usr/lib/sqoop/lib。同時須要修改配置文件configure-sqoop,將hbasezookeeper註釋掉檢查:(除非須要使用HBaseHadoop組件)



而且確保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

這樣就可使用pgAdminpostgresql中進行查詢了。

須要注意的是,sqoophadoop可能會出現鏈接失敗,提示: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

注意:因爲是初學者,我在實踐過程當中在分隔符上栽了大跟頭,仍是要注意這些命令的細節!這篇文檔也不徹底是本身完成的,固然要感謝提供我材料和解決方案的技術人員!!!

相關文章
相關標籤/搜索