jjzjj

database - Spark : run InputFormat as singleton

coder 2024-01-05 原文

我正在尝试将键值数据库集成到 Spark 中并有一些问题。 我是 Spark 初学者,阅读了很多书并运行了一些示例,但什么也没有 复杂。

场景:

我正在使用小型 hdfs 集群将传入消息存储在数据库中。 集群有 5 个节点,数据被拆分为 5 个分区。每个 分区存储在单独的数据库文件中。因此每个节点都可以处理 它自己的数据分区。

问题:

数据库软件的接口(interface)基于JNI,数据库本身是 在 C 中实现。由于技术原因,数据库软件可以维护 一次只有一个事件连接。只能有一个 JVM 进程 已连接到数据库。

由于这个限制,读取和写入数据库必须去 通过相同的 JVM 进程。

(背景信息:数据库嵌入到流程中。它是基于文件的, 并且一次只能有一个进程打开它。我可以让它在单独的环境中运行 过程,但由于 IPC 开销,这会更慢。我的应用程序 将执行许多全表扫描。额外的写入将被批处理并且是 不是时间关键。)

解决方案:

我脑子里有一些解决这个问题的想法,但我不知道它们是否有效 与 Spark 搭配得很好。

  • 也许可以神奇地将 Spark 配置为只有一个我的实例 每个节点专有的 InputFormat。

  • 如果我的 InputFormat 是第一次使用,它会启动一个单独的线程 这将创建数据库连接。然后这个线程将继续 作为守护进程,只要 JVM 存在,它就会存在。这只会工作 如果每个节点只有一个 JVM。如果 Spark 在 同一个节点,那么每个节点都会启动自己的数据库线程,这不会 工作。

  • 将我的数据库连接移动到每个节点的单独 JVM 进程,以及我的 InputFormat 然后使用 IPC 连接到这个进程。正如我所说,我想避免这种情况。

  • 或者您有其他更好的主意?

我最喜欢的解决方案是#1,紧随其后的是#2。

感谢您的任何评论和回答!

最佳答案

我认为这里最好的选择是从驱动程序而不是执行程序连接到您的数据库。无论如何,系统的这一部分将成为瓶颈。

关于database - Spark : run InputFormat as singleton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26654729/

