小编Nic*_*zza的帖子

解析海量文档时如何在kube环境下配置Apache Tika以获得最大吞吐量?

我正在尝试 Tika 解析数以百万计的办公文档。Pdfs、docs、excels、xmls 等。种类繁多。

吞吐量非常重要。我需要能够在合理的时间内解析这些文件,但与此同时,准确性也非常重要。我希望解析失败的文档少于 10%。(失败我的意思是由于 tika 稳定性而失败,比如解析时超时。我不是说由于文档本身而失败)。

我的问题 - 如何在容器化环境中配置 Tika Server 以最大化吞吐量?

我的环境:

  • 我正在使用 Openshift。
  • 每个 tika 解析 pod 都有CPU:2 cores to 2 cores和 Memory:8 GiB to 10 GiB
  • 我有 10 个 tika 解析 pod 副本。

在每个 pod 上,我运行一个 java 程序,其中有 8 个解析线程。

每个线程:

  • 启动单个 tika 服务器进程(在 spawn 子模式下)
    • Tika 服务器参数: -s -spawnChild -maxChildStartupMillis 120000 -pingPulseMillis 500 -pingTimeoutMillis 30000 -taskPulseMillis 500 -taskTimeoutMillis 120000 -JXmx512m -enableUnsecureFeatures -enableFileUrl
  • 该线程现在将不断从 files-to-fetch 队列中获取文件并将其发送到 tika 服务器,当没有更多文件要解析时停止。

这些文件中的每一个都存储在 Pod 本地的缓冲区中,因此使用本地文件优化: …

java apache-tika kubernetes tika-server

9
推荐指数
0
解决办法
257
查看次数

如何建立儿童项目?

我有聚合,我使用<modules>元素链接父Pom ,然后我<parent>在每个子pom中指定.

有没有办法可以从父pom中构建子模块的子集...即

cd parent-dir
mvn install subproj1 subproj2
Run Code Online (Sandbox Code Playgroud)

aggregation maven

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

如何让Eclipse Remote Debugger继续监听端口,直到JVM最终连接?

我有一个复杂的应用程序与几个不同的JVM.

JVM 1执行大约5分钟的工作,然后触发另一个JVM2来完成一些额外的工作.

我想调试JVM2.所以我在JVM2的启动脚本上打开一个远程套接字调试器:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

我设置了这样的Eclipse远程调试会话:

连接类型:标准(套接字连接),主机:localhost,端口:8000

如果我等待JVM2启动,然后启动调试器,它工作正常.

然而,经过5分钟的等待后,点击调试器真的很难得到足够的重视.

如果我在JVM2打开之前启动远程调试器......我明白了

Failed to connect to remote VM. Connection refused.
Connection refused: connect
Run Code Online (Sandbox Code Playgroud)

有没有让远程调试器连续尝试连接?

我尝试使用Eclipse远程调试连接类型:Socket Listen但这会阻止端口,JVM2在启动时会出现此错误:

FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=JVMTI_ERROR_INTERNAL(113)
ERROR: transport error 202: bind failed: Address already in use ["transport.c",L41]
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) ["debugInit.c",L500]
JDWP exit error JVMTI_ERROR_INTERNAL(113): No transports initialized
Run Code Online (Sandbox Code Playgroud)

如何让远程调试器一遍又一遍地尝试?

java eclipse debugging

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

将客户端REQUEST_ENTITY_PROCESSING设置为CHUNKED后,我丢失了文档

我有一个在Jetty上运行的REST Web服务.我想编写一个Java客户端,它使用相同的Web连接将大量文档分块到该休息服务.

我能够在这里建立一个基于Iterator的流媒体方法:

将文档流发送到Jersey @POST端点

除非您设置clientConfig.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.CHUNKED);因为Content-length未知,否则这不起作用.

虽然有些工作,但分块转移似乎丢失了一些文件.例如:

num_docs 500000
numFound 499249
Run Code Online (Sandbox Code Playgroud)

也许它发送的块像:

