Sqoop笔记整理

  (toc)

  <人力资源/>   

Sqoop笔记整理

  

概述

  
 <代码> SQOOP——数据搬用工
  可以将外部数据迁移到hdfs目录或者蜂巢表或者hbase表 
  

进口原理

  
 <代码>从传统数据库获取元数据信息(模式、表、字段、字段类型),把导入功能转换为只有地图的Mapreduce作业,
  在mapreduce中有很多地图,每个地图读一片数据,进而并行的完成数据的拷贝。 
  

出口原理

  
 <代码>获取导出表的模式,元信息,和Hadoop中的字段匹配;多个地图只作业同时运行,完成hdfs中数据导出到关系型数据库中。 
  

Sqoop安装

  
 <代码>下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/sqoop/1.4.7/下载之后进行解压:
  焦油-zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar。广州- c/home/uplooking/app
  重命名:
  (uplooking@uplooking01 ~) mv app/sqoop-1.4.7.bin__hadoop-2.6.0/app/sqoop美元
  配置SQOOP_HOME到环境变量中
  出口SQOOP_HOME=/home/uplooking/app/sqoop
  导出路径=$路径:SQOOP_HOME美元
  配置SQOOP_HOME/conf/sqoop-env.sh美元
  出口HADOOP_COMMON_HOME=/home/uplooking/app/hadoop
  出口HADOOP_MAPRED_HOME=/home/uplooking/app/hadoop
  出口HBASE_HOME=/home/uplooking/app/hbase
  出口HIVE_HOME=/home/uplooking/app/蜂巢
  出口ZOOCFGDIR=/home/uplooking/app/管理员/conf
  
  下面这个在1.4.7中需要配置,否则在执行数据导入到蜂巢时会报的错
  出口HIVE_CONF_DIR=/home/conf/uplooking/app/蜂巢
  注意:
  1、数据库驱动:
  在执行sqoop命里的受需要拷贝相关数据库驱动jar包到SQOOP_HOME美元/lib目录下,例如mysql需要mysql-connector-java-5.1.32-bin.jar以上版本支持。
  2,JDK版本
  1.7 JDK版本最好以上。
  3、蜂巢的核心包拷贝(这个在1.4.7中需要配置,否则在执行数据导入到蜂巢时会报错)
  将$ HIVE_HOME/lib/hive-exec.jar拷贝到SQOOP_HOME美元/lib目录下,不然会报
  18/03/15 15:50:54错误蜂巢。HiveConfig:无法加载org.apache.hadoop.hive.conf.HiveConf。确保正确地设置HIVE_CONF_DIR。
  18/03/15 15:50:54错误的工具。ImportTool:导入失败:io。IOException: . lang。ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf  
  

数据导入进口

  

由mysql导入数据到HDFS

  

人表中的数据:

  
 <代码> +——+ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
  | | id名称| | |时代高度
  + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
  | 1 |小甜甜| 168 | |
  19 | | 2 |小丹丹| 167 |
  | 3 |大神| 25 | 181 |
  | | 4 |团长| 158 |
  | 5 |记者| 22 | 169 |
  + - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + +  
  

数据导入:

  
 <代码> sqoop进口——jdbc连接:mysql://192.168.43.116:3306/测试——用户名根——密码根表人
  将msyql数据测试中的表,导入到hdfs目录,该目录在/user/用户/人下面,其中人们为导入的表名, 
  

这是sqoop导入到的默认目录,如果要想导入到指定的目录,添加一个选项——target-dir:

  
 <代码> sqoop进口——jdbc连接:mysql://192.168.43.116:3306/测试——用户名根——密码根表人——target-dir/输出/sqoop/ 
  

因为默认执行sqoop会有4个maptasks任务,为了满足业务的需要,可以进行修改,只需要在命令后面加一个选项- m:

  
 <代码> sqoop进口——jdbc连接:mysql://192.168.43.116:3306/测试——用户名根——密码根表人——target-dir/输出/sqoop/- m 2  
  

执行的过程中,如果输出目录已经存在,报的错,要想输出到该目录使用选项——delete-target-dir:

  
 <代码> sqoop进口——jdbc连接:mysql://192.168.43.116:3306/测试——用户名根——密码根表人——target-dir/输出/sqoop/- m 2——delete-target-dir  
  

如果想在原来的基础之上追加新的数据,只需要添加一个选项,附加,但是注意,——附加和delete-target-dir不能同时存在:

  
 <代码> sqoop进口——jdbc连接:mysql://192.168.43.116:3306/测试——用户名根——密码根表人——target-dir/输出/sqoop/- m 2——添加 
  

条件导入:

  
 <代码> sqoop进口——jdbc连接:mysql://192.168.43.116:3306/测试——用户名根密码根表的人——target-dir hdfs://ns1/输入/sqoop/人——附加- m 1——“年龄& lt;20和高度比;167” 
  

通过sql导入:

  

Sqoop笔记整理