有关database - Spark : run InputFormat as singleton的更多相关文章

  1. ruby-on-rails - Rails add_index 算法 : :concurrently still causes database lock up during migration - 2

    为了防止在迁移到生产站点期间出现数据库事务错误,我们遵循了https://github.com/LendingHome/zero_downtime_migrations中列出的建议。(具体由https://robots.thoughtbot.com/how-to-create-postgres-indexes-concurrently-in概述),但在特别大的表上创建索引期间,即使是索引创建的“并发”方法也会锁定表并导致该表上的任何ActiveRecord创建或更新导致各自的事务失败有PG::InFailedSqlTransaction异常。下面是我们运行Rails4.2(使用Acti

  2. ruby-on-rails - Capistrano V3 在 database.yml 上失​​败 - 2

    我正在使用最新版本的Capistrano和我的Rails4应用程序。运行capdpeloy时。我得到了很多输出,包括这次失败:DEBUG[04b6e226]Running/usr/bin/env[-f/var/www/skateboxes/releases/20131022135522/config/database.yml]on162.243.33.179DEBUG[04b6e226]Command:[-f/var/www/skateboxes/releases/20131022135522/config/database.yml]DEBUG[04b6e226]Finishedin0

  3. ruby-on-rails - rails : How to to download a file from a http and save it into database - 2

    我想创建一个RailsController,从网上下载一系列jpg文件,并直接将它们作为二进制文件写入数据库(我不是要上传表格)关于如何做到这一点的任何线索?谢谢编辑:这是我已经使用attachment-fugem编写的一些代码:http=Net::HTTP.new('awebsite',443)http.use_ssl=truehttp.verify_mode=OpenSSL::SSL::VERIFY_NONEhttp.start(){|http|req=Net::HTTP::Get.new("image.jpg")req.basic_authlogin,passwordrespon

  4. Spark的常用SQL日期函数 - 2

    一、获取当前时间1、current_date当前日期(年月日)Examples:SELECTcurrent_date;2、current_timestamp/now()当前日期(时间戳)Examples:SELECTcurrent_timestamp;二、从日期字段中提取时间1、year,month,day/dayofmonth,hour,minute,secondExamples:SELECTyear(now());其他的日期函数以此类推month:1day:12(当月的第几天)dayofmonth:12hour,minute,second:分别对应时分秒2、dayofweek、dayofm

  5. ruby-on-rails - database.yml &references 不工作 - 2

    我们刚刚将虚拟机升级到我认为相同的ruby​​配置(通过RVM...Ruby1.9.2、Rails3.0.7、DataMapper1.1.0)。最大的区别是我们从MySQL5.0升级到5.1。出于某种原因,在我们的旧VM上运行的完全相同的代码/database.yml现在在我们的新VM尝试连接到数据库时失败了。问题是这个YAML:mysql_defaults:&mysql_defaultsadapter:mysqlencoding:UTF-8username:userpassword:passhost:localhostdevelopment:正在扩展到:"mysql_defaults

  6. ruby-on-rails - rails : modify form parameters before modifying the database - 2

    我正在开发一个通过表单发送数据的Rails应用程序。我想在表单发送之后,但在它被处理之前修改表单的一些“参数”。我现在拥有的{"commit"=>"Create","authenticity_token"=>"0000000000000000000000000""page"=>{"body"=>"TEST","link_attributes"=>[{"action"=>"Foo"},{"action"=>"Bar"},{"action"=>"Test"},{"action"=>"Blah"}]}}我想要什么{"commit"=>"Create","authenticity_token"

  7. ruby - Capistrano - 无法部署我的 database.yml - 2

    当我尝试使用capistrano部署我的应用程序时,我会收到此错误:failed:"sh-c'cp/var/www/my_app/releases/20120313115055/config/database.staging.yml/var/www/my_app/releases/20120313115055/config/database.yml'"onIP_ADDR我的database.yml即空的,database.staging.yml:production:adapter:mysql2encoding:utf8reconnect:falsedatabase:my_dbpool

  8. ruby-on-rails - Need Advice : Is this a good use case for a 'NoSQL' Database? 如果有,是哪一个? - 2

    我最近一直在研究NoSql选项。我的场景如下:我们从位于世界各地偏远地区的定制硬件收集和存储数据。我们每15分钟记录一次来自每个站点的数据。我们最终希望每1分钟移动一次。每条记录有20到200个测量值。一旦设置好硬件,每次都会记录和报告相同的测量值。我们面临的最大问题是我们从每个项目中获得了一组不同的衡量标准。我们测量大约50-100种不同的测量类型,但是任何项目都可以有任意数量的每种测量类型。没有可以容纳数据的预设列集。因此,当我们在系统上设置和配置项目时,我们创建并构建了每个项目数据表,其中包含所需的确切列。我们提供工具来帮助分析数据。这通常包括更多的计算和数据聚合,其中一些我们也

  9. ruby-on-rails - rails : Could not load database configuration. 没有这样的文件 - - 2

    我从GitHub存储库克隆了一个应用程序文件夹,在捆绑安装gems之后,我尝试使用rakedb:setup和rakedb:migrate命令,但都没有用,这是我的错误消息:**arun997@promanager:~/workspace(master)$rakedb:setuprequire'rails/all'...2.470sBundler.require...7.590srakeaborted!Cannotload`Rails.application.database_configuration`:Couldnotloaddatabaseconfiguration.Nosuchf

  10. ruby-on-rails - Standalone ruby​​ -- 如何从database.yml加载不同环境 - 2

    我有一个修改数据库中记录的后台进程。模型使用如下方式连接到数据库:dbconfig=YAML::load(File.open('database.yml'))ActiveRecord::Base.establish_connection(dbconfig["development"])classClcar所有模型类的顶部都有这些行。我同意这是一种糟糕的做法。有没有更好的方法来连接到模型类?如何将连接传递给模型?我希望能够在不同的环境(比如“生产”)中运行我的后台进程。我该如何实现? 最佳答案 我会在您的后台进程开始时设置一次连接。一

随机推荐