Apache Sqoop文檔~管理員手冊

原文:http://sqoop.apache.org/docs/1.99.7/admin.html

1.1. 安裝

Sqoop提供了一個二進制包,該包包含兩個獨立組件:client和server.

  • Server:需要在集群的單個節點上安裝服務器。然後,該節點就可作為所有sqoop client的入口點。
  • Client:Client可以安裝在任何數量的機器上。

1.1.1. Server安裝

複製Sqoop artifact到運行Sqoop server的目標機器上.

Sqoop server充當的是Hadoop client,因此必須在該節點上存在可用的Hadoop庫(Yarn, Mapreduce, 和HDFS jar文件)和配置文件(core-site.xml, mapreduce-site.xml, ...).

您不需要運行Hadoop相關服務-在“網關”節點上運行server是完全可以的。

例如,你可以列出HDFS中的所有文件:

hadoop dfs -ls

Sqoop目前只支持Hadoop 2.6.0+版本. 要安裝Sqoop server,請先解壓tarball,並將新創建的forder設為工作目錄。

# Decompress Sqoop distribution tarball

tar -xvf sqoop-<version>-bin-hadoop<hadoop-version>.tar.gz/<hadoop-version>/<version>

# Move decompressed content to any location

mv sqoop-<version>-bin-hadoop<hadoop>.tar.gz /usr/lib/sqoop/<hadoop>/<version>

# Change working directory

cd /usr/lib/sqoop

1.1.1.1. Hadoop依賴

Sqoop server需要以下指向Hadoop庫的環境變量:

  • $HADOOP_COMMON_HOME
  • $HADOOP_HDFS_HOME
  • $HADOOP_MAPRED_HOME
  • $HADOOP_YARN_HOME

你必須確保節點上已經正確定義了這些變量. 如果找不到Hadoop庫,Sqoop server會啟動失敗。

Sqoop server會通過環境變量來查找Hadoop庫。

在設置了$HADOOP_HOME環境變量的情況下,Sqoop會按如下位置來查找 jar包:

  • $HADOOP_HOME/share/hadoop/common
  • $HADOOP_HOME/share/hadoop/hdfs
  • $HADOOP_HOME/share/hadoop/mapreduce
  • $HADOOP_HOME/share/hadoop/yarn

當然,你也可以使用$HADOOP_COMMON_HOME, $HADOOP_HDFS_HOME, $HADOOP_MAPRED_HOME,$HADOOP_YARN_HOME 環境變量來分別指定common, hdfs, mapreduce, 和yarn的jar包位置.

# Export HADOOP_HOME variable

export HADOOP_HOME=/...

# Or alternatively HADOOP_*_HOME variables

export HADOOP_COMMON_HOME=/...

export HADOOP_HDFS_HOME=/...

export HADOOP_MAPRED_HOME=/...

export HADOOP_YARN_HOME=/...

注意

如果設置了$HADOOP_HOME環境變量,Sqoop會使用下面的位置:

  • $HADOOP_HOME/share/hadoop/common
  • $HADOOP_HOME/share/hadoop/hdfs
  • $HADOOP_HOME/share/hadoop/mapreduce
  • $HADOOP_HOME/share/hadoop/yarn

1.1.1.2. Hadoop配置

Sqoop server需要模擬用戶(該用戶是啟動作業的用戶而非運行server的用戶)來訪問集群內外的HDFS和其它資源。因此,你需要配置Hadoop相關設置,以便它能通過proxyuser系統來模擬用戶。

為實現該目標,你需要在 core-site.xml 文件中創建兩個properties:

  • hadoop.proxyuser.$SERVER_USER.hosts
  • hadoop.proxyuser.$SERVER_USER.groups

這裡的$SERVER_USER 是運行Sqoop 2 server的用戶. 對於大多數情況,配置*就可以了。

有關如何使用這些屬性的細節,請參考Hadoop文檔。

當server以sqoop2用戶運行時,可在core-site.xml文件中配置如下屬性:

<property>

<name>hadoop.proxyuser.sqoop2.hosts/<name>

<value>*/<value>

<property>

<name>hadoop.proxyuser.sqoop2.groups/<name>

<value>*/<value>