{some:doc}, {some:doc}, {some:doc}, {some:doc}, {some:doc}, {some:doc}, {some:do

所以我每次都在输掉一些?更新:我错了.

我该怎么做呢?还有什么想法可能会发生什么?

    ClientConfig clientConfig = new ClientConfig();
    clientConfig.property(ClientProperties.CONNECT_TIMEOUT, (int)TimeUnit.SECONDS.toMillis(60));
    clientConfig.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.CHUNKED);
    clientConfig.property(ClientProperties.ASYNC_THREADPOOL_SIZE, 100);
    clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, HttpClientFactory.createConnectionManager(name,
      metricRegistry, configuration));
    ApacheConnectorProvider connector = new ApacheConnectorProvider();
    clientConfig.connectorProvider(connector);
    clientConfig.register(new ClientRequestFilter() {
    @Override
    public void filter(ClientRequestContext requestContext) throws IOException {
      List<Object> orig = requestContext.getHeaders().remove(HttpHeaders.CONTENT_LENGTH);
      if (orig != null && !orig.isEmpty()) {
        requestContext.getHeaders().addAll("Length", orig);
      }
    }
    });
    clientConfig.register(new ClientRequestFilter() {
    @Override
    public void …
Run Code Online (Sandbox Code Playgroud)

java streaming http jersey

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

如何从CygPort构建src?

我对cygport包中的源代码结构有疑问.

以下是Cygports源文件的内容:

  • 项目的实际源包(tar.gz,tar.bz2等)
  • 任意数量的*.patch文件.
  • 一个.cygport文件

我正在尝试从cygports存储库构建gedit-3.4.2.

.cygport文件如何帮助我在./configure中运行正确的选项?

例如,在gedit中,如果我没有指定--disable-spell,它将不会因错误而继续.如何在构建cygport时获取用于构建项目的./configure选项列表?

有什么方法我们可以使用cygport可执行文件来构建cygport并更改前缀吗?

这是以下内容gedit-3.4.2-1.cygport:

inherit python gnome2

DESCRIPTION="GNOME text editor"

PATCH_URI="3.4.2-cygwin.patch"

DEPEND="gnome-common gtk-doc
    girepository(Gtk-3.0)
    pkgconfig(enchant)
    pkgconfig(gtksourceview-3.0)
    pkgconfig(libpeas-gtk-1.0)"

PKG_NAMES="${PN} ${PN}-devel"
PKG_HINTS="setup devel"
gedit_CONTENTS="--exclude=gtk-doc --exclude=libgedit* etc/ usr/bin/ usr/lib/gedit/ ${PYTHON_SITELIB#/} usr/share/"
gedit_devel_CONTENTS="usr/include/ usr/lib/gedit/libgedit* usr/lib/pkgconfig/ usr/share/gtk-doc/"

DIFF_EXCLUDES="*.desktop.in *.schemas.in *-marshal.h"

CYGCONF_ARGS="--libexecdir=/usr/lib --enable-python"

KEEP_LA_FILES="none"
Run Code Online (Sandbox Code Playgroud)

编辑来自Cygwin Ports邮件列表的人说:

"配置选项是

--libexecdir=/usr/lib --enable-python
Run Code Online (Sandbox Code Playgroud)

哪个来自CYGCONF_ARGS."

cygwin ports gedit

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

Eclipse XML格式化程序在元素内添加了空格

Eclipse的XML格式化程序做了一件令人讨厌的事情.

它变成了这样:

<timestamp>2009-10-20 00:00:00.000</timestamp>
Run Code Online (Sandbox Code Playgroud)

<timestamp>2009-10-20 00:00:00.000
</timestamp>
Run Code Online (Sandbox Code Playgroud)

通常是非常无害的,例如,Apache CXF现在会尝试解析时间戳中的空白并抛出解析异常!

我怎么能让它停止这样做?关于Eclipse的XML格式化程序的其他所有工作都很棒.

注意:这个问题不是Eclipse XML格式化程序的重复插入不需要的换行符这个问题引用了我没有使用的android XML编辑器.

eclipse xml-editor

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

将Chrome扩展程序构建到Chromium的标准方法

我已经使用Selenium构建了Chrome扩展程序.

现在我想从源代码构建我自己的Chromium,以便我的扩展程序预先捆绑到构建的分布式软件包中,这样我就不必担心需要Selenium为我的用例安装CRX文件.

我找到了几个人们建议他们尝试这个的论坛,但是没有一个论坛看起来像是成功了.

我找到了一些提示,说明系统管理员如何为其网络中的用户强制安装扩展程序:https://support.google.com/chrome/a/answer/6306504?hl = zh-CN 但这可能适用于chrome enterprise,不会对我有用.

这是另一篇文章,讨论如何离线安装chrome扩展.我或许可以使用其中的一些来实现我想要的东西.

有没有人成功实际成为铬 CRX,以便CRX自动安装?

快速更新:

我只想注意:我正在使用InnoSetup安装程序安装我的自定义版Chrome.所以我确实有机会在安装我的铬分叉后,在安装后执行一些自定义执行步骤.我的扩展程序托管在Chrome网上商店并获得批准.

因此,如果有一些方法可以从Web商店以编程方式将Chrome扩展安装到Chromium安装中,我可以轻松地使用它.

c++ chromium google-chrome-extension

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

保存eclipse工作区而不重新启动

*保存eclipse工作区而无需重启*

也许你已经发生了这种情况:

您可以自定义您的eclipse工作区并使其正确...然后OS更新发生并且系统重新启动...在重新启动期间eclipse意外地被强制关闭并且不保存工作空间.

当你回来时,你的所有工作区自定义设置都消失了,你的eclipse工作区也是空的!

有没有办法保存工作区而不重启eclipse?如果看到变化,也许可以让它每30分钟自动保存一次?

eclipse workspace

6
推荐指数
1
解决办法
3499
查看次数

可以使用iText将pdf连接/合并在一起的函数 - 导致一些问题

我正在使用以下代码使用iText将PDF合并在一起:

public static void concatenatePdfs(List<File> listOfPdfFiles, File outputFile) throws DocumentException, IOException {
        Document document = new Document();
        FileOutputStream outputStream = new FileOutputStream(outputFile);
        PdfWriter writer = PdfWriter.getInstance(document, outputStream);
        document.open();
        PdfContentByte cb = writer.getDirectContent();
        for (File inFile : listOfPdfFiles) {
            PdfReader reader = new PdfReader(inFile.getAbsolutePath());
            for (int i = 1; i <= reader.getNumberOfPages(); i++) {
                document.newPage();
                PdfImportedPage page = writer.getImportedPage(reader, i);
                cb.addTemplate(page, 0, 0);
            }
        }
        outputStream.flush();
        document.close();
        outputStream.close();
    }
Run Code Online (Sandbox Code Playgroud)

这通常很棒!但有一段时间,它会将部分页面旋转90度?有人发生过这种事吗?

我正在研究PDF本身,看看正在被翻转的内容有什么特别之处.

java pdf itext

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

Intellij - 如何制作一个可以通过 CLI 或 Web 服务执行 IDE 操作的插件?

我需要一些帮助来开始制作特定的 IntelliJ 插件。

我想制作一个 IntelliJ 插件,这样您就可以从 CLI(或者从 Web 服务,如果更容易的话)启动 IntelliJ 操作。

例如,我已经用 gradle 脚本构建了我的项目......但我也想在 intelliJ 中准备好它。现在我必须通过点击手动完成此操作。

相反,我希望能够从外部触发一些 IntelliJ 命令。在我的示例中,我想从我的 gradle 脚本中触发这些请求:

  • run-intellij-command {project-path} --action refresh-gradle
  • run-intellij-command {project-path} --action build-project
  • run-intellij-command {project-path} --action start-debugging --configurationName={configuration-name}

有人有一个例子说明我如何开始使用这个吗?

真的希望有一个 intellij 插件项目已经做了类似的事情,比如对 cli 命令做出反应或托管一个可以调用的 Web 服务?

谢谢!

还创建了这个https://youtrack.jetbrains.com/issue/IDEA-184885 希望有一天看到这个功能成为现实

intellij-idea command-line-interface intellij-plugin

6
推荐指数
1
解决办法
821
查看次数