1 Star 0 Fork 0

shampoo6 / cjsf-20dsj1

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
将hive表导出到mysql中.md 3.71 KB
一键复制 编辑 原始数据 按行查看 历史
shampoo6 提交于 2023-05-31 09:35 . update

将hive表导出到mysql中

将 hive 中的表导出到 mysql (测试导出)

hive 中的表要导出到 mysql 需要满足以下几点要求

  1. 确保在分布式系统的每个从节点机上都创建了和 hive 相同的数据库和表
  2. 确保 mysqlhive 的表的数据结构相同
  3. 为了分布式系统中数据能正常导出,需要为每台从节点安装 mysql,因为 sqoop 会执行 mysqlimport 命令

然后我们按步骤执行以下操作

创建数据源

在任意目录下创建要导入 hive 的数据源,例如我的数据源 ~/testdata/test1.txt 内容为:

1,ZhangSan
2,LiSi
3,LaoWang
4,ZhaoLiu
5,QianQi

注意: 为了保证数据被正确读入 hive ,每个字段我们用 , 逗号隔开,使用换行符来解析数据库中的一条数据

在 hive 上创建库和表

进入 hive 终端,然后执行以下操作

# 执行hive命令进入hive终端
hive
# 以下命令是在 hive 终端中执行的
# 创建名为 hive 的数据库
hive> create database hive;
# 切换当前使用的数据库为 hive 库
hive> use hive;
# 创建表 test1,其中第二行代码代表数据字段用 `,` 逗号分隔,第三行代码代表数据用换行符分隔
hive> CREATE TABLE test1 (id INT, name STRING)
    > ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    > LINES TERMINATED BY '\n';
# 导入文本文件到 test1 表中, 此处数据源参数我使用的是绝对路径
hive> LOAD DATA LOCAL INPATH '/home/master/testdata/test1.txt' INTO TABLE test1;
# 查询数据,看是否导入成功
hive> select * from test1;

在 mysql 中创建库和表

进入 mysql 终端,然后执行以下操作

# 进入mysql
mysql -u hive -p
# 创建库
mysql> create database hive;
# 创建表
mysql> CREATE TABLE test1 (
     > id INT,
     > name VARCHAR(255)
     > );

执行 sqoop 导出命令

# 注意执行 sqoop 命令的路径,我这里是添加了 bin 目录的
bin/sqoop export \
--connect jdbc:mysql://localhost:3306/hive \
--username root \
--password 111111 \
--table test1 \
--export-dir /user/hive/warehouse/hive.db/test1 \
# 指定导出的 test1 中字段顺序
--columns "id,name" \
--input-fields-terminated-by '\t' \
--input-lines-terminated-by '\n' \
--input-null-string '\\N' \
--input-null-non-string '\\N' \
# 后面两个参数可以不写
-m 1 \
--direct

将 hive 中的表导出到 mysql (正式导出)

请在所有 slave 主机的 mysql 中创建要导入的表

use hive;

CREATE TABLE result (
id INT,
name VARCHAR(255),
count INT
);

然后执行 sqoop 命令

bin/sqoop export \
--connect jdbc:mysql://localhost:3306/hive \
--username root \
--password 111111 \
--table result \
--export-dir /user/hive/warehouse/hive.db/result \
--columns "id,name,count" \
--input-fields-terminated-by ',' \
--input-lines-terminated-by '\n' \
--input-null-string '\\N' \
--input-null-non-string '\\N'

将 mysql 中的表导出到 hive

mysql 中的表要导入到 hive 需要满足以下几点要求

  1. 远程主机 master 能够访问其他主机的 mysql
  2. 确保 hive 中的库和表与 mysql 中的一致
  3. 确保 hive 表的数据结构与 mysql 一致

修改用户登录主机的权限

若安装 mysql 时已经修改 则此步可以省略

# 切换数据库
use mysql;
# 修改权限
update user set host = '%' where user = 'root';
# 检查
select host,user from user;

修改后需要重启 mysql sudo systemctl restart mysql

执行 sqoop 导入命令

bin/sqoop import \
--connect jdbc:mysql://slave2:3306/hive \
--username hive \
--password 111111 \
--table test1 \
# 指定数据分隔的字段
--split-by id \
--hive-import \
--hive-table hive.test1
1
https://gitee.com/shampoo6/cjsf-20dsj1.git
git@gitee.com:shampoo6/cjsf-20dsj1.git
shampoo6
cjsf-20dsj1
cjsf-20dsj1
master

搜索帮助