用sqoop导入数据到HIVE和HDFS中

来源:互联网 发布:linux如何打开pdf文件 编辑:程序博客网 时间:2024/06/08 00:38
一: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中的)
                           --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
         
原创粉丝点击