如果您是通過所謂的系統用戶(system user,默認ID小於min.user.id- 1000的用戶)來運行Sqoop 2 server的, 則默認情況下,YARN會拒絕運行Sqoop 2 作業。要解決這一限制,可將運行 Sqoop 2 server的用戶名(例如:sqoop2) 添加到container-executor.cfg文件中的allowed.system.users屬性中.

例如,當以sqoop2用戶來運行server時,我們可將下面的代碼片段添加到container-executor.cfg文件中:

allowed.system.users=sqoop2

更多信息,請參考YARN文檔。

1.1.1.3. 第三方jar

要將任何第三方jar傳播(propagate)到Sqoop server classpath,可在文件系統的任何位置創建一個目錄,並將它的位置導出到SQOOP_SERVER_EXTRA_LIB 變量中。

# Create directory for extra jars

mkdir -p /var/lib/sqoop2/

# Copy all your JDBC drivers to this directory

cp mysql-jdbc*.jar /var/lib/sqoop2/

cp postgresql-jdbc*.jar /var/lib/sqoop2/

# And finally export this directory to SQOOP_SERVER_EXTRA_LIB

export SQOOP_SERVER_EXTRA_LIB=/var/lib/sqoop2/

注意

由於licenses不兼容問題,Sqoop並未附帶任何JDBC驅動。因此你必須通過該機制來安裝所需的JDBC驅動。

1.1.1.4. 配置PATH

所有用戶和管理員的shell命令都存儲在bin/目錄中.

為方便執行,建議將此目錄添加到$PATH中,例如:

PATH=$PATH:`pwd`/bin/

Sqoop 2文檔的其它章節會假定shell命令位於$PATH中。

1.1.1.5. 配置Server

Server 配置文件位於conf 目錄.

sqoop_bootstrap.properties用於指定使用哪個provider來加載Sqoop server的其它配置。

大多數情況下,使用默認值PropertiesConfigurationProvider 就夠了。

第二個配置文件為sqoop.properties,它包含可影響Sqoop server行為的其它配置屬性.

該配置文件有很好的註釋,因此可根據您的環境來檢查這些配置屬性是否符合需求。

大多數情況下,使用默認值(或進行微調)就可以了。

1.1.1.6. Repository初始化

首次啟動Sqoop 2 server之前,需要初始化元數據存儲庫(metadata repository)。

可使用Upgrade tool 來初始化存儲庫:

sqoop2-tool upgrade

要驗證配置是否正確,可使用Verify tool:

sqoop2-tool verify

...

Verification was successful.

Tool class org.apache.sqoop.tools.tool.VerifyTool has finished correctly

1.1.1.7. Server生命週期

在安裝和配置了Server之後,你可以使用下面的命令來啟動Sqoop server:

sqoop2-server start

要停止server,可使用如下命令:

sqoop2-server stop

默認Sqoop server守護進程會使用12000端口.

如果想使用其它端口,可修改conf/sqoop.properties配置文件中的org.apache.sqoop.jetty.port選項。

1.1.2. Client安裝

只需要將Sqoop發行包拷貝到目標機器上,並將其解壓到目標位置即可。

可使用下面的命令來啟動client:

sqoop2-shell

有關Sqoop shell的更多文檔,請查看Command Line Shell.

注意

Client不充當Hadoop client,因此沒必要在節點上安裝Hadoop包和配置文件。

1.2. 工具

工具是管理員可在Sqoop server機器上執行各種管理任務的server命令。工具會執行指定的任務,並確保其完成。沒有哪個工具會實現為長時間運行的服務。

為運行每個工具要執行的維護任務,必須將其放置到與主Sqoop server相同的環境中執行。

tool binary會負責設置CLASSPATH和所需的其它環境變量。但通常管理員應該使用運行server的用戶來運行該工具。通常,各種Hadoop版本會自動配置(例如:Apache Bigtop).

注意

不建議在Sqoop Server運行時運行這些工具,因為這可能導致數據損壞和服務中斷。

可用工具清單:

  • verify
  • upgrade

要運行特定工具,可使用帶特定工具名稱的sqoop2-tool. 例如,要運行verify工具:

sqoop2-tool verify

注意

