Sqoop笔记整理
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,[toc]Sqoop笔记整理概述SQOOP ---数据搬用工 可以将外部数据迁移到hdfs目录或者hive表或者hbase表import原理从传统数据库获取元数据信息(schema、tabl
千家信息网最后更新 2025年12月03日Sqoop笔记整理
[toc]
Sqoop笔记整理
概述
SQOOP ---数据搬用工 可以将外部数据迁移到hdfs目录或者hive表或者hbase表import原理
从传统数据库获取元数据信息(schema、table、field、field type),把导入功能转换为只有Map的Mapreduce作业,在mapreduce中有很多map,每个map读一片数据,进而并行的完成数据的拷贝。export原理
获取导出表的schema、meta信息,和Hadoop中的字段match;多个map only作业同时运行,完成hdfs中数据导出到关系型数据库中。Sqoop安装
下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/sqoop/1.4.7/下载之后进行解压: tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /home/uplooking/app重命名: [uplooking@uplooking01 ~]$ mv app/sqoop-1.4.7.bin__hadoop-2.6.0/ app/sqoop配置SQOOP_HOME到环境变量中 export SQOOP_HOME=/home/uplooking/app/sqoop export PATH=$PATH:$SQOOP_HOME配置$SQOOP_HOME/conf/sqoop-env.sh export HADOOP_COMMON_HOME=/home/uplooking/app/hadoop export HADOOP_MAPRED_HOME=/home/uplooking/app/hadoop export HBASE_HOME=/home/uplooking/app/hbase export HIVE_HOME=/home/uplooking/app/hive export ZOOCFGDIR=/home/uplooking/app/zookeeper/conf 下面这个在1.4.7中需要配置,否则在执行数据导入到hive时会报错 export HIVE_CONF_DIR=/home/uplooking/app/hive/conf注意:1、数据库驱动: 在执行sqoop命里的受需要拷贝相关数据库驱动jar包到$SQOOP_HOME/lib目录下,例如mysql需要mysql-connector-java-5.1.32-bin.jar以上版本支持。2、JDK版本 JDK版本最好1.7以上。3、hive的核心包拷贝(这个在1.4.7中需要配置,否则在执行数据导入到hive时会报错) 将$HIVE_HOME/lib/hive-exec.jar拷贝到$SQOOP_HOME/lib目录下,不然会报 18/03/15 15:50:54 ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly. 18/03/15 15:50:54 ERROR tool.ImportTool: Import failed: java.io.IOException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf数据导入import
由mysql导入数据到HDFS
people表中的数据:
+----+-----------+------+--------+| id | name | age | height |+----+-----------+------+--------+| 1 | 小甜甜 | 18 | 168 || 2 | 小丹丹 | 19 | 167 || 3 | 大神 | 25 | 181 || 4 | 团长 | 38 | 158 || 5 | 记者 | 22 | 169 |+----+-----------+------+--------+数据导入:
sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --table people将msyql数据test中的表people,导入到hdfs目录,该目录在/user/用户/people下面,其中people为导入的表名,这是sqoop导入到的默认目录,如果要想导入到指定的目录,添加一个选项--target-dir:
sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --table people --target-dir /output/sqoop/people因为默认执行sqoop会有4个maptasks任务,为了满足业务的需要,可以进行修改,只需要在命令后面加一个选项-m:
sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --table people --target-dir /output/sqoop/people -m 2执行的过程中,如果输出目录已经存在,报错,要想输出到该目录 使用选项--delete-target-dir:
sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --table people --target-dir /output/sqoop/people -m 2 --delete-target-dir如果想在原来的基础之上追加新的数据,只需要添加一个选项--append,但是注意,--append和--delete-target-dir不能同时存在:
sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --table people --target-dir /output/sqoop/people -m 2 --append条件导入:
sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --table people --target-dir hdfs://ns1/input/sqoop/people --append -m 1 --where "age < 20 and height > 167"通过sql导入:
#!/bin/bashSQOOP_HOME=/home/uplooking/app/sqoopsqoop import \--connect jdbc:mysql://192.168.43.116:3306/test \--username root \--password root \--target-dir hdfs://ns1/input/sqoop/people \--query "select id, name, age, height from people where age < 30 and height > 168 and \$CONDITIONS" \--append -m 1 \由mysql导入到hive
sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username 'root' --password 'root' --table people --hive-import -m 1覆盖数据(只覆盖数据,不覆盖表结构)sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username 'root' --password 'root' --table people --hive-import -m 1 --hive-overwrite创建表名sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username 'root' --password 'root' --table people --hive-import -m 1 --hive-table "hpeople" --hive-overwrite导出所有的表到hive中sqoop import-all-tables --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --hive-import --fields-terminated-by "\001" --lines-terminated-by "\n"# 这里指定了行和列的分隔符,因为默认情况下,MySQL导入到hive的数据是以逗号作为分隔符的,# 数据从hive(准确说应该是HDFS)导出到mysql时默认也是以逗号作为列分隔符的,这点尤其需要注意由mysql导入到HBase
sqoop import \--connect jdbc:mysql://192.168.43.116:3306/test \--username 'root' \--password 'root' \--table people \--hbase-create-table \--hbase-row-key id \--hbase-table hpeople \--column-family cf导入Hbase的时候,默认使用主键做key,没有主键使用--split-by,暂时处理不了联合主键,最好现在hbase中建立相关的表结构查看HBase中表的数据:
hbase(main):002:0> scan 'hpeople'ROW COLUMN+CELL 1 column=cf:age, timestamp=1521846328316, value=18 1 column=cf:height, timestamp=1521846328316, value=168.0 1 column=cf:name, timestamp=1521846328316, value=\xE5\xB0\x8F\xE7\x94\x9C\xE7\x94\x9C 2 column=cf:age, timestamp=1521846328096, value=19 2 column=cf:height, timestamp=1521846328096, value=167.0 2 column=cf:name, timestamp=1521846328096, value=\xE5\xB0\x8F\xE4\xB8\xB9\xE4\xB8\xB9 3 column=cf:age, timestamp=1521846329182, value=25 3 column=cf:height, timestamp=1521846329182, value=181.0 3 column=cf:name, timestamp=1521846329182, value=\xE5\xA4\xA7\xE7\xA5\x9E 4 column=cf:age, timestamp=1521846328454, value=38 4 column=cf:height, timestamp=1521846328454, value=158.0 4 column=cf:name, timestamp=1521846328454, value=\xE5\x9B\xA2\xE9\x95\xBF 5 column=cf:age, timestamp=1521846330135, value=22 5 column=cf:height, timestamp=1521846330135, value=169.0 5 column=cf:name, timestamp=1521846330135, value=\xE8\xAE\xB0\xE8\x80\x85 5 row(s) in 0.1620 seconds数据导出export
数据导出到mysql,默认以逗号作为分隔符
从HDFS导出到mysql
导出的时候字段需要一一对应sqoop export \--connect jdbc:mysql://192.168.43.116:3306/test \--username root --password root \--table people \--export-dir hdfs://ns1/input/sqoop/people 中文乱码:sqoop export \--connect "jdbc:mysql://192.168.43.116:3306/test?useUnicode=true&characterEncoding=utf-8" \--username root \--password root \--table people \--export-dir hdfs://ns1/input/sqoop/people插入或更新如果存在就更新,不存在就插入(指的是某一条记录,而不是表本身)sqoop export --connect "jdbc:mysql://192.168.43.116:3306/test?useUnicode=true&characterEncoding=utf-8" \--username root \--password root \--table people--export-dir /export -m 1 \--update-key id \--update-mode allowinsert从Hive导出到mysql
和导入类似 -input-fields-terminated-by解析HDFS上面的数据到数据库时使用参数sqoop export \--connect jdbc:mysql://192.168.43.116:3306/test \--username root \--password root \--table people \--export-dir /user/hive/warehouse/hpeople--input-fields-terminated-by '\001'从HBase导出到mysql
目前没有直接从HBase导出的方法,但是可以先将数据导出到HDFS中(通过Hive和HBase的整合),然后再从HDFS导出到mysql中。
数据
目录
数据库
分隔符
拷贝
配置
版本
逗号
会报
信息
原理
同时
字段
时候
最好
结构
作业
更新
输出
驱动
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
银行软件开发对学历有要求吗
郑州软件开发学校
PC端直播软件开发
云数据库怎么学
永洪bi报表对服务器配置要求
dbisam数据库
济南护理软件开发
海丰手机软件开发
数据库及应用试卷答案
数据库职位调查结论
大逃杀服务器缩写
网络安全选题的特色与创新
安徽奔腾网络技术有限公司
测绘网络安全管理制度
文科能不能学网络安全
常丰网络技术有限公司
武汉学习网络安全简单易学
青州java软件开发公司
要建立一个数据库,首先要
hhoton连接服务器发生错误
阿里云服务器带宽计费方式
数据库远程开发实例
数据库原理何玉洁答案
青少年网络安全监察院
盾灵网络技术有限公司官网
初级软件开发工程师
人间地狱服务器怎么设置
初中生网络安全顺口溜
app小软件开发
廊坊市冀翔网络技术有限公司