Sqoop数据导入与导出

简单介绍

在导入开始之前,Sqoop使用JDBC来检查将要导入的表。他检索出表中所有的列以及列的SQL数据类型。这些SQL类型(varchar、integer)被映射到Java数据类型(String、Integer等),在MapReduce应用中将使用这些对应的Java类型来保存字段的值。Sqoop的代码生成器使用这些信息来创建对应表的类,用于保存从表中抽取的记录。Sqoop启动的MapReduce作业用到一个InputFormat,他可以通过JDBC从一个数据库表中读取部分内容。
Hadoop提供的DataDriverDB InputFormat能为查询结果进行划分传给指定个数的map任务。为了获取更好的导入性能,查询会根据一个“划分列”来进行划分。Sqoop会选择一个合适的列作为划分列(通常是表的主键)。在生成反序列化代码和配置InputFormat之后,Sqoop将作业发送到MapReduce集群。Map任务将执行查询并将ResultSet中的数据反序列化到生成类的实例,这些数据要么直接保存在SequenceFile文件中,要么在写到HDFS之前被转换成分割的文本。Sqoop不需要每次都导入整张表,用户也可以在查询中加入到where子句,以此来限定需要导入的记录。

任务:

1.练习使用Sqoop将数据在Mysql与HDFS之间的导入导出。
2.练习使用Sqoop将数据从Mysql中导入到HBase中。
3.练习使用Sqoop将数据在Mysql与Hive之间的导入导出。

步骤:

1.启动hadoop

jps  
cd /apps/hadoop/sbin  
./start-all.sh  

2.在Linux本地新建/data/sqoop2目录。

mkdir -p /data/sqoop2

切换到/data/sqoop2目录下,下载文件。
3.开启mysql服务。
sudo service mysql start
mysql -u root -p 123
4.在Mysql中创建数据库mydb,并使用mydb数据库。

create database mydb;  
use mydb; 

在mydb数据库中创建表record。

create table record  
(  
  id varchar(100),  
 buyer_id varchar(100),  
  dt varchar(100),  
  ip varchar(100),  
  opt_type varchar(100)  
); 

5.将Linux本地/data/sqoop2/buyer_log里的内容,导入的mydb数据库record表中。

load data infile '/data/sqoop2/buyer_log' into table record fields terminated by '\t';

查看record表中内容。

select * from record; 

6,另开一个窗口,使用Sqoop查看Mysql中的数据库。此步目的是检查Sqoop以及Mysql是否可以正常使用。

sqoop list-databases \  
--connect jdbc:mysql://localhost:3306/ \  
--username root \  
--password 123

使用Sqoop查看Mysql中的表 (在jdbc连接字符串中添加了数据库的名称。用于直接访问数据库实例)。

sqoop list-tables \  
--connect jdbc:mysql://localhost:3306/mydb \  
--username root \  
--password 123

使用Sqoop将Mysql中的数据导入到HDFS

1.使用Sqoop将Mysql中mydb数据库record表里的数据导入到HDFS/mysqoop2目录里。(HDFS上的/mysqoop2目录,不需要提前创建)。

扫描二维码关注公众号,回复: 9415696 查看本文章
1.sqoop import \  
2.--connect jdbc:mysql://localhost:3306/mydb \  
3.--username root \  
4.--password strongs \  
5.--table record -m 1 \  
6.--target-dir /mysqoop2  

导入过程:

1.zhangyu@d8690154f9f9:/$ sqoop import \  
2.> --connect jdbc:mysql://localhost:3306/mydb \  
3.> --username root \  
4.> --password strongs \  
5.> --table record -m 1 \  
6.> --target-dir /mysqoop2  

2.查看HDFS上/mysqoop2目录下的文件内容。

1.hadoop fs -cat /mysqoop2/part-m-00000  

将HDFS中数据存入到Mysql数据库中

1.在Mysql窗口,mydb数据库下,新建一张表recordfromhdfs,表结构与record表相同。将HDFS上/mysqoop2/part-m-00000里的数据,导入到Mysql中的recordfromhdfs表中。
连接Mysql,并创建表recordfromhdfs。

1.use mydb  
2.create table recordfromhdfs like record;  

2.在另一个窗口,开始导数据。

1.sqoop export \  
2.--connect jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8 \  
3.--username root \  
4.--password strongs \  
5.--table recordfromhdfs \  
6.--export-dir hdfs://localhost:9000/mysqoop2/part-m-00000  

注意connect后面 连接字符串要带上编码方式characterEncoding=UTF-8,否则中文数据会有乱码的情况产生。
3.查看Mysql中recordfromhdfs表中内容:

select * from recordfromhdfs; 

将Mysql中数据导入到HBase中

1.使用Sqoop将Mysql中mydb数据库record表中的数据,导入到HBase中hbaserecord表中,同时以dt为rowkey。
输入jps查看HBase相关进程是否已启动,若未启动,则需切换到/apps/hbase/bin目录下,启动HBase。

1.cd /apps/hbase/bin  
2../start-hbase.sh  

2.在Linux命令行中,输入hbase shell,进入HBase命令行模式。

hbase shell

3.开始导数据。


1.sqoop import \
2.–connect jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8 \
3.–username root \
4.–password strongs \
5.–table record \
6.–hbase-create-table \
7.–hbase-table hbaserecord \
8.–column-family mycf \
9.–hbase-row-key dt -m 1


4.查看HBase中,都有哪些表。

list  

5.查看HBase表hbaserecord里的内容。

scan 'hbaserecord'  

使用Sqoop将HBase中数据导出到Mysql中

暂时无法直接接口实现,需要借助其他途径去处理,比如:HBase=>HDFS=>Mysql或 HDFS=>Hive=>Mysql
使用Sqoop将Mysql中record表中的数据,导入到Hive中的hiverecord表中。
使用vim编辑用户环境变量

vim ~/.bashrc  

将以下内容追加到#hadoop下:

1.#hadoop  
2.export HADOOP_HOME=/apps/hadoop  
3.export PATH=$HADOOP_HOME/bin:$PATH  
4.export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/apps/hive/lib/*  

执行source,使用户环境变量生效。

source /etc/profile  

1.开启Hive,在Hive中创建hiverecord表,包含(id,buyer_id,dt,ip,opt_type)五个字段,字符类型均为varchar(100),分隔符为‘,’

hive  
create table hiverecord (id varchar(100),buyer_id varchar(100),dt varchar(100), ip varchar(100), opt_type varchar(100))  
row format delimited fields terminated by ','  stored as textfile;

在linux命令行下,使用Sqoop将Mysql中record表导入Hive中。

1.sqoop import \  
2.--connect jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8 \  
3.--username root \  
4.--password strongs \  
5.--table record \  
6.--hive-import \  
7.--hive-table hiverecord \  
8.--fields-terminated-by ',' -m 1  

在hive下,查看Hive中hiverecord表。

select * from hiverecord;  

使用Sqoop将Hive表hiverecord表中的数据,导出到Mysql中的recordfromhive表中。

1.首先在Mysql中创建表recordfromhive。

create table recordfromhive like record;  

2.在linux命令行下,使用sqoop开始导数据。

1.sqoop export \  
2.--connect jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8 \  
3.--username root \  
4.--password strongs \  
5.--table recordfromhive \  
6.--export-dir /user/hive/warehouse/hiverecord/part-m-00000 \  
7.--input-fields-terminated-by ','  

3.导入完成,查看Mysql中recordfromhive表。

select * from recordfromhive;  
发布了32 篇原创文章 · 获赞 28 · 访问量 1388

猜你喜欢

转载自blog.csdn.net/Maqiuqiu520/article/details/103019830