您的位置:首页 > 运维架构

Sqoop数据导入导出

2017-04-21 17:05 295 查看
使用Import命令 :

(A)将mysql中的test数据库中的表person导入到hdfs

        bin/sqoop import --connect jdbc:mysql://192.168.7.112:3306/test --username root --password root --table person

        不指定目的路径的话,会自动到导入到hdfs上当前用户的根目录下面,产生一个文件夹,文件夹的而名称就是表名person

        默认sqoop有4个maptask,所以会生成四个输出文件

        注意:在写jdbc url时候不要使用localhost或者jdbc:mysql///test,这种方式会报错。因为会报The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.的异常

(B)将mysql中的test数据库中的表person导入到hdfs指定的目录下面

        bin/sqoop import --connect jdbc:mysql://192.168.7.112:3306/test --username root --password root --table person --target-dir hdfs://ns1/sqoop/in

        如果target-dir不存在,则会自动创建该目录结构

        目的文件夹如果已经存在,使用上述命令会报错,directory is already exists!解决之道,干掉目的文件夹,或重写写一个目的文件

        删除目的文件夹的option为 --delete-target-dir

        bin/sqoop import --connect jdbc:mysql://192.168.7.112:3306/test --username root --password root --table person --target-dir hdfs://ns1/sqoop/in --delete-target-dir

(C)导入hdfs数据的时候,修改输出的文件个数,也就是MapTask的个数

        默认是4

        修改选项-m N(N为指定的MapTask的个数)

        bin/sqoop import --connect jdbc:mysql://192.168.7.112:3306/test --username root --password root --table person --target-dir hdfs://ns1/sqoop/in --delete-target-dir -m 1

(D)在原有基础上对内容进行追加

        1、使用选项--append

            注意:

                --append and --delete-target-dir不能一块使用

        2、定量增加

                -check-column 'id' -incremental append --last-value 2(导入表中最后两条记录)

            sqoop import --connect jdbc:mysql://192.168.7.112:3306/test --username 'root' --password 'root' --table person --target-dir hdfs://ns1/sqoop/in-1 -m 1 --append -check-column 'id' -incremental append --last-value 2

        3、条件导入

                注意:在使用条件导入的时候,不要有中文,而且将条件使用""括起来

                --where "gender like '%female'"  

                sqoop import --connect jdbc:mysql://192.168.7.112:3306/test --username 'root' --password 'root' --table person --target-dir hdfs://ns1/sqoop/in-1 -m 1 --append --where "gender like '%female'"  

                将person表中gender为female的内容追加到hdfs指定目录下面

        4、使用SQL导入***

            sqoop import --connect jdbc:mysql://192.168.7.112:3306/test --username 'root' --password 'root' --query "select id, name, age, gender from person where age=13 and \$CONDITIONS" --target-dir hdfs://ns1/sqoop/in-1 -m 1 --append  --fields-terminated-by
"," --split-by ","

            在使用SQL导入的时候必须要在where条件中添加$CONDITIONS

(E)导入到Hive中

        在导入到hive的过程中,原表必须要有pk主键

        sqoop import --connect jdbc:mysql://192.168.7.112:3306/test --username 'root' --password 'root' --table htest --hive-import -m 1

        上述命令,会将test中的表htest导入到hive中,如果hive中没有htest,创建相应的表

        导入rdbms中一个数据库下的所有的表

            sqoop import-all-tables --connect jdbc:mysql://192.168.7.112:3306/test --username root --password root --hive-import --fields-terminated-by "\001" --lines-terminated-by "\n"

(F)导入到HBase中

        sqoop import --connect jdbc:mysql://192.168.7.112:3306/test --username 'root' --password 'root' --table person --hbase-create-table --hbase-row-key id --hbase-table htest --column-family cf  

========================================================================

Sqoop的导出Export :

(A)、导入到mysql中,需要先有表

        sqoop export --connect jdbc:mysql://192.168.7.112:3306/test --username root --password root --table test --export-dir /sqoop/in

(B)、中文乱码问题,如果发生乱码在url加上关于utf-8的字符集

        sqoop export --connect "jdbc:mysql://192.168.7.112:3306/test?useUnicode=true&characterEncoding=utf-8"--username root --password root --table test --export-dir /sqoop/in

(C)、从Hive到MySQL

        sqoop export --connect jdbc:mysql://192.168.7.112:3306/test --username root --password root --table test --export-dir /user/hive/warehouse/person --input-fields-terminated-by '\001'

   

        

        

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: