(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导入: