sqoop 安装和基本操作

1 概述

sqoopapache旗下一款Hadoop和关系数据库服务器之间传送数据”的工具。

导入数据MySQLOracle导入数据到HadoopHDFSHIVEHBASE等数据存储系统;

导出数据:Hadoop的文件系统中导出数据到关系数据库

2 工作机制

将导入或导出命令翻译成mapreduce程序来实现

在翻译出的mapreduce中主要是对inputformatoutputformat进行定制

sqoop安装

1、下载并解压

最新版下载地址http://ftp.wayne.edu/apache/sqoop/1.4.6/

修改配置文件  conf 下面的的   sqoop-env.sh 文件

配置  haddop   hive    hbases环境变量


3、加入mysqljdbc驱动包

把mysql 驱动报放入 sqoop 的bin 下面  

cp  /home/hadoop/mysql-connector-java-5.1.28.jar   $SQOOP_HOME/lib/

安装 就完成了 

启动Sqoop   bin/sqoop


出现这个的原因是因为  我没有配置 hbases, accumulo 的环境变量 

sqoop 的基本操作  为了演示操作   必须创建数据库    测试数据  

drop database if exists userdb;
create database userdb;
use userdb;
drop table if exists emp;
drop table if exists emp_add;
drop table if exists emp_conn;

CREATE TABLE emp(
	id INT NOT NULL,
	name VARCHAR(100),
	deg VARCHAR(100),
	salary BIGINT,
	dept VARCHAR(50)
);

CREATE TABLE emp_add(
	id INT NOT NULL,
	hno VARCHAR(50),
	street VARCHAR(50),
	city VARCHAR(50)
);

CREATE TABLE emp_conn(
	id INT NOT NULL,
	phno VARCHAR(50),
	email VARCHAR(50)
);

insert into emp values(1201,'gopal','manager','50000','TP');
insert into emp values(1202,'manisha','Proof reader','50000','TP');
insert into emp values(1203,'khalil','php dev','30000','AC');
insert into emp values(1204,'prasanth','php dev','30000','AC');
insert into emp values(1205,'kranthi','admin','20000','TP');

insert into emp_add values(1201,'288A','vgiri','jublee');
insert into emp_add values(1202,'108I','aoc','sec-bad');
insert into emp_add values(1203,'144Z','pgutta','hyd');
insert into emp_add values(1204,'78B','old city','sec-bad');
insert into emp_add values(1205,'720X','hitec','sec-bad');

insert into emp_conn values(1201,'2356742','[email protected]');
insert into emp_conn values(1202,'1661663','[email protected]');
insert into emp_conn values(1203,'8887776','[email protected]');
insert into emp_conn values(1204,'9988774','[email protected]');
insert into emp_conn values(1205,'1231231','[email protected]');

4 Sqoop的数据导入

导入工具导入单个表从RDBMSHDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据或者Avrosequence文件二进制数据 

1 语法

下面的语法用于将数据导入HDFS

 sqoop import (generic-args) (import-args) 

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

bin/sqoop import   \
--connect  jdbc:mysql://192.168.111.130:3306/userdb \
--username root  \
--password root   \
--table emp   \
--m 1  
参数说明

   import  导入表

--connect jdbc:mysql://hdp-node-01:3306/test    --username root  --password root   数据库连接

table  emp  表名称

--m 1   设置 mapreducer 的个数

当语句执行完成之后  表被储存在默认的位置 /user/用户名/表名     /user/hadoop/emp

文件中字段默认以  ,  来区分

hadoop fs -cat /user/hadoop/emp/part-m-00000

指定导入的目录  --target-dir <new or exist directory in HDFS>

bin/sqoop import   --connect jdbc:mysql://192.168.111.130:3306/userdb   --username root  --password root   --table emp2  --target-dir /a1/emp   --m 1 

导入关系表到HIVE

bin/sqoop import --connect jdbc:mysql://192.168.111.130:3306/userdb --username root --password root --table emp --hive-import --m 1
导入hive的时候   默认目录中不能 有当前表   应为   sqoop 会先把文件上传倒hdfs 中 在上传到hive 上   的默认库中


导入表数据子集

我们可以导入表的使用Sqoop导入工具,"where"子句的一个子集。它执行在各自的数据库服务器相应的SQL查询,并将结果存储在HDFS的目标目录。

where子句的语法如下。

--where <condition>

下面的命令用来导入emp_add表数据的子集。子集查询检索员工ID和地址,居住城市为:sec-bad

bin/sqoop import \
--connect jdbc:mysql://192.168.111.130:3306/userdb \
--username root \
--password root \
--where "city ='sec-bad'" \
--target-dir /wherequery \
--table emp_add --m 1

按需导入

bin/sqoop import \
--connect  jdbc:mysql://192.168.111.130:3306/userdb \
--username root \
--password root \
--target-dir /a1/wherequery2 \
--query 'select id,name,deg from emp WHERE  id>1203 and $CONDITIONS' \
--split-by id \
--fields-terminated-by '\t' \
--m 1

查看导入是否成功

hadoop fs -cat /wherequery/part-m-*


增量导入

增量导入是仅导入新添加的表中的行的技术。

它需要添加‘incremental’, ‘check-column’, ‘last-value’选项来执行增量导入。

下面的语法用于Sqoop导入命令增量选项。

--incremental <mode>
--check-column <column name>
--last value <last check column value>
假设字段对数据库字段添加了
bin/sqoop import \
--connect  jdbc:mysql://192.168.111.130:3306/userdb \
--username root \
--password root \
--table emp --m 1 \
--incremental append \
--check-column id \
--last-value 1208  上一次导入的id的最大值

5 Sqoop的数据导出

将数据从HDFS导出到RDBMS数据库

导出前,目标表必须存在于目标数据库中。

 默认操作是从将文件中的数据使用INSERT语句插入到表中

 更新模式是生成UPDATE语句更新表数据

语法
bin/sqoop export (generic-args) (export-args) 
先在数据库中创建一个表 准备接受导出数据  以导出emp 为例

CREATE TABLE employee ( 
   id INT NOT NULL PRIMARY KEY, 
   name VARCHAR(20), 
   deg VARCHAR(20),
   salary INT,
   dept VARCHAR(10));

2、然后执行导出命令

bin/sqoop export \
--connect  jdbc:mysql://192.168.111.130:3306/userdb \
--username root \
--password root \
--table employee \
--export-dir /user/hadoop/emp/

查看一下导出是否成功

select * from employee;







 








猜你喜欢

转载自blog.csdn.net/yumingzhu1/article/details/80678525