Sqoop2的安装与使用

来源:互联网 发布:三折肱知为良医 编辑:程序博客网 时间:2024/06/04 22:05

安装篇

Sqoop由两部分组成:客户端(client)和服务端(server)。需要在集群的其中某个节点上安装server,该节点的服务端可以作为其他Sqoop客户端的入口点。在服务端的节点上必须安装有Hadoop。客户端可以安装在任意数量的机子上。在装有客户端的机子上不需要安装Hadoop。

服务端安装

# 将Sqoop分布式tar包解压到任意的目录。我们将它加压到/opt目录下。tar -zxvf sqoop-1.99.6-bin-hadoop200.tar.gz -C /opt# 进入/opt目录cd /opt# 名字太长,重命名下mv sqoop-1.99.6-bin-hadoop200 sqoop-1.99.6

安装依赖

在目录server/conf下的catalina.properties文件中配置Hadoop 库的路径。需要改变common.loader这个参数来包含Hadoop 库的所有目录。

根据hadoop的安装路径,在中common.loader添加如下的库:

/opt/hadoop-2.6.0/share/hadoop/common/*.jar,/opt/hadoop-2.6.0/share/hadoop/common/lib/*.jar,/opt/hadoop-2.6.0/share/hadoop/hdfs/*.jar,/opt/hadoop-2.6.0/share/hadoop/hdfs/lib/*.jar,/opt/hadoop-2.6.0/share/hadoop/mapreduce/*.jar,/opt/hadoop-2.6.0/share/hadoop/mapreduce/lib/*.jar,/opt/hadoop-2.6.0/share/hadoop/tools/*.jar,/opt/hadoop-2.6.0/share/hadoop/tools/lib/*.jar,/opt/hadoop-2.6.0/share/hadoop/yarn/*.jar,/opt/hadoop-2.6.0/share/hadoop/yarn/lib/*.jar,/opt/hadoop-2.6.0/share/hadoop/httpfs/*.jar,/opt/hadoop-2.6.0/share/hadoop/httpfs/lib/*.jar,/opt/hadoop-2.6.0/share/hadoop/kms/*.jar,/opt/hadoop-2.6.0/share/hadoop/kms/lib/*.jar,
如下图:


最后,需要安装JDBC驱动,将JDBC驱动放入server/lib/目录下。我们使用的是mysql,所以将下载好的mysql驱动放入到该目录下即可。

如下图:



配置PATH

建议在/etc/profile目录中增加以下环境变量以及修改$PATH,以方便使用,如下图:

配置服务端

在启动服务之前,需要检测配置文件是否与你的环境相匹配。服务端的配置文件存放在server/config目录下。你可能需要将sqoop.properties文件中的org.apache.sqoop.submission.engine.mapreduce.configuration.directory这个属性设置成当前安装的Hadoop的配置文件所在的目录。
如下图:

其他的一些配置
以上的各种配置信息都可以在官网中轻松获取,但是下面的配置(步骤)官网并没有给出,但在笔者的实验过程中是需要用到的,不配可能会给你带来麻烦。
1、需要在Hadoop的yarn-site.xml 这个配置文件中增加以下属性
<property>    <name>yarn.log-aggregation-enable</name>    <value>true</value>  </property> 
修改了yarn-site.xml后重启HDFS即可。
如果,不加上面的属性,会产生什么问题呢?可能在数据迁移的过程中出现“Aggregation is not enabled”的问题,导致数据迁移失败,如下图:

2、需要在安装有Sqoop服务端的节点上,启动historyserver这个进程。
在hadoop的sbin目录下执行如下命令
# /opt/hadoop-2.6.0/etc/hadoop 是我的hadoop存放配置文件的目录./mr-jobhistory-daemon.sh start historyserver --config /opt/hadoop-2.6.0/etc/hadoop

启动之后,使用jps命令查看,多出JobHistoryServer进程,如下图:

如果JobHistoryServer不启动,你可能在后面启动job时遇到以下问题:Call From ubuntu02/192.168.4.103 to 0.0.0.0:10020 failed on connection exception: java.net.ConnectException: Connection refused。如下图:

最好在其他启动NodeManager的节点上也启动该进程。

客户端的安装

客户端不需要额外的安装和配置步骤。只需要将Sqoop的包放到目标节点上,并且解压到某个目录即可使用 。


使用篇

服务端的启动 

可以直接使用以下命令启动服务。

sqoop2-server start
如果服务端已经启动,则有Bootstrap这个进程:

客户端的启动

使用以下命令,以交互式模式启动客户端:
sqoop2-shell

我们在使用的过程中可能会遇到错误,使用以下命令来使错误信息显示出来
sqoop:000> set option --name verbose --value true

连接Sqoop服务端:

#我们的服务端安装在ubuntu02这个节点上所以--host是ubuntu02sqoop:000> set server --host ubuntu02 ### 使用上面自动连接即可。(set server --host ubuntu02 --port 12000 --webapp sqoop)

验证是否已经连上

sqoop:000> show version --allclient version:  Sqoop 2.0.0-SNAPSHOT source revision 418c5f637c3f09b94ea7fc3b0a4610831373a25f  Compiled by vbasavaraj on Mon Nov  3 08:18:21 PST 2014server version:  Sqoop 2.0.0-SNAPSHOT source revision 418c5f637c3f09b94ea7fc3b0a4610831373a25f  Compiled by vbasavaraj on Mon Nov  3 08:18:21 PST 2014API versions:  [v1]

如果打印出类似上面的形式,表示已经连上了。

可以使用help命令来检查sqoop shell所支持的命令:

sqoop:000> helpFor information about Sqoop, visit: http://sqoop.apache.org/Available commands:  exit    (\x  ) Exit the shell  history (\H  ) Display, manage and recall edit-line history  help    (\h  ) Display this help message  set     (\st ) Configure various client options and settings  show    (\sh ) Display various objects and configuration options  create  (\cr ) Create new object in Sqoop repository  delete  (\d  ) Delete existing object in Sqoop repository  update  (\up ) Update objects in Sqoop repository  clone   (\cl ) Create new object based on existing one  start   (\sta) Start job  stop    (\stp) Stop job  status  (\stu) Display status of a job  enable  (\en ) Enable object in Sqoop repository  disable (\di ) Disable object in Sqoop repository

创建Link对象

检查Sqoop服务(server)已经注册的 connectors:


我们例子中的Generic JDBC Connector 有一个永久不变的 Id 4 ,我们会利用这个值来为connector创建新的link对象,下面创建的是连接JDBC的link:

sqoop:000> create link -c 4#注意:这边的4是connector的id,表明创建的是一个generic jdbc connectorCreating link for connector with id 2Please fill following values to create new link objectName: mysql-link#注意:Name是唯一的Link configurationJDBC Driver Class: com.mysql.jdbc.DriverJDBC Connection String: jdbc:mysql://ubuntu02:3306/mytest#注意:jdbc:mysql://主机名(ip):端口/数据库名Username: rootPassword: ******JDBC Connection Properties:There are currently 0 values in the map:entry#protocol=tcpNew link was successfully created with validation status OK and persistent id 3

创建Job对象

Connectors 的From 用于读取数据,To用于写入数据。使用上面的show connector -all命令可以显示出Generic JDBC Connector对From和To都是支持的。也就是说我们既可以从数据库中读取数据,也可以往数据库中写入数据。为了创建一个Job,我们需要指定Job的From和To部分,From和To部分可以使用link Id 来表示。

sqoop:000> show link --all2 link(s) to show: link with id 3 and name mysql-link (Enabled: true, Created by ubuntu at 7/14/15 3:58 PM, Updated by ubuntu at 7/14/15 3:58 PM)Using Connector generic-jdbc-connector with id 4  Link configuration    JDBC Driver Class: com.mysql.jdbc.Driver    JDBC Connection String: jdbc:mysql://ubuntu02:3306/mytest    Username: root    Password:     JDBC Connection Properties:       protocol = tcplink with id 4 and name hdfs-link (Enabled: true, Created by ubuntu at 7/14/15 4:09 PM, Updated by ubuntu at 7/14/15 4:09 PM)Using Connector hdfs-connector with id 3  Link configuration    HDFS URI: hdfs://ns1/    Hadoop conf directory: /opt/hadoop-2.6.0/etc/hadoop

接下来,我们可以使用这两个link Id来关联job的From和To部分。说的通俗一点,就是我们需要从哪里(From)读取数据,把这些数据导入(To)到哪里?

sqoop:000> create job -f 3 -t 4Creating job for links with from id 3 and to id 4Please fill following values to create new job objectName: testsqoop    #Name必须唯一From database configurationSchema name: mytest                     #必填,数据库名称Table name: balance                  #必填,表名Table SQL statement:                   #可选Table column names:             #可选Partition column name:         #可选Null value allowed for the partition column:      #可选Boundary query:                        #可选Incremental readCheck column:                         #可选Last value:                          #可选To HDFS configurationOverride null value:                    #可选Null value: Output format:   0 : TEXT_FILE  1 : SEQUENCE_FILEChoose: 0                           #必选 Compression format:   0 : NONE  1 : DEFAULT  2 : DEFLATE  3 : GZIP  4 : BZIP2  5 : LZO  6 : LZ4  7 : SNAPPY  8 : CUSTOMChoose: 0                               #必选Custom compression format: Output directory: /user/ubuntu/lucius/new_balance   #必填Append mode: Throttling resourcesExtractors: 2                            #可选,对应mapreduce的job中的map的数量Loaders: 1                              #可选,对应mapreduce的job中的reduce的数量New job was successfully created with validation status OK  and persistent id 5

这样就建立了一个新的job,他的id是5

启动job

可以使用以下命令来执行job:

#这边-j后面的5代表上面创建的job的id,可以使用show job来查看已经创建的jobsqoop:000> start job -j 5 -s

运行结果如下图:


确认数据是否已经导入

如下图,已经将mysql的mytest库中的balance表中的两条数据成功导入到hdfs的相应目录下了。

更多命令

请参看:http://sqoop.apache.org/docs/1.99.6/CommandLineClient.html

1 0