Sqoop导入导出过程笔记

------------本文笔记整理自《Hadoop海量数据处理:技术详解与项目实战》范东来

**导入导出时出现的问题处理链接:Sqoop安装及相关问题笔记(持续更新)

一、导入过程

1.导入过程图解:

Sqoop导入导出过程笔记_第1张图片

2.导入命令:(两种方式:分步导入和一步导入)

2.1.首先确保集群中的所有节点对MySQL服务器的数据库hive有访问权限

(参看之前整理:导入数据访问MySQL时被拒的处理)

2.2.分步导入:(3步) MySQL表数据 --->  HDFS ---> Hive

1.步骤1:MySQL ---> HDFS
1.1.连接MySQL将hive数据库中的DBS表数据导入到HDFS中
  $ sqoop import --connect jdbc:mysql://master:3306/hive -table DBS -username root -P -m 1
1.2.成功导入后,结果将输出到MapReduce作业输出文件夹中
  :查看在HDFS中创建的DBS的表目录
  $ hadoop fs -ls /user/root/DBS/;
  /user/root/DBS/_SUCCESS
  /user/root/DBS/part-m-00000  --表数据

2.步骤2:在Hive中创建表
2.1.将导入到HDFS中的数据导入到Hive中,执行sqoop创建Hive表命令
  $ sqoop create-hive-table 
    --connect jdbc:mysql://master:3306/hive 
    --table DBS --fields-terminated-by ',' 
    --username root -P
  注:由于Sqoop默认导出格式为CSV(逗号分隔),
      故建表时指定 --fields-terminated-by ','
2.2.执行成功后,查询Hive中的DBS表目录
  $ hadoop fs -ls /user/hive/warehouse/;
  /user/hive/warehouse/dbs    --dbs文件夹下为空,无数据
  或者执行hive查询:
  hive> select * from dbs; (默认default数据库)

3.步骤3:HDFS ---> Hive
3.1.进入Hive导入数据(向表中追加数据)
  hive> load data inpath '/user/root/DBS/part-m-00000' into table dbs; 
3.2.查看数据
  hive> select * from dbs;

<到此,导入成功>

2.3.一步导入:(只是命令只需执行一句,实际仍然为3步) MySQL表数据 --->  HDFS ---> Hive

$ sqoop import 
  --connect jdbc:mysql://master:3306/hive 
  --table DBS 
  --username root -P 
  -m 1 
  --hive-import 
  注:通过加上 --hive-import ,
      Sqoop会根据数据库中的表结构自动生成Hive表结构
  注:此过程中依然会在HDFS中生成MapReduce作业输出/user/root/DBS,
      只是最后在将part-m-00000数据文件移动到Hive目录下后会自动删除。

 

二、导出过程

1.导出过程图解:

Sqoop导入导出过程笔记_第2张图片

2. 导出方式:

2.1.首先需要在MySQL数据库中创建接受数据的表

1.查看Hive导出表的字段描述信息(包括分隔符)
  hive> desc formatted data;
  OK
  id1 int
  id2 int
  ...
  Storage Desc parmas:
        field.delim  ,
  注:如果分隔符显示空,直接查看表数据存储文件
  注:Hive表默认的列分隔符为'\001'
2.创建MySQL数据库中接收数据的表
  mysql> use test;
  Database changed
  mysql> create table data(id1 int, id2 int);
  

2.2.执行导出命令:Hive ---> MySQL

1.执行从Hive导出表到MySQL中
  $ sqoop export 
    --connect jdbc:mysql://master:3306/test 
    --table data
    --export-dir /user/hive/warehouse/test.db/data
    --username root -P
    -m 1
    --fields-terminated-by ','
  注:--fields-terminated-by ',' 是将Hive表data的列分隔符告知sqoop,以便读取
2.导出成功,进入MySQL查看
  mysql> select * from test.data;
  1,2
  2,3
  3,4

 

你可能感兴趣的:(Sqoop)