安装配置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 命令。

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

过程截图:

...

...

...

....

....

....

...

...

...

...

...

...

...

...

...

相关推荐
Francek Chen1 天前
【大数据处理与分析】实验5:MapReduce初级编程实践
大数据·hadoop·分布式·mapreduce
牛奶咖啡135 天前
大数据Hadoop运维应用实践——HIVE与Hadoop实现整合_Hive的配置安装与使用
大数据·hive·hive的配置与安装·metastore服务的配置·hiveserver2服务配置·hive的常用sql操作·beeline的使用
Zhu7586 天前
在k8s集群环境部署高可用的Apache Hadoop3.1.1定制版集群
hadoop·kubernetes
还有你Y7 天前
软件工程架构
hadoop·架构·软件工程
向夏威夷 梦断明暄7 天前
基于Tez引擎的 Hive SQL 性能优化
hive·sql·性能优化
曾阿伦11 天前
Windows 下运行 Hadoop 并部署到 AWS EMR 指南
hadoop·windows·aws
极光代码工作室12 天前
基于Spark的日志监控与分析平台
大数据·hadoop·python·spark·数据可视化
liuxiaowei313 天前
Winform+WPF双框架实战:喷涂工艺SCADA上位机从0到1搭建(附采集监控源码+车间踩坑实录)
大数据·hadoop·wpf
humbinal14 天前
同时支持 gui & cli 的 parquet 文件查看工具,高性能小清新!
hive·python·rust·spark·开源·github·parquet
hkNaruto16 天前
【大数据】《传统Hadoop大数据技术入门:补充与进阶——从数据格式到智能决策的问答实录》
大数据·hadoop·分布式