在運行Sqoop工具前,必須先停止Sqoop Server。在運行Sqoop Server時同時運行工具會導致數據損壞和服務中斷。

1.2.1. 檢驗工具

通過啟動除servlet之外的所有子系統(並將其拆下),verify tool 可以驗證Sqoop server配置。

可使用如下命令來運行verify tool:

sqoop2-tool verify

如果驗證成功,你可以看到如下類似信息:

Verification was successful.

Tool class org.apache.sqoop.tools.tool.VerifyTool has finished correctly

如果驗證過程失敗,它會打印如下消息:

Verification has failed, please check Server logs for further details.

Tool class org.apache.sqoop.tools.tool.VerifyTool has failed.

驗證失敗的詳細信息,可以查看Sqoop server log。

1.2.2. 升級工具

可升級Sqoop2中所有版本化組件:包括修改存儲庫內的結構和元數據。

在已升級的Sqoop部署上運行此工具不會產生任何作用。

可使用如下命令來運行upgrade tool:

sqoop2-tool upgrade

升級成功會打印如下類似消息:

Tool class org.apache.sqoop.tools.tool.UpgradeTool has finished correctly.

升級失敗會打印如下類似消息:

Tool class org.apache.sqoop.tools.tool.UpgradeTool has failed.

有關升級失敗的詳細信息,可參考Sqoop server log。

1.2.3. RepositoryDump

將用戶創建的Sqoop存儲庫內容寫入JSON格式的文件。其內容包括:連接(connections),作業(jobs)和提交(submissions)。

可使用如下命令來運行repositorydump tool:

sqoop2-tool repositorydump -o repository.json

此外,管理員也可以將敏感信息(例如:數據庫連接密碼)寫入文件中:

sqoop2-tool repositorydump -o repository.json --include-sensitive

如果執行成功,您應該能看到如下類似消息:

Tool class org.apache.sqoop.tools.tool.RepositoryDumpTool has finished correctly.

如果存儲庫轉存失敗,則會看到如下類似消息:

Tool class org.apache.sqoop.tools.tool.RepositoryDumpTool has failed.

有關轉存失敗的詳細信息,可查看Sqoop server log。

1.2.4. RepositoryLoad

讀取JSON格式文件(RepositoryDump產生的文件)並將其加載到當前Sqoop repository中.

可使用如下命令來運行repositoryLoad tool:

sqoop2-tool repositoryload -i repository.json

如果執行成功,您應該能看到如下類似消息:

Tool class org.apache.sqoop.tools.tool.RepositoryLoadTool has finished correctly.

如果存儲庫加載失敗,您可以看到如下類似消息:

Tool class org.apache.sqoop.tools.tool.RepositoryLoadTool has failed.

或異常信息.

有關存儲庫加載失敗的詳細信息,可查看Sqoop server log。

注意

如果創建的存儲庫轉儲不帶密碼(默認),則連接也不會包含密碼,那麼在這種情況下將無法執行作業。因此,在這種情況下,你必須手動更新連接並設置相應的密碼。

注意

即使存儲庫中已存在相同的對象,RepositoryLoad工具還是會根據文件生成新連接,作業,提交。

1.2.5. RepositoryEncryption

有關存儲庫加密的更多詳細信息,請參考Repository Encryption

有時,我們需要更改數據的加密密碼,為現有密碼生成新密鑰,加密現有的未加密存儲庫或解密現有加密存儲庫S. Sqoop 2提供了Repository Encryption 工具來完成這些目錄。

在使用此工具之前,切記要先關閉Sqoop 2 server.

該工具所做的任何修改都發生與存儲庫相關的單個事務中,這樣可防止存儲庫生產錯誤狀態。

Repository Encryption工具相當簡單,它使用的配置與上面提到的一樣(useConf除外).

前綴為“-F”的配置表示現有存儲庫狀態,前綴為“-T”的配置表示期望的存儲庫狀態。

如果遺漏了其個配置,則意味著未加密。

1.2.5.1. 修改密碼

要修改密碼, 我們需用現有密碼指定當前配置,並使用新密碼來指定期望配置。

它看起來像如下內容:

sqoop.sh tool repositoryencryption \\

-Forg.apache.sqoop.security.repo_encryption.password=old_password \\

