Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop MapReduceIndexerTool-在Solr中索引HDFS文件的最佳方法?_Hadoop_Solr_Hdfs_Cloudera_Lucidworks - Fatal编程技术网

Hadoop MapReduceIndexerTool-在Solr中索引HDFS文件的最佳方法?

Hadoop MapReduceIndexerTool-在Solr中索引HDFS文件的最佳方法?,hadoop,solr,hdfs,cloudera,lucidworks,Hadoop,Solr,Hdfs,Cloudera,Lucidworks,我需要将HDFS文件(包括TXT、PDF、DOCX和其他富文档)索引到Solr中 目前,我正在使用LucidWorks连接器的DirectoryIngestMapper来实现同样的功能。 但是我不能使用它,因为它有一些限制(主要的限制是您不能指定要考虑的文件类型) 因此,现在我正在研究使用MapReduceIndexerTool的可能性。但是它没有很多初学者(我指的是绝对基本的!)级别的例子 是否有人可以发布一些带有示例的链接,以开始使用MapReduceIndexerTool?是否有其他更好

我需要将HDFS文件(包括TXT、PDF、DOCX和其他富文档)索引到Solr中

目前,我正在使用LucidWorks连接器的DirectoryIngestMapper来实现同样的功能。

但是我不能使用它,因为它有一些限制(主要的限制是您不能指定要考虑的文件类型)

因此,现在我正在研究使用
MapReduceIndexerTool
的可能性。但是它没有很多初学者(我指的是绝对基本的!)级别的例子

是否有人可以发布一些带有示例的链接,以开始使用MapReduceIndexerTool?是否有其他更好或更简单的方法来索引HDFS中的文件

但是我不能使用它,因为它有一些限制(主要的限制是您不能指定要考虑的文件类型)

输入的是一条路径

因此,可以按文件名指定

-i/path/*.pdf

编辑:

您可以添加
add.subdirectories
参数。但是
*.pdf
不是递归设置的


-Dadd.subdirectories=true

在Cloudera上,我认为您有以下选项:

  • 自定义spark或map reduce任务,例如使用
关于MapReduceIndexerTool这里有一个快速指南:

使用MapReduceIndexerTool将csv索引到SolR 本指南介绍如何使用MapReduceIndexerTool
.csv
文件索引/上载到SolR。 此过程将从HDFS读取csv,并直接在HDFS中写入索引

另见

假设您有:

  • 有效的cloudera安装(请参阅
    此\u是您的\u cloudera\u主机
    ,如果使用Docker Quickstart,则应为
    Quickstart.cloudera
  • 存储在HDFS中的csv文件(请参见
    这是您的输入\u csv文件
    ,如
    /YOUR HDFS dir/YOUR csv.csv
  • 已配置预期字段的有效目标SolR集合(请参见
    此\u是\u您的\u目标\u集合
    • 输出目录将是SolR配置的
      instanceDir
      (请参见
      这是您的\u核心\u instanceDir
      ),并且应该是HDFS路径
对于本例,我们将处理一个选项卡分隔的文件,其中包含
uid
firstName
lastName
列。第一行包含标题。Morphlines配置文件将跳过第一行,因此实际的列名并不重要,列的顺序应该是这样的。 在SolR上,我们应该使用类似的内容配置字段:

<field name="_version_" type="long" indexed="true" stored="true" />
<field name="uid" type="string" indexed="true" stored="true" required="true" />
<field name="firstName" type="text_general" indexed="true" stored="true" />
<field name="lastName" type="text_general" indexed="true" stored="true" />
<field name="text" type="text_general" indexed="true" multiValued="true" />
要导入,请在群集中运行以下命令:

hadoop jar /usr/lib/solr/contrib/mr/search-mr-*-job.jar \
  org.apache.solr.hadoop.MapReduceIndexerTool \
  --output-dir hdfs://quickstart.cloudera/THIS_IS_YOUR_CORE_INSTANCEDIR/  \
  --morphline-file ./csv-to-solr-morphline.conf \
  --zk-host quickstart.cloudera:2181/solr \
  --solr-home-dir /THIS_IS_YOUR_CORE_INSTANCEDIR \
  --collection THIS_IS_YOUR_DESTINATION_COLLECTION \
  --go-live \
  hdfs://THIS_IS_YOUR_CLOUDERA_HOST/THIS_IS_YOUR_INPUT_CSV_FILE
一些考虑:

  • 您可以使用
    sudo-u hdfs
    运行上述命令,因为您不应该有在hdfs输出目录中写入的权限
  • 默认情况下,Cloudera QuickStart具有非常小的内存和堆内存配置。 如果您收到内存不足异常或堆异常,我建议使用Cloudera Manager->纱线->配置来增加它( ) 对于map和reduce作业,我使用了1GB内存和500MB堆。 还可以考虑改变<代码> .cap.apt.java >代码> MapReduce。map。java. opt>代码> MapReduce。map。内存。Mb< /Calp>和<代码> MapReduce。Map.My.My/<代码> >代码> /ETH/Hadoop/CONF/MAP红色站点。XML
其他资源:


但当我以您建议的格式输入时,子目录不会被爬网。这是一个非常重要的要求。此外,子目录爬网也是非常有问题的。有时,它不考虑子目录中的文件。我知道这不是文件的问题,因为我可以单独索引它。谢谢。我已经对你所提出的问题发表了评论,详细阐述了我所面临的问题。
hadoop jar /usr/lib/solr/contrib/mr/search-mr-*-job.jar \
  org.apache.solr.hadoop.MapReduceIndexerTool \
  --output-dir hdfs://quickstart.cloudera/THIS_IS_YOUR_CORE_INSTANCEDIR/  \
  --morphline-file ./csv-to-solr-morphline.conf \
  --zk-host quickstart.cloudera:2181/solr \
  --solr-home-dir /THIS_IS_YOUR_CORE_INSTANCEDIR \
  --collection THIS_IS_YOUR_DESTINATION_COLLECTION \
  --go-live \
  hdfs://THIS_IS_YOUR_CLOUDERA_HOST/THIS_IS_YOUR_INPUT_CSV_FILE