Mysql和Hive之间通过Sqoop进行数据同步
文章回顾
理论
大数据框架原理简介
大数据发展历程及技术选型
实践
搭建大数据运行环境之一
搭建大数据运行环境之二
本地MAC环境配置
CPU数和内存大小
查看CPU数
sysctl machdep.cpu
# 核数为4machdep.cpu.core_count: 4 # cpu数量为8个,使用了超线程技术:四核八线程machdep.cpu.thread_count: 8
内存大小
top -l 1 | head -n 10 | grep PhysMem
PhysMem: 16G used (10G wired), 67M unused.
在本地开了3个虚拟机centos服务器
虚拟机服务器配置
服务器1 192.168.84.128 4核4G服务器2 192.168.84.131 1核2G服务器3 192.168.84.132 1核2G
因为服务器1上的按照的软件比较多 所以这样分配核数和内存 可以将大数据环境运行起来
虚拟机软件给一个虚拟机分配核数和内存的方式
通过Sqoop查看Mysql数据库
/usr/local/sqoop/bin/sqoop list-databases --connect jdbc:mysql://hadoop001:3306/?useSSL=false --username root --password 123456
在Hive中创建测试表
创建test表
CREATE TABLE IF NOT EXISTS test (id int,uid int,title string,name string,status int,time timestamp)COMMENT '简介'ROW FORMAT DELIMITEDFIELDS TERMINATED BY "\001"LINES TERMINATED BY "\n"STORED AS TEXTFILE;
创建test_out表
CREATE TABLE IF NOT EXISTS test_out (name string, count int,time date)COMMENT '简介'ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\001'LINES TERMINATED BY '\n'STORED AS TEXTFILE;
hive删除表
使用truncate仅可删除内部表数据,不可删除表结构
truncate table 表名(truncate可删除所有的行,但是不能删除外部表)
使用shell命令删除外部表
hdfs -dfs -rm -r 外部表路径
使用 drop 可删除整个表
drop table 表名
查看hive表
查询hive所有表
hive -e "show databases ;" > databases.txt
cat databases.txtdefault
指定default数据库
./hive -d default
在Mysql中创建测试表
创建test
DROP TABLE IF EXISTS `test`;CREATE TABLE `test` ( `id` int(10) DEFAULT NULL, `uid` int(10) DEFAULT NULL, `title` varchar(100) DEFAULT NULL, `name` varchar(100) DEFAULT NULL, `status` int(10) DEFAULT NULL, `time` timestamp NULL DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入3条测试数据
INSERT INTO `test`.`test`(`id`, `uid`, `title`, `name`, `status`, `time`) VALUES (1, 1, '第一条数据', '平凡人笔记', 1, '2021-01-11 16:30:02');
INSERT INTO `test`.`test`(`id`, `uid`, `title`, `name`, `status`, `time`) VALUES (2, 2, '第二条数据', '孟凡霄', 2, '2021-01-11 16:30:20');
INSERT INTO `test`.`test`(`id`, `uid`, `title`, `name`, `status`, `time`) VALUES (3, 3, '第三条数据', '平凡人', 3, '2021-01-11 16:30:41');
创建test_out
DROP TABLE IF EXISTS `test_out`;CREATE TABLE `test_out` ( `name` varchar(100) DEFAULT NULL, `count` int(10) DEFAULT NULL, `time` date DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Mysql导入Hive
/usr/local/sqoop/bin/sqoop import \--driver com.mysql.jdbc.Driver \--connect jdbc:mysql://hadoop001:3306/test?useSSL=false \--username root \--password 123456 \--table test \--fields-terminated-by '\001' \--lines-terminated-by '\n' \--delete-target-dir \--num-mappers 1 \--hive-import \--hive-database default \--hive-table test \--direct
虽然有报错
ERROR bonecp.BoneCP: Unable to start/stop JMXjava.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
但不影响导入结果
查看hive表
说明从Mysql导入hive成功
增量数据定时导入
mysql test表增加一条测试数据
INSERT INTO `test`.`test`(`id`, `uid`, `title`, `name`, `status`, `time`) VALUES (4, 4, '第四条数据', '笔记', 4, '2021-01-11 16:50:00');
删除指定job
/usr/local/sqoop/bin/sqoop job --delete testJob
添加一个增量更新的job
/usr/local/sqoop/bin/sqoop job --create testJob -- \import \--driver com.mysql.jdbc.Driver \--connect jdbc:mysql://hadoop001:3306/test?useSSL=false \--username root \--password 123456 \--table test \--check-column time \--incremental lastmodified \--last-value '2018-08-09 15:30:29' \--merge-key id \--fields-terminated-by '\001' \--lines-terminated-by '\n' \--num-mappers 1 \--target-dir /user/hive/warehouse/test
执行job
/usr/local/sqoop/bin/sqoop job --exec testJob
查看数据已被更新
查看job
/usr/local/sqoop/bin/sqoop job --show testJob
通常情况可以结合sqoop job和crontab等任务调度工具实现相关业务
Hive导入Hive
cd /usr/local/hive/bin
hive
# 统计后将结果数据加入另一个表INSERT INTO TABLE test_out(name,count,time) SELECT name,count(1),to_date(time) FROM test GROUP BY name,to_date(time);
# 或者
INSERT OVERWRITE TABLE test_outSELECT name,count(1),to_date(time) FROM test GROUP BY name,to_date(time);
查看统计结果
统计成功
Hive导入Mysql
# hive的default库中的test_out表数据导出到mysql的test库test_out表
/usr/local/sqoop/bin/sqoop export \--connect "jdbc:mysql://hadoop001:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai" \--username root \--password 123456 \--input-null-string '\\N' \--input-null-non-string '\\N' \--input-fields-terminated-by '\t' \--table test_out \--hcatalog-database default \--hcatalog-table test_out \-m 1;
导出成功
可能遇到的问题及注意点
hive访问mysql数据库权限问题
服务器1上hive访问mysql如果报错
Access denied for user 'root'@'192.168.84.128' (using password: YES)
mysql需要授权访问者
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.84.128' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges;
在namenode上执行
报错:
RemoteException(org.apache.hadoop.ipc.StandbyException):Operation category READ is not supported in state standby
原因:
服务器1是namenode节点 active 状态服务器2是secondNamenode节点是 standby状态
执行命令要在active的namenode才可以
只有namenode才会有webui 50070端口
服务器1(192.168.84.128)上安装namenode 有50070端口服务器2(192.168.84.131)上安装secondNamenode 有50070端口服务器3(192.168.84.132)上没有安装namenode 没有
后记
接下来研究的方向:
1、hive运行原理2、弄一笔数据走一下搭建好的大数据运行环境3、10亿数据如何分库分表存储Mysql4、10亿数据同步到hive5、flink数据如何求交
Mysql和Hive之间通过Sqoop进行数据同步相关推荐
- 执行sqoop 用shell_Mysql和Hive之间通过Sqoop进行数据同步
文章回顾 理论 大数据框架原理简介 大数据发展历程及技术选型 实践 搭建大数据运行环境之一 搭建大数据运行环境之二 本地MAC环境配置 CPU数和内存大小 查看CPU数 sysctl machdep. ...
- sqoop动态分区导入mysql,使用sqoop import从mysql往hive含分区表中导入数据的一些注意事项...
先看下面这条语句,它实现的功能是将特定日期的数据从mysql表中直接导入hive $ sqoop import \ --connect jdbc:mysql://192.168.xx.xx:3306/ ...
- sqoop import 数据同步到hive的用法
1.sqoop 的通用参数 2.import 的参数 3.第一个同步案例:简单同步 sqoop import --connect jdbc:oracle:thin:@ip:1521/服务名 --use ...
- mysql数据库版本不同_MySQL不同版本数据同步
1.环境准备: 系统环境:CentOS Linux release 7.7.1908 (Core) MySQL环境: 172.16.6.140: Ver 5.0.96-community-log fo ...
- mysql sync es 异步双写_mysql数据同步es方案思考
在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 大体计划 1.双写 矫捷长处:简略. 错误谬误: a.停业代码耦合严重. b.如何保证双写成功 c.同步双写会增加响 ...
- mysql hdfs_MySQL数据库与HDFS的实时数据同步
[IT168 技术]通过Map/Reduce进行批处理递送到Apache Hadoop仍然是中枢环节.,但随着要从"超思维速度"分析方面获取竞争优势的压力递增,因此Hadoop(分 ...
- MySQL主主(双主)数据同步
1. 两台mysql都可以读写,互为主备,默认只是用一台(masterA)负责数据的写入,另一台(masterB)备用: 2. masterA是masterB的主库,masterB又是masterA的 ...
- mysql 替换重复数据库,mysql关联修改,批量修改,数据同步
在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 业务场景: 1.从接口获取数据,根据本地表数据处理接口数据 2.将处理好的数据更新到指定表中 思路: 1.建立临时表 ...
- oracle和redis关联查询,redis与oracle之间如何可以实现数据同步
redis与oracle之间不能进行直接同步,关键还是看你的架构设计是否合适: 1,插入时同步,例如先更新了oracle,再对redis进行更新,这些需要通过代码逻辑实现.设计决定先后顺序. 2,查询 ...
最新文章
- mysql 绑定参数_MySQL 使用 Perl 绑定参数和列
- Vim YouCompleteMe 安装配置
- pat德才论(java)
- android 时间管理app,时间管理app
- POJ2528 线段树+离散化+hash(成段更新)
- SSM-SpringMVC-07:SpringMVC中处理器映射器
- 远程Linux主机安装zsh插件zsh-syntax-highlighting
- Makefile文件试错
- 40年技术发展变革,物联网行业的趋势、现状与挑战
- Java step by step(3): Annotation
- 【小记录】关于dojo中的on事件
- python网络监控程序_Python之利用psutil写一个命令行网速实时监控小程序
- 建议把英语改成选修的计算机老师,中小学“变动”,英语改为副科?老师没意见家长却愁眉不展...
- 人生若如初见,又当如何?
- ES6 数组高频使用方法
- PPP认证原理和实验
- Adobe Illustrator (AI)安装教程 (附安装包下载资源)
- java beanutil 工具类_Apache Commons BeanUtils PropertyUtils工具类操作Java Bean属性
- 植物大战僵尸修改数据
- 跟随器为何要加反馈电阻?