-Forg.apache.sqoop.security.repo_encryption.hmac_algorithm=HmacSHA256 \\

-Forg.apache.sqoop.security.repo_encryption.cipher_algorithm=AES \\

-Forg.apache.sqoop.security.repo_encryption.cipher_key_size=16 \\

-Forg.apache.sqoop.security.repo_encryption.cipher_spec=AES/CBC/PKCS5Padding \\

-Forg.apache.sqoop.security.repo_encryption.initialization_vector_size=16 \\

-Forg.apache.sqoop.security.repo_encryption.pbkdf2_algorithm=PBKDF2WithHmacSHA1 \\

-Forg.apache.sqoop.security.repo_encryption.pbkdf2_rounds=4000 \\

-Torg.apache.sqoop.security.repo_encryption.password=new_password \\

-Torg.apache.sqoop.security.repo_encryption.hmac_algorithm=HmacSHA256 \\

-Torg.apache.sqoop.security.repo_encryption.cipher_algorithm=AES \\

-Torg.apache.sqoop.security.repo_encryption.cipher_key_size=16 \\

-Torg.apache.sqoop.security.repo_encryption.cipher_spec=AES/CBC/PKCS5Padding \\

-Torg.apache.sqoop.security.repo_encryption.initialization_vector_size=16 \\

-Torg.apache.sqoop.security.repo_encryption.pbkdf2_algorithm=PBKDF2WithHmacSHA1 \\

-Torg.apache.sqoop.security.repo_encryption.pbkdf2_rounds=4000

1.2.5.2. 為現有密碼生成新的密鑰

與上面的場景類似,你可以像下面這樣對相同配置拷貝兩次:

sqoop.sh tool repositoryencryption \\

-Forg.apache.sqoop.security.repo_encryption.password=password \\

-Forg.apache.sqoop.security.repo_encryption.hmac_algorithm=HmacSHA256 \\

-Forg.apache.sqoop.security.repo_encryption.cipher_algorithm=AES \\

-Forg.apache.sqoop.security.repo_encryption.cipher_key_size=16 \\

-Forg.apache.sqoop.security.repo_encryption.cipher_spec=AES/CBC/PKCS5Padding \\

-Forg.apache.sqoop.security.repo_encryption.initialization_vector_size=16 \\

-Forg.apache.sqoop.security.repo_encryption.pbkdf2_algorithm=PBKDF2WithHmacSHA1 \\

-Forg.apache.sqoop.security.repo_encryption.pbkdf2_rounds=4000 \\

-Torg.apache.sqoop.security.repo_encryption.password=password \\

-Torg.apache.sqoop.security.repo_encryption.hmac_algorithm=HmacSHA256 \\

-Torg.apache.sqoop.security.repo_encryption.cipher_algorithm=AES \\

-Torg.apache.sqoop.security.repo_encryption.cipher_key_size=16 \\

-Torg.apache.sqoop.security.repo_encryption.cipher_spec=AES/CBC/PKCS5Padding \\

-Torg.apache.sqoop.security.repo_encryption.initialization_vector_size=16 \\

-Torg.apache.sqoop.security.repo_encryption.pbkdf2_algorithm=PBKDF2WithHmacSHA1 \\

-Torg.apache.sqoop.security.repo_encryption.pbkdf2_rounds=4000

當然,也可以走捷徑:

sqoop.sh tool repositoryencryption -FuseConf -TuseConf

useConf 選項會讀取現有sqoop配置屬性文件中的所有配置,並將其應用於目標配置。

1.2.5.3. 加密現有的未加密存儲庫

sqoop.sh tool repositoryencryption \\

-Torg.apache.sqoop.security.repo_encryption.password=password \\

-Torg.apache.sqoop.security.repo_encryption.hmac_algorithm=HmacSHA256 \\

-Torg.apache.sqoop.security.repo_encryption.cipher_algorithm=AES \\

-Torg.apache.sqoop.security.repo_encryption.cipher_key_size=16 \\

-Torg.apache.sqoop.security.repo_encryption.cipher_spec=AES/CBC/PKCS5Padding \\

-Torg.apache.sqoop.security.repo_encryption.initialization_vector_size=16 \\

