1、sqoop
flume数据采集 采集日志数据
sqoop数据迁移 hdfs->mysql azkaban任务调度 flume->hdfs->shell->hive->sql->BIsqoop数据迁移=mapreduce
处理离线数据 整个过程就是数据导入处理导出过程 直接使用mapsqoop作用:简化开发
mysql->hdfs mapreduce sqoop!2、概述:
Apache Sqoop(TM)是一种工具,用于在Apache Hadoop和结构化数据存储(如关
系数据库)之间高效传输批量数据 。数据迁移! Sqoop于2012年3月成功从孵化器毕业,现在是一个顶级Apache项目: 更多信息3、sqoop安装部署
1)下载
2)上传
3)解压
4)重命名
mv sqoop-env-template.sh sqoop-env.sh5)添加配置信息
export HADOOP_COMMON_HOME=/root/hd/hadoop-2.8.4 export HADOOP_MAPRED_HOME=/root/hd/hadoop-2.8.4 export HIVE_HOME=/root/hd/hive export ZOOCFGDIR=/root/hd/zookeeper-3.4.10/conf6)启动查看版本号
bin/sqoop version4、sqoop的import导入
import导入:mysql->hdfs
export导出:hdfs->mysql mysql->hdfs操作: 1)导入mysql驱动到sqoop/lib下 2)命令操作 mysql> create database sqoop; mysql> use sqoop; mysql> create table user(id int primary key auto_increment,name varchar(50),addr varchar(300));[root@hsiehchou121 sqoop]# bin/sqoop import \
> --connect jdbc:mysql://hsiehchou121:3306/sqoop \
> --username root \
> --password root \
> --table user \
> --target-dir /sqoop/datas \
> --num-mappers 1 \
> --fields-terminated-by "\t"
注意:如果显示mysql的访问权限问题,需要设置mysql的用户权限:所在库 mysql库的user表
update user set host=’%’ where host=’localhost’;
delete from user where Host=’127.0.0.1’; delete from user where Host=’hsiehchou121’; delete from user where Host=’::1’; flush privileges;使用query对数据进行过滤
[root@hsiehchou121 sqoop]# bin/sqoop import \
> --connect jdbc:mysql://hsiehchou121:3306/sqoop \
> --username root \
> --password root \
> --target-dir /sqoop/selectimport \
> --num-mappers 1 \
> --fields-terminated-by "\t" \
> --query 'select * from user where id<=1 and $CONDITIONS'
直接过滤字段
[root@hsiehchou121 sqoop]# bin/sqoop import \
> --username root \
> --password root \
> --connect jdbc:mysql://hsiehchou121:3306/sqoop \
> --target-dir /sqoop/selectimport1 \
> --num-mappers 1 \
> --table user \
> --columns addr
5、mysql导入到hive
在~/.bash_profile里面增加下面配置
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/root/hd/hive/lib/*
export HADOOP_USER_HOME=root
[root@hsiehchou121 sqoop]# bin/sqoop import \
> --connect jdbc:mysql://hsiehchou121:3306/sqoop \
> --username root \
> --password root \
> --table user \
> --num-mappers 1 \
> --hive-import \
> --fields-terminated-by "\t" \
> --hive-overwrite \
> --hive-table user_sqoop
6、sqoop的export命令
hive->mysql
hive导出到mysql 首先清空mysql里面的user:truncate table user;[root@hsiehchou121 sqoop]# bin/sqoop export \
> --connect jdbc:mysql://hsiehchou121:3306/sqoop \
> --username root \
> --password root \
> --table user \
> --num-mappers 1 \
> --export-dir /user/hive/warehouse/user_sqoop \
> --input-fields-terminated-by "\t"
7、常用参数
import 导入数据到集群
export 从集群导出数据 create-hive-table 创建hive表 import-all-tables 指定关系型数据库所有表到hdfs集群 list-databases 列出所有数据库 list-tables 列出所有数据库表 merge 合并hdfs中的不同目录下的数据 codegen 获取某张表数据生成JavaBean 并打包[root@hsiehchou121 sqoop]# bin/sqoop codegen \
> --connect jdbc:mysql://hsiehchou121:3306/sqoop \
> --username root \
> --password root \
> --table user \
> --bindir /root/sqoopjar/UserBean \
> --class-name UserBean \
> --fields-terminated-by "\t"
[root@hsiehchou121 sqoop]# bin/sqoop list-databases \
> --connect jdbc:mysql://hsiehchou121:3306/ \
> --username root \
> --password root
[root@hsiehchou121 sqoop]# bin/sqoop merge \
> --new-data /testmerge/new/ \
> --onto /testmerge/old/ \
> --target-dir /testmerge/merged table user \
> --jar-file /root/sqoopjar/UserBean/UserBean.jar \
> --class-name UserBean \
> --merge-key id
注意:
merge操作是一个新表替代旧表的操作,如果有冲突id的话新表数据替换旧表数据,如果没有冲突则是新表数据添加到旧表的数据用户画像 merge
身高180 体重70 爱好 ….. 身高180 体重90 爱好….广告大数据 提高销量 广告推送更加精准
工业大数据 flink面试