此系列文章是《数据蛙三个月就业班》股票数据分析案例的总结,整个案例包括linux、shell、python、hive、pycharm、git、html、css、flask、pyechart、sqoop等的使用,为了让就业班同学能够更好的学习,所以对上面大家有疑问的内容进行了总结。本篇是股票数据分析案例第四篇总结---sqoop初步学习
阅读目录:
- sqoop介绍
- sqoop从mysql抽取数据到hive
- sqoop从hive抽取数据到mysql
一:sqoop介绍
Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。导入图:
二:sqoop从mysql抽取数据到hive
1.把stockdata库stock_basics_data表中数据抽取到hive
2.全量抽取stock_basics_data表中数据
sqoop import \
--hive-import \
--connect "jdbc:mysql://localhost/stockdata?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&dontTrackOpenResources=true&defaultFetchSize=50000&useCursorFetch=true" \
--driver com.mysql.jdbc.Driver \
--username root \ mysql 用户名
--password **** \ mysql密码
--table stock_basics_data \
--columns ts_code,symbol,name,area,industry,fullname,market,exchange,curr_type,list_status,list_date,is_hs \
--fetch-size 50000 \ 每次批量抽取5000条
--hive-table ods.datafrog_test \ hive 中的表名
--hive-drop-import-delims \
--fields-terminated-by '\001' \
--delete-target-dir \ 删除hive 路径
--target-dir /user/hadoop/sqoop/datafrog_test \ 建立hive 路径
-m 1
3.部分抽取stock_basics_data表中数据
export HADOOP_USER_NAME=hdfs
sqoop import \
--hive-import \
--connect "jdbc:mysql://localhost/stockdata?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false" \
--driver com.mysql.jdbc.Driver \
--username root \ mysql 用户名
--password **** \ mysql密码
--query \
"SELECT ts_code,symbol,name,area,industry,fullname,market,exchange,curr_type,list_status,list_date,is_hs from stockdata.stock_basics_data where "'$CONDITIONS'" and name='平安银行'" \ 查询平安银行基本股票数据
--fields-terminated-by '\t' \ '\t'作为字段分隔符
--fetch-size 50000 \ 每次批量抽取5000条
--hive-table ods.datafrog_test \ hive 中的表名
--delete-target-dir \ 删除hive 路径
--target-dir /user/hadoop/sqoop/datafrog_test \ 建立hive 路径
-m 1
三:sqoop从hive抽取数据到mysql
1.从hive 中抽取数据到mysql时候,首先在mysql中建表
表原来是建好了的,就是不重复来建立了,大家一起来看下建表字段
2.开始进行数据抽取
sqoop export \
--connect "jdbc:mysql://localhost/ods?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false" \
--username root \
--password ****** \
--table stock_basics_data \
--export-dir /user/hive/warehouse/ods.db/ods_stock_basics \
--columns ts_code,symbol,name,area,industry,fullname,market,exchanges,curr_type,list_status,list_date,is_hs \
--update-mode allowinsert \
--update-key agent_id \
--fields-terminated-by ',' \
--lines-terminated-by '\n' \
--input-null-string '\\N' \
--input-null-non-string '\\N'
为了演示,我们就先不写入到shell脚本中了,直接复制到linux系统中运行就好了,如下图:
最后我们来看下存储到mysql中的数据
3.参数解释
sqoop export \
--connect "jdbc:mysql://localhost/ods?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false" \ localhost 可以换成自己的mysql数据库ip,ods是mysql数据库名字,其他是固定格式
--username root \ mysql数据库账号
--password ****** \ mysql数据库密码
--table stock_basics_data \ mysql中的表名字
--export-dir /user/hive/warehouse/ods.db/ods_stock_basics \ hive中的表地址,大家改成 /user/hive/warehouse/抽取hive数据库名.db/hive数据表
--columns ts_code,symbol,name,area,industry,fullname,market,exchanges,curr_type,list_status,list_date,is_hs \ 抽取的hive表中的字段
--update-mode allowinsert \ 更新模式,允许插入
--update-key agent_id \ 后面接条件列名,通过该参数,可以将关系数据库中已经存在的数据进行更新操作,类似于关系数据库中的update操作,并且agent_id是mysql表中的主键
--fields-terminated-by ',' \ 字段之间的分隔符
--lines-terminated-by '\n' \ 设定每条记录行之间的分隔符,默认是换行
--input-null-string '\\N' \ string类型的列如果null,替换为指定字符串
--input-null-non-string '\\N' 非string类型的列如果null,替换为指定字符串
四:课后学习资料
1.sqoop参考教程
2.sqoop更新、增量、全量导出
3.sqoop参数