Sqoop(1)
Hadoop平臺的一個強大的地方是它處理不同格式資料的能力。HDFS能夠穩定的儲存日誌和
其它很多種來源的資料,並且Mapreduce程式可以處理各種各樣的資料格式,然後抽取相關的資料並且組合各種各樣的資料成為一個有用的結果。
但是,和HDFS之外的儲存倉庫互動資料的時候,Mapreduce程式需要使用外部的API來得到這些資料。通常,有價值的資料儲存在RDBMS中。Sqoop是一個允許使用者從其它RDBMS中抽取資料到Hadoop中,以便進一步分析處理。對資料的分析處理,可以使用Mapreduce程式或者其它更高階的工具,例如Hive。
當一個分析管道的最終結果出來的時候,Sqoop可以將這些結果導回到資料庫,以便其它的
客戶端使用這些資料。
本章,我們將研究Sqoop是怎樣工作的和在你的資料處理管道中怎樣使用它。
獲得Sqoop
Sqoop在很多地方可以下載到。http://github.com/cloudera/sqoop是專案的主頁。這個倉庫包括Sqoop的所有原始碼和文件。本網站上面有官方發行版本,同樣也有正在開發的版本,在它們的程式碼倉庫中包括編譯專案的指導。相應的,Cloudera的釋出Hadoop版本包括與Hadoop或其它的工具(像Hive)相容的Sqoop安裝包。
如果你從github上下載了版本,他會放在類似這樣的目錄下,/home/yourname/sqoop-x.y.z/。我們稱這個目錄為$SQOOP_HOME。
你可以用可執行的script命令$SQOOP_HOME/bin/sqoop來執行Sqoop。
如果你從Cloudra上安裝了版本,安裝包會把Sqoop的指令碼放在標準位置例
如:/usr/bin/sqoop。你可以在命令視窗敲入sqoop就可以執行Sqoop了。
Sqoop命令不帶任何引數的時候 是沒有很多意義的,
% sqoop
Try sqoop help for usage.
Sqoop是由一系列工具和命令組織成的。不選擇一個工具,Sqoop不知道做什麼。help是這
樣的一種工具,它能夠列印出可用的工具。
% sqoop help
usage: sqoop COMMAND [ARGS]
Available commands:
codegen Generate code to interact with database records
create-hive-table Import a table definition into Hive
eval Evaluate a SQL statement and display the results
export Export an HDFS directory to a database table
help List available commands
import Import a table from a database to HDFS
import-all-tables Import tables from a database to HDFS
list-databases List available databases on a server
list-tables List available tables in a database
version Display version information
當輸入如下的命令時,會列印出具體工具的使用說明。
% sqoop help import
usage: sqoop import [GENERIC-ARGS] [TOOL-ARGS]
Common arguments:
–connect <jdbc-uri> Specify JDBC connect string
–driver <class-name> Manually specify JDBC driver class to use
–hadoop-home <dir> Override $HADOOP_HOME
–help Print usage instructions
-P Read password from console
–password <password> Set authentication password
–username <username> Set authentication username
–verbose Print more information while working
…
執行Sqoo工具的一個替代的方法是用tool-specific指令碼命令。類似sqoop-toolname的命令
,例如:sqoop-help, sqoop-import, etc.
匯入資料的一個例子
安裝完Sqoop之後,你就可以用它往Hadoop裡面匯入資料了。
使用Sqoop從資料庫中匯出資料,如果你還沒有安裝資料伺服器,你需要選擇一個,對於大多數平臺來說,MySql是一個簡便易用的資料庫。
安裝和配置MySql,參考下面的文件,http://dev.mysql.com/doc/refman/5.1/en/。第二章的內容會有幫助。Debin使用者使用如下命令安裝,sudo aptget install mysql-client mysql-server
RedHat使用者使用以下命令:sudo yum install mysql mysql-server
MySql安裝好之後,我們登入進去並且建立資料庫。
例子15-1:建立一個MySql資料庫模式。
% mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 349
Server version: 5.1.37-1ubuntu5.4 (Ubuntu)
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the current input
statement.
mysql> CREATE DATABASE hadoopguide;
Query OK, 1 row affected (0.02 sec)
mysql> GRANT ALL PRIVILEGES ON hadoopguide.* TO ‘%’@’localhost`;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON hadoopguide.* TO ”@’localhost`;
Query OK, 0 rows affected (0.00 sec)
mysql> quit;
Bye
上面提到的密碼是你的root使用者密碼。一般是你的shell登入密碼。如果你執行的是Ubuntu
或其它的Linux版本,使用root密碼無法直接登入時,你就用安裝時候設定的密碼登入。
在這個會話中,我們建立了一個新的資料模式叫做,hadoopguide,在本章節中,我們將都
會用它。然後我們允許任何的本地使用者都可以檢視和修改hadoopguide的內容,並且關閉會
話。當然了,在生產開發中,我們需要更多的關心許可權的控制,但是我們這個伺服器是臨
時使用的。上面賦予的許可權也是假設你執行在偽分散式上面。如果你工作在分散式叢集中
,你需要保證至少一個使用者,啟用了遠端訪問,這個使用者用來執行通過Sqoop匯入和匯出。
Sqoop的匯入工具會執行一個Mapreduce job,這個job連線到MySQL資料庫並且讀取資料庫中的表。預設情況下,這個過程會併發的使用四個map tasks 來加快匯入資料的過程。每個 task 會把它的匯入結果寫入到一個不同的檔案中,但是,所有檔案都在同一個目錄下面。
在這個例子中,我們只匯入三行資料,所以我們指定Sqoop使用一個單獨的map task (-m 1),這樣我們在HDFS中只生成一個檔案。
我們可以通過如下命令檢視檔案的內容:
% hadoop fs -cat widgets/part-m-00000
1,sprocket,0.25,2010-02-10,1,Connects two gizmos
2,gizmo,4.00,2009-11-30,4,null
3,gadget,99.99,1983-08-13,13,Our flagship product
例子中的連線字串(jdbc:mysql://localhost/hadoopguide)會從本機的資料庫中讀取資料。如果使用的是一個分散式的Hadoop叢集,那麼,在連線字串中不應該指定位localhost主機名(譯註:指定主機名後,就特定的只連線那臺主機);map tasks 沒有執行在相同的機器上面,因為連線資料庫可能失敗。只有當Sqoop與資料庫伺服器執行在同一個主機上面時,才應該指明完整的主機名。
在預設情況下,Sqoop會把我們匯入的資料,生成逗號分隔符分開的文字檔案。分隔符可以自己指定。命令列中的引數可以指定分隔符,檔案格式,壓縮格式,和更多的對匯入過程的細緻的控制。
注:文字和二進位制檔案格式
Sqoop可以匯入資料到一些不同的檔案格式。文字格式(預設格式)提供一種便於人閱讀的資料格式,這種格式平臺無關性,是最簡單的結構。
但是,這種檔案格式,不可以處理二進位制欄位(例如資料庫中列中的可變二進位制型別欄位);不能區分出空值和包含null的字串。
為了解決這種情況,你應該使用Sqoop的基於Sequence的檔案格式。序列化檔案的缺點是,他們是Java特定的,並且目前Sqoop版本不能將其匯入到Hive中。
但是,序列化檔案提供了,更精確的匯入資料的替代方法的可能性。它也允許資料壓縮,同時保持了Mapreduce平行的處理同一個檔案不同部分的能力。
相關文章
- Sqoop1 From PostgreSQL to HdfsOOPSQL
- sqoop應用例項1OOP
- 1- hive和sqoop元件介紹HiveOOP元件
- Sqoop1 Install And Test MySQL/PostgreSQLOOPMySql
- Sqoop之 Sqoop 1.4.6 安裝OOP
- sqoopOOP
- Sqoop jobOOP
- 【Sqoop篇】----Sqoop從搭建到應用案例OOP
- Sqoop同步策略OOP
- sqoop 的使用OOP
- SQOOP安裝部署OOP
- sqoop 架構分析OOP架構
- sqoop小作業OOP
- 【大資料】— sqoop ?大資料OOP
- sqoop的安裝OOP
- Sqoop fetchsize失效OOP
- sqoop簡單使用OOP
- 4- sqoop語法OOP
- sqoop指令碼批量生成OOP指令碼
- 【Hadoop】9、Sqoop元件Hadoop元件
- Sqoop2安裝OOP
- Hadoop Sqoop介紹Hadoop
- Sqoop 並行抽數OOP並行
- sqoop的外掛oraoopOOP
- sqoop 安裝與配置使用OOP
- Sqoop1.4.6配置和使用OOP
- Sqoop安裝及驗證OOP
- sqoop匯入orcle注意事項OOP
- sqoop如何指定pg庫的模式OOP模式
- Apache Sqoop與Apache Flume比較ApacheOOP
- 資料同步工具Sqoop和DataXOOP
- sqoop資料匯入匯出OOP
- Sqoop的介紹和安裝OOP
- Sqoop匯出ClickHouse資料到HiveOOPHive
- sqoop常用命令整理(一)OOP
- sqoop條件抽取報錯distcpOOPTCP
- Sqoop 1.99.6 安裝和使用OOP
- sqoop export 資料覆蓋更新OOPExport