安装配置sqoop(超详细)

前言

sqoop就是sql-to-hadoop,说通俗点,我们用到最多的就是mysql与hive之间的数据传递,而hive是依靠hadoop运行的,所以要再mysql和hive之间互相传递数据,就必须要安装sqoop

一、准备

我们要准备sqoop的安装包,我们的hadoop版本是3.1.3,匹配的sqoop版本是1.4.6

选择的是 ' sqoop-1.4.6.bin_hadoop-0.23.tar.gz '

网站地址:sqoop下载

二、安装部署

1. 上传到/opt/software目录下

#使用XFTP或者带上传文件功能的shell工具

2. 解压sqoop压缩包到/opt/module目录下

复制代码
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt/module/

3. 改名

#解压完后名字太长,所以方便后续配置,我们改个名字

复制代码
cd /opt/module
mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop-1.4.7

4. 添加环境变量

#环境变量是告诉系统你sqoop的位置的,证明你有这个东西 就可以使用了

复制代码
#进入
vi /etc/profile
# 添加
#SQOOP_HOME
export SQOOP_HOME=/opt/module/sqoop-1.4.7
export PATH=$PATH:$SQOOP_HOME/bin

#ESC :wq保存退出

#刷新环境 使环境生效

复制代码
source /etc/profile

5. 修改sqoop的配置文件

复制代码
#进入
cd $SQOOP_HOME/conf
#复制 Sqoop 环境变量模板文件
##复制可以保留源文件,相当于保存备份
###去掉template是因为有template的文件系统是不看的,等于白配置
cp sqoop-env-template.sh sqoop-env.sh 
#修改
vim sqoop-env.sh
#添加
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
#export HBASE_HOME=$HBASE_HOME
export HIVE_HOME=$HIVE_HOME
export ZOOCFGDIR=$ZOOKEEPER_HOME

#添加的内容取决于你自己安装了什么

##我这个就是没有安装HBase我就没写

##ZOOKEEPER_HOME这个我环境文件里写的是ZK_HOME,一开始以为要用到,后来发现用不到就没管他

补充一点:

拿我的这个举例,我没有配置HBase,所以在后续再用sqoop跑程序的时候会报警告,但是不用管他

6. 拷贝mysql驱动

#为什么要拷贝mysql驱动 前言里解释过了

复制代码
cp /opt/software/mysql-connector-java-5.1.37-bin.jar $SQOOP_HOME/lib

#7. 拷贝 Hive 文件

#主要是跟hive做交互

复制代码
cp hive-3.1.2/lib/hive-common-3.1.2.jar sqoop-1.4.7/lib/

#8. 检验

复制代码
sqoop version

三、项目验证:mysql与hive做交互

#要求:把mysql中的表全量传递到hive中

##全量:一字不差的传递过去

复制代码
sqoop import \
--connect jdbc:mysql://10.2.40.101:3306/smart_school?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--table user_activity01_copy1 \
--direct \
--delete-target-dir \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' \
--hive-import \
--hive-database bigdata_platform \
--create-hive-table \
--hive-table 1_null_1729296718697 \
--num-mappers 1 \
--verbose

SQL解释:

10.2.40.101 是我集群节点ip

smart_school是我mysql的数据库名字

user_activity01_copy1是我做测试用的表名

bigdata_platform是我hive里的数据库名字

因为我加了--create-hive-table这个配置项,所以我不用在hive里手动创建表

1_null_1729296718697是我的hive数据库里表的名字

参数解释:

sqoop import:这是 Sqoop 的导入命令,用于从关系型数据库(如 MySQL)导入数据到 Hadoop(Hive)。

--connect jdbc:mysql://10.2.40.101:3306/smart_school?characterEncoding=UTF-8 :指定连接到 MySQL 数据库的 JDBC URL。这里连接的是 10.2.40.101 上的 smart_school 数据库,端口为 3306,并指定字符编码为 UTF-8

--username root :指定连接数据库时使用的用户名,这里是 root

--password 123456 :指定连接数据库时使用的密码,这里是 123456

--table user_activity01_copy1 :指定要从 MySQL 数据库中导入的表名,这里是 user_activity01_copy1

