用sqoop导入数据到HIVE和HDFS中

一:sqoop数据的导入

   1.使用sqoop将:mysql中的数据导入到HDFS(直接导入)

 Step1、确定Mysql服务的正常开启 service mysql status

                            Step2、在Mysql中创建一张表

                                 mysql> create database company

                                 mysql> create table staff(

                                  id int(4) primary key not null auto_increment,

                                  name varchar(255) not null,

                                  sex varchar(255) not null);

                                  mysql> insert into staff(name, sex) values('Thomas', 'Male');

                           Step3、使用Sqoop导入数据到HDFS      

               1. 将mysql数据全部导入hdfs

                           bin/sqoop import \

                            --connect jdbc:mysql://hadoop102:3306/company \

                            --username root \

                            --password 123456 \

                            --table staff \

                            --target-dir /user/company \

                            --delete-target-dir \

                            --num-mappers 1 \      =   --m 1

                            --fields-terminated-by "\t"

               //如果到这里结束,则默认存放在hdfs上路径为:/user/robot/staff/ ,默认数据用,逗号隔开

              2.查询mysql总部分数据导入hdfs中

                             $ bin/sqoop import

                             --connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company

                             --username root

                             --password 123456

                             --target-dir /user/company

                             --delete-target-dir

                             --num-mappers 1

                             --fields-terminated-by "\t"

                             --query 'select name,sex from staff where id >= 2 and $CONDITIONS;'

               3.也算查询导入,导入指定列    

                             $ bin/sqoop import

                             --connect jdbc:mysql://hadoop-senior01.robot.com:3306/company

                             --username root

                             --password 123456

                             --target-dir /user/company

                             --delete-target-dir

                             --num-mappers 1

                             --fields-terminated-by "\t"

                             --columns id, sex

                             --table staff

                4.细化筛选查询导入

                             $ bin/sqoop import

                             --connect jdbc:mysql://hadoop-senior01.robot.com:3306/company

                             --username root

                             --password 123456

                             --target-dir /user/company

                             --delete-target-dir

                             --num-mappers 1

                             --fields-terminated-by "\t"

                             --table staff

                             --where "id=3"                                   

2使用sqoop将:mysql中的数据导入到HIVE中                         

   实际上先导入到hdfs中,然后在hive中创建一个表,不需要提前创建表,然后把数据源Load进表中。也可以提前创建表,导入到指定的表中

                           bin/sqoop import\

                           --connect jdbc:mysql://hadoop102:3306/company \

                           --username root\

                           --password 123456\

                           --table staff\

                           --target-dir /user/company \

                           --hive-import\

                           --m 1\

                           --fields-terminated-by "\t"

                            --hive-table company.staff_hive(针对提前创建表,把数据导入的指定表staff_hive中的,staff_hive是否创建无所谓。)

                           --hive-overwrite

                   过程详解:

                      1.底层的mapreduce先将文件上传到hdfs对应的目录,/user/company/下(在执行期间可以在这个目录下看到上传的文件)

                      2.然后hive在根据数据源创建对应的表

                      3.将hdfs的数据源导入load进hive的表中。(这时hdfs上的文件因为导入到hive表中,而没有了。新的文件在hive/warehouse目录下)

                       4.用bin/hive  select * from company.staff可以查看数据,或者在user/hive/warehouse目录下查看。

二: Sqoop的数据导出

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

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

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

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

           1.首先数据库中根据hdfs表中的属性建立空表

           2.然后执行导出命令

           3.验证表mysql命令行。

           举例:

                 0.数据是在HDFS 中“EMP/”目录的emp_data文件中。

                 1.根据hdfs中属性建表

                   mysql> USE test;

                   mysql> 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://hadoop102/test\

   --username root \

   --password root \

   --table employee \

   --export-dir /user/hadoop/emp/

3,在mysql里检查:mysql>select * from employee;

                   

:sqoop对应的脚本的文件是***.opt文件

      使用opt文件打包sqoop命令,然后执行 (sqoop脚本命令参数必须分行

                        Step1、创建一个.opt文件

                        Step2、编写sqoop脚本

                            export

                            --connect

                            jdbc:mysql://hadoop-senior01.robot.com:3306/company

                            --username

                            root

                            --password

                            123456

                            --table

                            staff_mysql

                            --num-mappers

                            1

                            --export-dir

                            /user/hive/warehouse/company.db/staff_hive

                            --input-fields-terminated-by

                            "\t"

                        Step3、执行该脚本

                            $ bin/sqoop --options-file opt/job_hffs2rdbms.opt

--------------------- 本文来自 alirobot 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_26442553/article/details/78741008?utm_source=copy

猜你喜欢

转载自blog.csdn.net/M_Jack/article/details/82971528
今日推荐