zoukankan      html  css  js  c++  java
  • Sqoop(三)将关系型数据库中的数据导入到HDFS(包括hive,hbase中)

    一、说明:

      将关系型数据库中的数据导入到 HDFS(包括 Hive, HBase) 中,如果导入的是 Hive,那么当 Hive 中没有对应表时,则自动创建。

    二、操作

    1、创建一张跟mysql中的im表一样的hive表im:

    sqoop create-hive-table 
    --connect jdbc:mysql://192.168.200.100:3306/yang 
    --username root 
    --password 010209 
    --table im 
    --hive-table im

    过程中报错总结:

    ERROR Could not register mbeans java.security.AccessControlException: access denied 

    ("javax.management.MBeanTrustPermission" "register

    解决方法:

      1、将hive-site.xml复制到${SQOOP_HOME}/conf下

      2、vim $JAVA_HOME/jre/lib/security/java.policy:

        在grant{}内部添加如下内容:

          permission javax.management.MBeanTrustPermission "register";

    Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR 
    解决方法:
      将hive 里面的lib下的hive-exec-**.jar 放到sqoop 的lib 下

    2、将mysql中的数据导入到HDFS

    sqoop import 
    --connect jdbc:mysql://192.168.200.100:3306/yang 
    --username root 
    --password 010209
    --table im 
    -m 1

    3、将mysql中的数据导入到HDFS(按照指定分隔符和路径进行导入)

    sqoop import   
    --connect jdbc:mysql://192.168.200.100:3306/yang 
    --username root  
    --password 010209 
    --table im 
    --target-dir /test/  
    --fields-terminated-by ','  
    -m 1

    4、将mysql中的数据导入到HDFS(带where条件)

    sqoop import   
    --connect jdbc:mysql://192.168.200.100:3306/yang 
    --username root  
    --password 010209 
    --where "name='dccc'" --table im --target-dir /test/ -m 1


    带where条件,查询指定列(相当于select name from im where name="dccc")
    sqoop import   
    --connect jdbc:mysql://192.168.200.100:3306/yang 
    --username root  
    --password 010209 
    --columns "name" --where "name='dccc'" --table im --target-dir /test/ -m 1
    
    

    5、将mysql中的数据导入到HDFS(自定义查询SQL)

    sqoop import   
    --connect jdbc:mysql://192.168.200.100:3306/yang  
    --username root  
    --password 010209 
    --target-dir /test/  
    --query 'select id,name from im where $CONDITIONS ' 
    --split-by  id 
    --fields-terminated-by '	'  
    -m 2

    说明: 

    --split-by:
    1.split-by 根据不同的参数类型有不同的切分方法,如int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来 确定划分几个区域。比如select max(split_by),min(split-by) from得到的max(split-by)和min(split-by)分别为1000和1,而num-mappers(-m)为2的话,则会分成两个区域 (1,500)和(501-1000),同时也会分成2个sql给2个map去进行导入操作,分别为select XXX from table where split-by>=1 and split-by<500和select XXX from table where split-by>=501 and split-by<=1000.最后每个map各自获取各自SQL中的数据进行导入工作。 
    2.当split-by不是int型时出现如上场景中的问题。目前想到的解决办法是:将-m 设置称1,split-by不设置,即只有一个map运行,缺点是不能并行map录入数据。(注意,当-m 设置的值大于1时,split-by必须设置字段) 
    3.split-by即便是int型,若不是连续有规律递增的话,各个map分配的数据是不均衡的,可能会有些map很忙,有些map几乎没有数据处理的情况
    CONDITIONS:
    SQoop Query imports自由查询模式下$CONDITIONS的作用:
        1、必须制定目标文件的位置:--target-dir
        2、必须使用$CONDITIONS关键字
        3、选择使用--split-by分片(分区,结果分成多个小文件)

    6、将mysql中的数据导入到Hive

    sqoop import --connect jdbc:mysql://192.168.200.100:3306/yang --username root --password 010209 --table im --hive-import -m 1

     7、指定分隔符和列分隔符,指定hive-import,指定覆盖导入,指定自动创建Hive表,指定表名,指定删除中间结果数据目录

    sqoop import  
    --connect jdbc:mysql://192.168.200.100:3306/yang 
    --username root  
    --password 010209 
    --table im 
    --fields-terminated-by "	"  
    --lines-terminated-by "
    "  
    --hive-import  
    --hive-overwrite  
    --create-hive-table  
    --delete-target-dir 
    --hive-database  yang 
    --hive-table im
    -m 1

    8、将Mysql数据库中的表数据导入到Hbase(普通导入)

    sqoop import 
    --connect jdbc:mysql://192.168.200.100:3306/yang 
    --username root 
    --password 010209 
    --table im 
    --hbase-table im 
    --column-family cf 
    --hbase-row-key keyid
  • 相关阅读:
    网络流(平面图转对偶图)
    666
    期望总结
    docker-1-简介
    22、整合mybatis
    21、整合Druid数据源
    20、Springboot 与数据访问(JDBC/自动配置)
    19、配置嵌入式servlet容器(下)
    18、配置嵌入式servlet容器(2)
    17、配置嵌入式servlet容器(1)
  • 原文地址:https://www.cnblogs.com/yfb918/p/10855170.html
Copyright © 2011-2022 走看看