--direct:使用直接模式进行数据导入。直接模式可以提高导入速度,因为它使用数据库的原生批量加载功能。

--delete-target-dir:如果目标目录已经存在,则在导入前删除该目录。这确保每次导入时都是全新的数据集。

--fields-terminated-by '\t' :指定字段之间的分隔符。这里使用制表符 \t 作为字段分隔符。

--lines-terminated-by '\n' :指定行之间的分隔符。这里使用换行符 \n 作为行分隔符。

--hive-import:启用 Hive 导入。将导入的数据保存到 Hive 中。

--hive-database bigdata_platform :指定要将数据导入的 Hive 数据库名称,这里是 bigdata_platform

--create-hive-table:创建 Hive 表。如果表已经存在,将会被覆盖。

--hive-table 1_null_1729296718697 :指定在 Hive 中创建的表名,这里是 1_null_1729296718697

--num-mappers 1 :指定用于执行导入任务的 Map 任务的数量。这里是 1,表示只有一个 Map 任务。

--verbose 这个参数你也可以不加,这个是我当时有报错解决不了问题,为了获取更详细的日志信息加

在hive节点登录hive能查到

在HDFS上查看10.2.40.102::50070

地址:/user/hive/warehouse/bigdata_platform.db

#因为我搭建的是hadoopha,所以节点二的namenode也可能是active

代码截图:

我在执行这条命令的时候遇到过报错

报错1:java.io.IOException: Cannot run program "mysqldump": error=2, 没有那个文件或目录

#无法找到 mysqldump 工具

  • 原因
    • mysqldump 未安装。
    • mysqldump 不在 PATH 中。
    • 当前用户没有执行 mysqldump 的权限。
  • 解决方法
    • 安装 mysqldump:例如,在 Debian 系统上使用 sapt-get install mysql-client
    • mysqldump 的路径添加到 PATH 环境变量中。
    • 确保当前用户有执行 mysqldump 的权限。
    • 如果使用 --direct 选项,即使 mysqldump 失败,直接模式仍然可以正常工作。

我后续用不到mysqldump,所以加了一个--direct字段

**报错2:**org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /tmp/hadoop-yarn/staging/root/.staging/job_1729300755474_0001. Name node is in safe mode.

#NameNode 处于安全模式

  • 原因:NameNode 处于安全模式,阻止了新的目录创建。
  • 解决方法
    • 等待几秒钟让 NameNode 自动退出安全模式。
    • 手动退出安全模式:hdfs dfsadmin -safemode leave
    • 确认 Hadoop 配置正确,并且所有节点都正常运行。
    • 重新运行 Sqoop 命令。

我的解决办法就是直接关闭就行,这个原因的造成就是,短时间内多次报错,浪费资源过头了

过程截图:

...

...

...

....

....

....

...

...

...

...

...

...

...

...

...

相关推荐
K_i13419 小时前
Hadoop 集群自动化运维实战
运维·hadoop·自动化
Q264336502321 小时前
【有源码】基于Python与Spark的火锅店数据可视化分析系统-基于机器学习的火锅店综合竞争力评估与可视化分析-基于用户画像聚类的火锅店市场细分与可视化研究
大数据·hadoop·python·机器学习·数据分析·spark·毕业设计
starfalling10241 天前
【hive】一种高效增量表的实现
hive
顧棟1 天前
【Yarn实战】Yarn 2.9.1滚动升级到3.4.1调研与实践验证
hadoop·yarn
D明明就是我2 天前
Hive 拉链表
数据仓库·hive·hadoop
嘉禾望岗5032 天前
hive join优化和数据倾斜处理
数据仓库·hive·hadoop
yumgpkpm2 天前
华为鲲鹏 Aarch64 环境下多 Oracle 数据库汇聚操作指南 CMP(类 Cloudera CDP 7.3)
大数据·hive·hadoop·elasticsearch·zookeeper·big data·cloudera
忧郁火龙果2 天前
六、Hive的基本使用
数据仓库·hive·hadoop
忧郁火龙果2 天前
五、安装配置hive
数据仓库·hive·hadoop
chad__chang2 天前
dolphinscheduler安装过程
hive·hadoop