《Sqoop 快速上手:安装 + 测试实战》

饭宝  论坛元老 | 2025-4-11 04:28:14 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1645|帖子 1645|积分 4935

推荐原文 见:http://docs.xupengboo.top/bigdata/di/sqoop.html
Sqoop(SQL-to-Hadoop) 是 Apache 开源的工具,专门用于在 Hadoop 生态系统(如 HDFS、Hive、HBase) 和 关系型数据库(如 MySQL、Oracle) 之间高效传输批量数据。专注于关系型数据库 ↔ Hadoop
Apache Sqoop 项目已于 2021 年 6 月停止维护,并被移至 Apache Attic。这意味着官方不再对 Sqoop 举行更新或提供支持。Apache Attic 是 Apache 软件基金会(ASF)设立的一个存储库,专门用于存放那些已停止活泼开辟或维护的项目。
官方地点:https://sqoop.apache.org/
下载地点:https://archive.apache.org/dist/sqoop/
一、安装 Hadoop 客户端

由于 Sqoop 独立安装到一台服务上面,以是需要在独立服务器上安装 Hadoop 的客户端。

  • 配置 /etc/hosts 文件。
  1. 192.168.10.68 vm-01
  2. 192.168.10.69 vm-02
  3. 192.168.10.70 vm-03
复制代码

  • 下载以及安装 Hadoop 客户端。(按照之前 Hadoop 集群安装 章节摆设的集群操作)。
  1. cd /opt
  2. # 选择合适的hadoop版本,要与Hadoop集群匹配
  3. wget https://downloads.apache.org/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz
  4. # 解压
  5. tar -xzvf hadoop-3.2.4.tar.gz
  6. # /usr/local通常被用作本地软件安装目录。
  7. mv hadoop-3.2.4 /usr/local/hadoop
复制代码

  • 配置相关文件:


  • core-site.xml :
  1. <configuration>
  2.     <property>
  3.         <name>fs.defaultFS</name>
  4.         <value>hdfs://vm-01:9000</value> <!-- 这里是主节点的 IP 地址, 此处为 vm-01 的 IP 地址 -->
  5.     </property>
  6. </configuration>
复制代码


  • hdfs-site.xml:
  1. <configuration>
  2.   <property>
  3.     <name>dfs.nameservices</name>
  4.     <value>mycluster</value>
  5.   </property>
  6.   <property>
  7.     <name>dfs.ha.namenodes.mycluster</name>
  8.     <value>nn1</value>
  9.   </property>
  10.   <property>
  11.     <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  12.     <value>vm-01:8020</value>
  13.   </property>
  14. </configuration>
复制代码


  • yarn-site.xml:
  1. <configuration>
  2. <!-- Site specific YARN configuration properties -->
  3.     <!-- YARN ResourceManager 地址 -->
  4.     <property>
  5.         <name>yarn.resourcemanager.address</name>
  6.         <value>vm-01:8032</value>
  7.     </property>
  8. </configuration>
复制代码


  • mapred-site.xml :
  1. <configuration>
  2.   <property>
  3.     <name>mapreduce.framework.name</name>
  4.     <value>yarn</value> <!-- 使用 YARN 作为 MapReduce 框架 -->
  5.   </property>
  6.   <property>
  7.     <name>yarn.app.mapreduce.am.env</name>
  8.     <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
  9.   </property>
  10.   <property>
  11.     <name>mapreduce.map.env</name>
  12.     <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
  13.   </property>
  14.   <property>
  15.     <name>mapreduce.reduce.env</name>
  16.     <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
  17.   </property>
  18. </configuration>
复制代码

  • 实行命令校验:
  1. hadoop fs -ls /  # 应返回远程 HDFS 根目录列表
  2. # 注意:我们并不是要创建一个hadoop子节点,仅仅是个客户端,所以不用启动hadoop的start相关脚本,可通过jps查看。
复制代码
二、Sqoop 摆设

