在 Pyspark 中将 Sqoop 连接到 Hadoop

Posted

技术标签:

【中文标题】在 Pyspark 中将 Sqoop 连接到 Hadoop【英文标题】:Connect Sqoop to Hadoop in Pyspark 【发布时间】:2021-08-04 15:06:37 【问题描述】:

这是我在 Pyspark 上使用的代码。我目前正在尝试将 Sqoop 连接到 HDFS。 我对这一切都很陌生。我不确定要使用哪些库。

from pysqoop.SqoopImport import Sqoop
sqoop = Sqoop(help=True)
code = sqoop.perform_import()


sqoop = Sqoop(fs='hdfs://localhost:8020', table='myTable', target_dir='hdfs://user/amel',
connect='jdbc:mysql://localhost:3306/testDb',
username='Amel', password='Amel@-1998', num_mappers=2,
bindir='/usr/local/hadoop/sqoop/bin')

sqoop.perform_import()

这是错误

/home/amel/PycharmProjects/pythonProject/venv/bin/python /home/amel/PycharmProjects/pythonProject/Hello.py
sqoop import None  --help 
name 'run' is not defined
sqoop import None  -fs hdfs://localhost:8020 --table myTable --target-dir hdfs://user/amel --connect jdbc:mysql://localhost:3306/testDb --username Amel --password Amel@-1998 --num-mappers 2 --bindir /usr/local/hadoop/sqoop/bin --help 
name 'run' is not defined

Process finished with exit code 0

【问题讨论】:

【参考方案1】:

通知

Sqoop 作为 Apache 项目已退役,Spark 可以替代 Sqoop。你不应该一起使用它们。


在任何情况下,pysqoop 库似乎已损坏,并且似乎在一年多的时间里没有人提交 PR 来修复它(尽管我做到了)。它显然没有单元测试来捕获该错误,因此我不建议以当前形式使用它。


这是从 Spark 文档中复制的部分示例,用于读取 JDBC 数据库并将其作为 Parquet 写入 HDFS

import pyspark
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("SqoopReplacement").getOrCreate()

jdbcDF = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:mysql://localhost:3306") \
    .option("dbtable", "myTable") \
    .option("user", "Amel") \
    .option("password", "Amel@-1998") \
    .load()

# Saving data to HDFS as Parquet
jdbcDF.write.parquet("hdfs://some/path")

【讨论】:

先生,这是否意味着我不能再使用 sqoop 了?好的,我将实现此代码并让您知道。谢谢你的帮助,我正在做我的论文项目。 当有其他适用于同一用例的有效选项时,不清楚为什么需要使用 sqoop 二进制文件

以上是关于在 Pyspark 中将 Sqoop 连接到 Hadoop的主要内容,如果未能解决你的问题,请参考以下文章

Sqoop 连接到 SQL Server

通过 Hortonworks Sandbox 上的 sqoop 连接到 Oracle

无法在 Linux 上通过 JDBC 将 Sqoop 连接到 Oracle TimesTen

Sqoop 和 hive 连接到 sqlserver

Sqoop - 尝试连接到 Oracle DB 服务器时出现 java.lang.NullPointerException

使用 py4j 在 java/python 项目中将 Log4j 连接到 ipython notebook stderr