大数据数据导入导出工具Sqoop的安装

邮箱:[email protected]

image
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中.
Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目.
Sqoop2的最新版本是1.99.7。请注意,2与1不兼容,且特征不完整,它并不打算用于生产部署.

sqoop原理

  • 将导入或导出命令翻译成mapreduce程序来实现.
  • 在翻译出的mapreduce中主要是对inputformat和outputformat进行定制.

sqoop安装

安装Sqoop的前提是已经具备Java和Hadoop的环境.

下载并解压
  • 下载地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/
  • 上传安装包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz到虚拟机中
  • 解压sqoop安装包到指定目录,如:
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
修改配置文件

Sqoop的配置文件与大多数大数据框架类似,在sqoop根目录下的conf目录中.

  • 复制配置文件
cp sqoop-env-template.sh sqoop-env.sh
  • 修改配置文件
sqoop依赖zookeeper,如果没有安装zookeeper可以先用默认的zookeeper  
vim sqoop-env.sh  
export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2
export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2
export HIVE_HOME=/opt/module/hive
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10
export ZOOCFGDIR=/opt/module/zookeeper-3.4.10
export HBASE_HOME=/opt/module/hbase

拷贝JDBC驱动

拷贝jdbc驱动包到sqoop的lib目录下,如:

 cp mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/

验证Sqoop

我们可以通过某一个command来验证sqoop配置是否正确:

sqoop help

测试Sqoop是否能够成功连接数据库

sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456
出现如下测试成功
19/07/27 18:53:34 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
19/07/27 18:53:34 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
19/07/27 18:53:34 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
information_schema
hive_metadata
mysql
test
test2

配置环境变量

列出mysql中有哪些数据库

[hadoop@hadoop3 ~]$ sqoop list-databases \
> --connect jdbc:mysql://hadoop1:3306/ \
> --username root \
> --password root
Warning: /home/hadoop/apps/sqoop-1.4.6/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /home/hadoop/apps/sqoop-1.4.6/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
18/04/12 13:43:51 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
18/04/12 13:43:51 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
18/04/12 13:43:51 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
information_schema
hivedb
mysql
performance_schema
test
[hadoop@hadoop3 ~]$
列出MySQL中的某个数据库有哪些数据表:
[hadoop@hadoop3 ~]$ sqoop list-tables \
> --connect jdbc:mysql://hadoop1:3306/mysql \
> --username root \
> --password root
Sqoop的数据导入
从RDBMS导入到HDFS中

下面的命令用于从MySQL数据库服务器中的emp表导入HDFS:

bin/sqoop import   \
--connect jdbc:mysql://hdp-node-01:3306/test   \
--username root  \
--password root   \
--table emp   \
--m 1  
导入到HDFS指定目录
bin/sqoop import \
--connect jdbc:mysql://hdp-node-01:3306/test \
--username root \
--password root \
--target-dir /queryresult \指定目录
--fields-terminated-by ‘\001’ \指定分隔符
--table emp 
--split-by id
--m 1
RDBMS到HIVE
bin/sqoop import 
--connect jdbc:mysql://hdp-node-01:3306/test 
--username root 
--password root 
--table emp 
--hive-import  \增加导入hive声明
--split-by id  
--m 1
导入表数据子集
bin/sqoop import \
--connect jdbc:mysql://hdp-node-01:3306/test \
--username root \
--password root \
--where "city ='sec-bad'" \子集条件声明
--target-dir /wherequery \
--table emp_add \
 --m 1

Sqoop数据导出

数据是在HDFS 中“EMP/”目录的emp_data文件中。所述emp_data如下:
1201, gopal,     manager, 50000, TP
1202, manisha,   preader, 50000, TP
1203, kalil,     php dev, 30000, AC
1204, prasanth,  php dev, 30000, AC
1205, kranthi,   admin,   20000, TP
1206, satish p,  grp des, 20000, GR


#### 首先需要手动创建mysql中的目标表
$ mysql
mysql> USE db;
mysql> CREATE TABLE employee (
   id INT NOT NULL PRIMARY KEY,
   name VARCHAR(20),
   deg VARCHAR(20),
   salary INT,
   dept VARCHAR(10));


然后执行导出命令  
bin/sqoop export \
--connect jdbc:mysql://hdp-node-01:3306/test \
--username root \
--password root \
--table employee \
--export-dir /user/hadoop/emp/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章