安装配置sqoop(超详细)

news/2024/10/21 16:55:56/

前言

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 命令。

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

过程截图:

...

...

...

....

....

....

...

...

...

...

...

...

...

...

...


http://www.ppmy.cn/news/1540840.html

相关文章

springboot+uinapp基于Android的固定资产借用管理平台

文章目录 前言项目介绍技术介绍功能介绍核心代码数据库参考 系统效果图论文效果图 前言 文章底部名片,获取项目的完整演示视频,免费解答技术疑问 项目介绍 固定资产借用管理平台设计的目的是为用户提供使用申请、故障报修、设备归还、意见反馈等管理方…

大数据-174 Elasticsearch Query DSL - 全文检索 full-text query 匹配、短语、多字段 详细操作

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

【React】useLayoutEffect、useInsertionEffect

useLayoutEffect useLayoutEffect和useEffect有什么区别呢? useEffect的cb,准确来说,是异步调用的,会等主线程任务执行完成,D0M更新,JS执行完成,视图绘制完成,才执行。 useLayout…

【Python】基础--文件处理

在Python中,文件处理涉及打开文件、读取文件内容、写入文件以及关闭文件等操作。以下是有关文件处理的基本知识: 1. 文件的打开 在Python中,可以使用内置的 open() 函数打开文件。open() 函数的基本语法如下: file_object ope…

一文详解AI模型部署及工业落地方式

最近在复盘今年上半年做的一些事情,不管是训练模型、部署模型搭建服务,还是写一些组件代码等,零零散散是有一些产出。 虽然有了一点点成果,但仍觉着缺点什么。作为深度学习****算法工程师,训练模型和部署模型是最基本…

无人机:无线电波控制技术!

一、无线电波控制技术 通过无线电波与无人机上的接收机进行通信。当飞手在遥控器上操作控制杆时,这些动作会被转换为无线电波信号,并发送给无人机上的接收机。接收机接收到信号后,会解读控制杆的位移,并将其转化为数字信号&#…

万家数科:零售业务信息化融合的探索|OceanBase案例

本文作者:马琳,万家数科数据库专家。 万家数科商业数据有限公司,作为华润万家旗下的信息技术企业,专注于零售行业,在为华润万家提供服务的同时,也积极面向市场,为零售商及其生态系统提供全面的核…

股市形势复杂多变,投资者该如何应对?

炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…