-Torg.apache.sqoop.security.repo_encryption.pbkdf2_algorithm=PBKDF2WithHmacSHA1 \\

-Torg.apache.sqoop.security.repo_encryption.pbkdf2_rounds=4000

如果已將加密存儲庫的配置寫入sqoop屬性文件,則可以執行以下操作:

sqoop.sh tool repositoryencryption -TuseConf

1.2.5.4. 解密現有的加密存儲庫

sqoop.sh tool repositoryencryption \\

-Forg.apache.sqoop.security.repo_encryption.password=password \\

-Forg.apache.sqoop.security.repo_encryption.hmac_algorithm=HmacSHA256 \\

-Forg.apache.sqoop.security.repo_encryption.cipher_algorithm=AES \\

-Forg.apache.sqoop.security.repo_encryption.cipher_key_size=16 \\

-Forg.apache.sqoop.security.repo_encryption.cipher_spec=AES/CBC/PKCS5Padding \\

-Forg.apache.sqoop.security.repo_encryption.initialization_vector_size=16 \\

-Forg.apache.sqoop.security.repo_encryption.pbkdf2_algorithm=PBKDF2WithHmacSHA1 \\

-Forg.apache.sqoop.security.repo_encryption.pbkdf2_rounds=4000

如果尚未從sqoop屬性文件中刪除加密存儲庫的配置,則可以執行以下操作:

sqoop.sh tool repositoryencryption -FuseConf

1.3. 升級

本節介紹了將Sqoop一個版本升級級另一個版本時所需的步驟 。

我們將分別介紹server和client組件的升級。

注意

從版本1.99.2升級開始,我們只涵蓋從一個Sqoop 2版本到另一個版本的更新。

本手冊不包含如何將Sqoop 1升級到Sqoop 2的相關信息。

1.3.1. 升級Server

由於Sqoop服務器使用數據庫存儲庫來持久化sqoop實體(如連接器,驅動程序,鏈接和作業),因此可能需要在服務器升級過程中更新存儲庫模式。

此外,各種連接器和驅動程序對應配置和輸入也可能隨新服務器版本而發生變化,因此,除了升級存儲庫結構外,還需要升級數據。

有兩種方法可以升級存儲庫中的Sqoop實體,您可以執行upgrade工具,或配置sqoop server在啟動時執行所有必要的升級。

強烈建議在執行後續步驟之前,先備份存儲。對於不同的存儲庫實現,其備份說明也略有不同。

例如,使用MySQL作為存儲庫就需要與Apache Derby不同的回退過程。 請遵循存儲庫的備份過程。

1.3.1.1. 使用upgrade tool來升級Server

首選升級步驟是顯示運行Upgrade tool. 但在這之前,第一步需要先關閉 server,因為升級程序可能會破壞存儲庫中的數據:

sqoop2-server stop

當server成功停止後,你可以運行upgrade tool來升級:

sqoop2-tool upgrade

如果升級成功,你可以看到如下消息:

Tool class org.apache.sqoop.tools.tool.UpgradeTool has finished correctly.

如果失敗,則可以查看Upgrade tool 文檔頁面。

1.3.1.2. 在啟動時升級Server

server中自帶升級功能,但為了阻止對存儲庫的意外修改,默認它是禁用的。

可通過停止server來啟動存儲庫升級過程:

sqoop2-server stop

在再次啟動server之前,您需要啟用自動升級功能,該功能將在Sqoop Server啟動期間執行所有必要的更改。

你需要在sqoop.properties中為存儲庫模式升級設置如下屬性:

org.apache.sqoop.repository.schema.immutable=false

您需要在sqoop.properties中為連接器配置數據升級設置以下屬性。

org.apache.sqoop.connector.autoupgrade=true

你需要在sqoop.properties中為驅動配置數據升級設置以下屬性。org.apache.sqoop.driver.autoupgrade=true

設完所有屬性後,可使用下面的命令來啟動sqoop server:

sqoop2-server start

所有必需的操作都將在服務器引導期間自動執行。

一旦服務器成功啟動並且升級完成,強烈建議將所有三個屬性設回原始值。

1.3.2. 升級lient

客戶端在升級期間不需要作任何操作,用最新的版本替換二進制文件就夠了。


分享到:


相關文章: