标签: sqoop

Apache Spark-SQL与Sqoop基准测试同时将数据从RDBMS传输到hdfs

我正在研究一个用例,我必须将数据从RDBMS传输到HDFS.我们使用sqoop对此案例进行了基准测试,发现我们能够在6-7分钟内传输大约20GB的数据.

当我尝试使用Spark SQL时,性能非常低(1 GB的记录从netezza转移到hdfs需要4分钟).我正在尝试进行一些调整并提高其性能,但不太可能将其调整到sqoop的水平(1分钟内大约3 Gb的数据).

我同意spark主要是一个处理引擎这一事实,但我的主要问题是spark和sqoop都在内部使用JDBC驱动程序,所以为什么性能上有太大差异(或者可能是我遗漏了一些东西).我在这里发布我的代码.

object helloWorld {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("Netezza_Connection").setMaster("local")
    val sc= new SparkContext(conf)
    val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
    sqlContext.read.format("jdbc").option("url","jdbc:netezza://hostname:port/dbname").option("dbtable","POC_TEST").option("user","user").option("password","password").option("driver","org.netezza.Driver").option("numPartitions","14").option("lowerBound","0").option("upperBound","13").option("partitionColumn", "id").option("fetchSize","100000").load().registerTempTable("POC")
    val df2 =sqlContext.sql("select * from POC")
    val partitioner= new org.apache.spark.HashPartitioner(14)
    val rdd=df2.rdd.map(x=>(String.valueOf(x.get(1)),x)).partitionBy(partitioner).values
    rdd.saveAsTextFile("hdfs://Hostname/test")
  }
}
Run Code Online (Sandbox Code Playgroud)

我检查了很多其他帖子,但无法得到sqoop内部工作和调优的明确答案,也没有得到sqoop vs spark sql基准测试.有助于理解这个问题.

hadoop bigdata sqoop apache-spark-sql

10
推荐指数
2
解决办法
8678
查看次数

Sqoop增量导入

需要有关Sqoop增量进口的建议.假设我在第1天有一个策略1的客户,我在第1天在HDFS中导入了这些记录,我在Part Files中看到它们.
在第2天,同一客户添加了策略2,在增量导入sqoop运行之后,我们是否只在部件文件中获得新记录?在这种情况下,如何使用Sqoop获取旧的和增量的附加/最后修改记录?

sqoop

9
推荐指数
2
解决办法
5万
查看次数

Sqoop:在映射任务期间从SQL Server导入"与主机xxxx的TCP/IP连接,端口1433失败"

在带有Sqoop 1.4.6的HDP 2.3.2上,我正在尝试从SQL Server 2008导入表.

我能够成功连接到SQL Server,因为我可以列出数据库和表等.

但是,在导入过程中每次遇到以下错误:

错误:java.lang.RuntimeException:java.lang.RuntimeException:com.microsoft.sqlserver.jdbc.SQLServerException:与主机xxxx,端口1433的TCP/IP连接失败.错误:"连接超时.验证连接属性.确保主机上正在运行SQL Server实例并接受端口上的TCP/IP连接.确保防火墙不阻止与端口的TCP连接. ".

我再次实际上能够从SQL Server成功导入,但只能在几次重试后才能成功导入.但是,无论导入成功还是失败,我总是得到上面提到的错误,我想知道是什么原因导致了这个问题?每当失败时必须继续重复导入是相当麻烦的.

我已经关闭了SQL Server上的连接超时,虽然来自Hadoop集群和SQL Server的连接通过我们的公司防火墙,但是我们的管理员告诉我防火墙上的超时是3600秒.在达到该标记附近之前,进口失败.

只是我使用的一个sqoop命令的示例:

sqoop import \
--connect "jdbc:sqlserver://x.x.x.:1433;database=CEMHistorical" \
--table StreamSummary --username hadoop \
--password-file hdfs:///user/sqoop/.adg.password --hive-import \
--hive-overwrite --create-hive-table --split-by OfferedTime \
--hive-table develop.streamsummary --map-column-hive Call_ID=STRING,Stream_ID=STRING,OriginalCall_ID=STRING,TransactionID=TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

更新:

在与我们的网络团队取得联系后,似乎这绝对是一个网络问题.要添加上下文,Hadoop集群与SQL Server位于不同的VLAN上,并且它通过许多防火墙.为了测试,我尝试从与Hadoop集群相同的VLAN内的不同SQL Server导入,但我根本没有遇到此异常.

sql-server-2008 sqoop hortonworks-data-platform

9
推荐指数
1
解决办法
1050
查看次数

sqoop中--warehouse-dir和--target-dir命令之间的区别

我无法理解sqoop中以下命令之间的区别.如果有人可以用小例子来解释,那会更好.

 --warehouse-dir and --target-dir 
Run Code Online (Sandbox Code Playgroud)

谢谢

sqoop

9
推荐指数
2
解决办法
1万
查看次数

Sqoop - 导入作业失败

我试图通过Sqoop将一个包含3200万条记录的表从SQL Server导入Hive.连接是SQL Server成功的.但Map/Reduce作业无法成功执行.它给出以下错误:

18/07/19 04:00:11 INFO client.RMProxy: Connecting to ResourceManager at /127.0.0.1:8032
18/07/19 04:00:27 DEBUG db.DBConfiguration: Fetching password from job credentials store
18/07/19 04:00:27 INFO db.DBInputFormat: Using read commited transaction isolation
18/07/19 04:00:27 DEBUG db.DataDrivenDBInputFormat: Creating input split with lower bound '1=1' and upper bound '1=1'
18/07/19 04:00:28 INFO mapreduce.JobSubmitter: number of splits:1
18/07/19 04:00:29 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1531917395459_0002
18/07/19 04:00:30 INFO impl.YarnClientImpl: Submitted application application_1531917395459_0002
18/07/19 04:00:30 INFO mapreduce.Job: The url to track the job: http://quickstart.cloudera:8088/proxy/application_1531917395459_0002/ …
Run Code Online (Sandbox Code Playgroud)

hadoop hive sqoop docker cloudera-quickstart-vm

9
推荐指数
1
解决办法
895
查看次数

sqoop库目录在哪里?

要在Sqoop中安装MySQL连接器,我需要将jar文件放在Sqoop目录中,但我找不到它(它不在/usr/lib/sqoop).我在多台机器上安装了Cloudera的Sqoop.

我在哪里可以找到其中一台机器上的Sqoop目录?

hadoop cloudera sqoop

8
推荐指数
1
解决办法
8399
查看次数

是否可以读取MongoDB数据,使用Hadoop处理它,并将其输出到RDBS(MySQL)?

摘要:

是否有可能:

  1. 使用«MongoDB Connector for Hadoop»将数据导入Hadoop.
  2. 使用Hadoop MapReduce处理它.
  3. 在单个事务中使用Sqoop导出它.

我正在使用MongoDB构建一个Web应用程序.虽然MongoDB适用于大多数工作,但在某些部分我需要更强的事务保证,我使用MySQL数据库.

我的问题是我想读取一个用于数据分析的大型MongoDB集合,但是集合的大小意味着分析工作需要很长时间才能处理.不幸的是,MongoDB的内置map-reduce框架不适合这项工作,所以我更愿意用Apache Hadoop进行分析.

我知道可以通过使用«MongoDB Connector for Hadoop»从MongoDB中读取数据,它从MongoDB读取数据,在Hadoop中使用MapReduce处理它,最后将结果输出回MongoDB数据库.

问题是我希望MapReduce的输出进入MySQL数据库而不是MongoDB,因为结果必须与其他MySQL表合并.

为此,我知道Sqoop可以将Hadoop MapReduce的结果导出到MySQL中.

最后,我想读取MongoDB数据,然后用Hadoop处理它,最后将结果输出到MySQL数据库中.

这可能吗?有哪些工具可以做到这一点?

mysql hadoop mongodb sqoop

7
推荐指数
1
解决办法
1万
查看次数

sqoop导入多个表

我们正在使用Cloudera CDH 4,并且能够按预期将表从Oracle数据库导入到HDFS仓库中。问题是我们的数据库中有成千上万个表,而sqoop只支持一次导入一个表。

哪些选项可用于将多个表导入HDFS或Hive?例如,一次将200个表从oracle导入到HDFS或Hive的最佳方法是什么?

到目前为止,我看到的唯一解决方案是为每个表导入创建一个sqoop作业,然后分别运行它们。由于Hadoop设计用于处理大型数据集,因此似乎应该有更好的方法。

hadoop hive hdfs sqoop

7
推荐指数
2
解决办法
3万
查看次数

Sqoop Hive表导入,Table dataType与数据库不匹配

使用Sqoop将数据从oracle导入到hive,它的工作正常但它在hive中只创建了2个dataTypes String和Double.我想使用timeStamp作为某些列的数据类型.我该怎么做.

bin/sqoop import --table TEST_TABLE --connect jdbc:oracle:thin:@HOST:PORT:orcl --username USER1 -password password -hive-import --hive-home /user/lib/Hive/
Run Code Online (Sandbox Code Playgroud)

hadoop hive hdfs sqoop

7
推荐指数
3
解决办法
2万
查看次数

如何在Hive中访问HBase表,反之亦然?

作为开发人员,我通过使用现有MySQL表导入数据为我们的项目创建了HBase表sqoop job.问题是我们的数据分析师团队熟悉MySQL语法,暗示他们可以HIVE轻松查询表.对他们来说,我需要在HIVE中公开HBase表.我不想通过在HIVE中再次填充数据来复制数据.此外,复制数据将来可能会出现一致性问题.

我可以在没有重复数据的情况下暴露HIVE中的HBase表吗?如果是,我该怎么办?另外,如果insert/update/delete我的HBase表中的数据将更新数据出现在HIVE中而没有任何问题?

有时,我们的数据分析团队会在HIVE中创建表格并填充数据.我可以将它们暴露给HBase吗?如果有,怎么样?

hbase hive sqoop apache-hive

7
推荐指数
1
解决办法
5888
查看次数