:::tip
留意:选择 Sqoop 的版本需要与所使用的 Hadoop 版本相匹配,以确保两者的兼容性和稳定性。差别版本的 Sqoop 依靠于特定版本的 Hadoop,因此在摆设时需要留意两者的对应关系。
:::
此处,已有的 hadoop 3.2.4,这是使用更稳定的版本: Sqoop 1.4.7。

  • 下载 Sqoop 二进制包
  1. curl -O -L https://archive.apache.org/dist/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
  2. mv sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz /opt
  3. cd /opt
  4. tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
  5. mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop
  6. vi /etc/profile
  7. export SQOOP_HOME=/opt/sqoop
  8. export PATH=$PATH:$SQOOP_HOME/bin
复制代码

  • 配置 Sqoop
  1. # 复制模板配置文件
  2. cp $SQOOP_HOME/conf/sqoop-env-template.sh $SQOOP_HOME/conf/sqoop-env.sh
  3. # 编辑 sqoop-env.sh,设置 Hadoop 路径
  4. vi sqoop-env.sh
  5. # 配置hadoop公共库和mapreduce的库目录
  6. export HADOOP_COMMON_HOME=/usr/local/hadoop
  7. export HADOOP_MAPRED_HOME=/usr/local/hadoop
复制代码

  • 下载驱动(差别的数据库,要给Sqoop差别的依靠驱动包)
  1. cd $SQOOP_HOME/lib/
  2. wget https://jdbc.postgresql.org/download/postgresql-42.7.3.jar
复制代码

  • 基本导入命令,例如:将 PostgreSQL 表中的数据导入到 HDFS 的指定目次
  1. # 测试检查读取表格数据
  2. sqoop eval \
  3.   --driver org.postgresql.Driver \
  4.   --connect jdbc:postgresql://192.168.10.66:5432/postgres \
  5.   --username "root" \
  6.   --password "0818" \
  7.   --query "SELECT * FROM table_name2 LIMIT 1"
  8.   
  9.   
  10. # 强制指定 HDFS 操作用户身份
  11. export HADOOP_USER_NAME=hadoop
  12. sqoop import \
  13.   --verbose \
  14.   --driver org.postgresql.Driver \
  15.   --connect jdbc:postgresql://192.168.10.66:5432/postgres \
  16.   --username "root" \
  17.   --password "0818" \
  18.   --table "table_name2" \
  19.   --target-dir /user/sqoop \
  20.   --delete-target-dir \
  21.   -m 1
复制代码
:::tip java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils 异常修复
  1. # 抛出:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils 异常
  2. # 解决办法:添加 commons-lang-2.6 版本,3版本不支持。
  3. cd $SQOOP_HOME/lib
  4. wget https://repo1.maven.org/maven2/commons-lang/commons-lang/2.6/commons-lang-2.6.jar
复制代码
:::
成功页面 如下:


  • 下载 hadoop 中的文件,查看数据:
  1. # 将导入成功的数据下载下来
  2. $ hdfs dfs -get /user/sqoop /opt/temp/
  3. $ ls
  4. data.csv  sqoop
  5. $ cat part-m-00000 # 数据内容
  6. 1,1,1,1,1
  7. 1,2,3,4,5
  8. 1,1,1,1,1
  9. 1,2,3,4,5
  10. 1,1,1,1,1
  11. 1,2,3,4,5
  12. 1,1,1,1,1
  13. 1,2,3,4,5
复制代码
三、Sqoop 整体流程


  • 生成代码:Sqoop 根据目标数据库表的布局,生成相应的 Java 类,用于序列化和反序列化数据。
  • 编译和打包:生成的 Java 类会被编译并打包成一个可实行的 JAR 文件。
  • 提交作业:Sqoop 将该 JAR 文件作为一个 MapReduce 作业提交给 YARN。
  • 任务实行:YARN 根据集群的资源情况,分配资源并启动 MapReduce 作业的各个任务(Mapper)。每个 Mapper 通过 JDBC 从 MySQL 中读取数据,并将数据写入 HDFS。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表