这应该是全网目前最全的Sqoop文档了吧,小厨为大家奉献整篇内容包括:Sqoop架构、原理、安装、使用等。
目录
1 Sqoop简介
Sqoop可以理解为【SQL–to–Hadoop】,正如名字所示,Sqoop是一个用来将关系型数据库和Hadoop中的数据进行相互转移的工具。帮助我们完成数据的迁移和同步。比如,下面两个潜在的需求:
1、业务数据存放在关系数据库中,如果数据量达到一定规模后需要对其进行分析或同统计,单纯使用关系数据库可能会成为瓶颈,这时可以将数据从业务数据库数据导入(import)到Hadoop平台进行离线分析。
2、对大规模的数据在Hadoop平台上进行分析以后,可能需要将结果同步到关系数据库中作为业务的辅助数据,这时候需要将Hadoop平台分析后的数据导出(export)到关系数据库。
根据Sqoop官网说法,Sqoop2 目前还未开发完,不建议在生产环境使用,所以这里选的是Sqoop的稳定版 1.4.6。sqoop整体架构如下图所示:
2 Sqoop原理
2.1 import原理
使用Sqoop可以从关系型数据库中导入数据到HDFS上,在这个过程中import操作的输入是一个数据库表,Sqoop会逐行读取记录到HDFS中。import操作的输出是包含读入表的一系列HDFS文件,import操作是并行的也就是说可以启动多个map同时读取数据到HDFS,每一个map对应一个输出文件。这些文件可以是TextFile类型,也可以是Avro类型或者SequenceFile类型。
Sqoop在import时,需要制定split-by参数。Sqoop根据不同的split-by参数值来进行切分,然后将切分出来的区域分配到不同map中。每个map中再处理数据库中获取的一行一行的值,写入到HDFS中。同时split-by根据不同的参数类型有不同的切分方法,如比较简单的int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来确定划分几个区域。 比如select max(split_by),min(split-by) from得到的max(split-by)和min(split-by)分别为1000和1,而num-mappers为2的话,则会分成两个区域(1,500)和(501-100),同时也会分成2个sql给2个map去进行导入操作,分别为select XXX from table where split-by>=1 and split-by<500和select XXX from table where split-by>=501 and split-by<=1000。最后每个map各自获取各自SQL中的数据进行导入工作。
在import过程中还会生成一个Java类,这个类与输入的表对应,类名即表名,类变量即表字段。import过程会使用到这个Java类。
2.2 export原理
在import操作之后,就可以使用这些数据来实验export过程了。export是将数据从HDFS或者hive导出到关系型数据库中。export过程并行的读取HDFS上的文件,将每一条内容转化成一条记录,然后作为一个新行insert到关系型数据库表中。
除了import和export,Sqoop还包含一些其他的操作。比如可以使用sqoop-list-databases工具查询数据库结构,可以使用sqoop-list-tables工具查询表信息。还可以使用sqoop-eval工具执行SQL查询。
3 准备工作:配置数据库远程连接
在使用Sqoop之前,要确保关系型数据库可以允许远程IP访问,可以做如下操作:
(1)配置数据库远程连接,允许IP地址为192.168.1.102主机以用户名为sqoopuser密码为sqoopuser的身份访问数据库。
mysql>GRANT ALL PRIVILEGES ON mytest.* TO 'root'@'192.168.1.102' IDENTIFIED BY 'sqoopuser' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
(2)配置数据库远程连接,允许任意远程主机以用户名为sqoopuser密码为sqoopuser的身份访问数据库。
mysql>GRANT ALL PRIVILEGES ON *.* TO 'sqoopuser'@'%' IDENTIFIED BY 'sqoopuser' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
至此,可以开始操作sqoop的import/export 命令。
4 安装Sqoop
一、解压Sqoop安装包,解压即安装。在/usr/Sqoop文件夹下
tar -zvxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
二、修改配置文件,使环境变量生效(在使用Ambari或者CDH时,配置文件都由平台自动写入配置,不需要自行修改。本步操作针对于单机安装)
1、cd /usr/Sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz/conf
2、mv sqoop-env-template.sh sqoop-env.sh
3、如果要往HBASE里面迁移数据 需要配置 export HBASE_HOME=
还需配置zookeeper
export ZOOCFGDIR=/usr/zookeeper/zookeeper-3.4.10
4、如果要往HIVE里面迁移数据 需要配置 export HIVE_HOME=
5、如果要往hdfs里面迁移数据 需要配置
export HADOOP_COMMON_HOME=/usr/hadoop/hadoop-2.6.5 (hadoop安装目录)
export HADOOP_MAPRED_HOME= /usr/hadoop/hadoop-2.6.5 (mapreduce安装目录
6、zookeeper的配置文件 在往HBASE里迁移数据的时候需要zookeeper
三、在/etc/profile文件 配置Sqoop的环境变量
1、export SQOOP_HOME=/usr/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
2、export PATH=$PATH:$SQOOP_HOME/bin
四、使配置文件生效 source /etc/profile
五、将数据库连接驱动拷贝到$SQOOP_HOME/lib里,驱动版本要保证相对较高。
六、测试是否安装成功,sqoop version