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

客户端在升级期间不需要作任何操作,用最新的版本替换二进制文件就够了。


分享到:


相關文章: