ホームページ データベース mysql チュートリアル 谁说他们版本不兼容hadoop1.2.1+hbase0.94.11+nutch2.2.1+el

谁说他们版本不兼容hadoop1.2.1+hbase0.94.11+nutch2.2.1+el

Jun 07, 2016 pm 04:32 PM
互換性がありません バージョン 背景 必要 プロジェクト

一、背景 最近由于项目和论文的需要,需要搭建一个垂直搜索的环境,查阅了很多资料,决定使用Apache的一套解决方案hadoop+hbase+nutch+es。这几样神器的作用就不多作介绍了,自行参考各类百科就行了。我选择这样的方案主要是基于以下考虑: 1、可扩展,虽然

一、背景

最近由于项目和论文的需要,需要搭建一个垂直搜索的环境,查阅了很多资料,决定使用Apache的一套解决方案hadoop+hbase+nutch+es。这几样神器的作用就不多作介绍了,自行参考各类百科就行了。我选择这样的方案主要是基于以下考虑:

1、可扩展,虽然只是实验环境,但是以后在项目中是要应用到生产中的,随着数据量的增大,需要的硬件设备能够方便的加入进来,所以选择了分布式的方案中最具人气的hadoop+hbase组合

2、数据来源兼容,nutch2以后集成了gora和tika,可以方便的进行数据ORM和分析

3、与时俱进,es很火嘛,而且各种评测说es比solr更快更稳定,虽然没有自己测试过,但是跟随github大牛们的脚步总不会错得太离谱

二、前言

这一部分纯粹吐槽,国内的好多技术博客不是停留在nutch1X阶段,就是各种不负责任的抄袭转载,某几位先驱说这几样东西版本必须一对一兼容,然后所有人都这样去做,没有一点探索精神和质疑精神。今天,我就做第一个吃螃蟹的人,谁说gora0.3只能配hbase0.92,谁说nutch2只能配es0.19,既然开源的大牛们放出了稳定最新版,就一定有能兼容的道理!

三、安装与配置过程(伪分布式)

整个实验环境采用伪分布式模式搭建,也就是只有一台master的分布式环境,以后扩展只需要继续配置slaver就可以了。 系统为ubuntu server 12.04

hadoop1.2.1

hadoop安装的前提是java和ssh免密码登陆配置,这个不多说了,基本的,jdk1.6和1.7都可以。

1、官网的stable目录里面下载hadoop1.2.1的deb包

2、安装hadoop的deb包

sudo dpkg -i /home/hadoop/hadoop_1.2.1-1_x86_64.deb
ログイン後にコピー

3、查看安装的位置

whereis hadoop
ログイン後にコピー

输出:

hadoop: /usr/bin/hadoop /etc/hadoop /usr/etc/hadoop /usr/bin/X11/hadoop /usr/include/hadoop /usr/share/hadoop
ログイン後にコピー

这里面/etc/hadoop目录是hadoop的各种配置文件,/usr/share/hadoop则是hadoop的主要jar包和监控页面的东西

4、下面开始修改配置文件:

hdfs-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="http://xieminis.me/configuration.xsl"?>
<configuration>
<!-- file system properties -->
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/name</value><!-- value里填写运行hadoop的账户能够访问的目录 -->
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/data</value><!-- value里填写运行hadoop的账户能够访问的目录 -->
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Default block replication.
The actual number of replications can be specified when the file is created.
The default is used if replication is not specified in create time.
</description>
</property>
</configuration>
ログイン後にコピー

mapred-site.xml?

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="http://xieminis.me/configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:54311</value>
<!-- 如果是完全分布式模式,localhost要替换为master的内网ip地址,端口随意,注意避开端口冲突 -->
<description>The host and port that the MapReduce job tracker runs
at. If "local", then jobs are run in-process as a single map
and reduce task.
</description>
</property>
</configuration>
ログイン後にコピー

core-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="http://xieminis.me/configuration.xsl"?>
<!-- core-site.xml -->
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:54310</value>
<description>The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation. The
uri's scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class. The uri's authority is used to
determine the host, port, etc. for a filesystem.</description>
</property>
</configuration>
ログイン後にコピー

hadoop-env.sh

修改java路径

export JAVA_HOME=/usr/lib/jvm/java-7-oracle
ログイン後にコピー

修改pid路径为hadoop运行账户能访问到的路径,默认是/var/run/hadoop,如果不是sudo组的化是没权限的,而且每次重启都会清空这个目录,用chown无法起到长期作用。

export HADOOP_PID_DIR=/home/hadoop/run/hadoop
export HADOOP_SECURE_DN_PID_DIR=/home/hadoop/run/hadoop
ログイン後にコピー

masters和slaves

如果是伪分布式,直接localhost,如果是完全分布式,masters填写master的ip地址,slaves填写slave的ip地址,回车隔开

至此基本的配置已经完毕,如果想了解更多配置内容可以参考这篇文章hadoop三个配置文件的参数含义说明

5、启动hadoop

先格式化namenode

hadoop?namenode?-format
ログイン後にコピー

然后启动

start-all.sh
ログイン後にコピー

=============================================

hbase0.94.11

1、官网stable目录下下载hbase0.94.11的tar包并解压

tar -zxvf hbase-0.94.11.tar.gz
ログイン後にコピー

2、去conf目录修改hbase-site.xml

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:54310/hbase</value><!-- 端口号和ip地址要与hadoop配置参数fs.default.name一致 -->
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>localhost</value>
</property>
</configuration>
ログイン後にコピー

3、修改hbase-env.sh文件

添加如下三行:

export JAVA_HOME=/usr/lib/jvm/java-7-oracle/
export HBASE_CLASSPATH=/etc/hadoop
export HBASE_MANAGES_ZK=true
ログイン後にコピー

至此配置文件修改结束(如果完全分布式还要修改regionservers),更多配置参数和调优可以参考这篇文章《HBase入门篇3-hbase 配置文件参数设置及优化

4、替换hadoop的jar文件

hbase0.94.11默认支持的是hadoop1.0.4,我们可以用替换hadoop-core的方式让其支持hadoop1.2.1

rm?/home/hadoop/hbase-0.94.11/lib/hadoop-core-1.0.4.jar
cp?/usr/share/hadoop/hadoop-core-1.2.1.jar?/home/hadoop/hbase-0.94.11/lib
cp /usr/share/hadoop/lib/commons-collections-3.2.1.jar?/home/hadoop/hbase-0.94.11/lib
cp /usr/share/hadoop/lib/commons-configuration-1.6.jar?/home/hadoop/hbase-0.94.11/lib
ログイン後にコピー

5、启动hbase

/home/hadoop/hbase-0.94.11/bin/start-hbase.sh
ログイン後にコピー

6、用jps命令看是否运行正常

输出为:

2032 NameNode
13764 HQuorumPeer
29069 Jps
2630 JobTracker
2280 DataNode
13889 HMaster
2535 SecondaryNameNode
2904 TaskTracker
14180 HRegionServer
ログイン後にコピー

注意这几个东西一个都不能少,如果有什么少了,一定要去日志里看看是怎么回事。

7、尝试运行hbase命令

/home/hadoop/hbase-0.94.11/bin/hbase?shell
HBase?Shell;?enter?'help<return>'?for?list?of?supported?commands.
Type?"exit<return>"?to?leave?the?HBase?Shell
Version?0.90.4,?r1150278,?Sun?Jul?24?15:53:29?PDT?2011
hbase(main):001:0>?list
TABLE??????????????????????????????????????????webpage?????????????????????????????????????????
1?row(s)?in?0.5270?seconds</return></return>
ログイン後にコピー

如果不报错,说明已经配置成功

?==================================================================

ElasticSearch0.90.5

这里不像一般的博客那样先安装nutch,而是先安装es,为什么,因为逻辑上来讲,nutch是一个爬虫加集成器,es被nutch集成,所以先安装es,这在思想上叫做由零到整。

1、官网下载es0.90.5的deb安装包并安装

sudo dpkg -i /home/hadoop/elasticsearch/elasticsearch-0.90.5.deb
ログイン後にコピー

2、查看安装了哪些东西

whereis?elasticsearch
ログイン後にコピー

输出:

elasticsearch: /etc/elasticsearch /usr/share/elasticsearch
ログイン後にコピー

其中/etc/elasticsearch目录里面的elasticsearch.yml文件是比较重要的配置文件,这里我们使用默认配置,不做修改,需要特殊配置的同学可以参考这篇文章《分布式搜索elasticsearch配置文件详解》。

而/usr/share/elasticsearch里面则是es主要的执行文件和jar包了

3、检查es运行状态

es安装好后就默认开启了,貌似关闭只能杀死进程,启动的话直接输入命令elasticsearch即可。

使用curl来检查es的cluster的运行状态,并获得clustername

curl -XGET 'localhost:9200/_cluster/health?pretty'
ログイン後にコピー

如果获得以下输出,表示成功了

{
"cluster_name" : "elasticsearch",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 5,
"active_shards" : 10,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0
}
ログイン後にコピー

======================================================================

nutch2.2.1

1、官网下载tar包并解压

2、修改源码

这里要吐槽下nutch的开源大牛们,这么明显的bug你就发出版本来了,而且几个版本都不改,如果你有你的道理,你应该文档说明一下好吧,为毛我都找不到你们的正式说明?

进入src/java/org/apache/nutch/crawl目录,修改GeneratorJob.java中的public Map run(Map args) 方法。

添加以下三行

//?generate?batchId
?int?randomSeed?=?Math.abs(new?Random().nextInt()); ?
?String?batchId?=?(curTime?/?1000)?+?"-"?+?randomSeed; ?
?getConf().set(BATCH_ID,?batchId); ?
ログイン後にコピー

?

如果不这样做,nutch generate的时候会报NullPointerException,真心不知道他们是出于什么目的

?

3、拷贝hbase的配置文件到nutch?

?

cp /home/hadoop/hbase-0.94.11/conf/hbase-site.xml /home/hadoop/nutch2.2.1/conf/?
ログイン後にコピー

4、拷贝 hbase0.92 ? 的jar包到nutch的lib目录

这一步是关键,nutch自带的gora0.3是只能支持到最高hbase0.92,默认是hbase0.90,如果不做这一步,nutch就会用默认的0.90jar包去操作0.94的hbase,导致一个“java.lang.IllegalArgumentException: Not a host:port pair”的奇葩错误(据说是低版本client操作高版本server的常见错误)。但是你也不能直接用0.94的jar包去替换,因为这又会导致另一个奇葩错误“java.lang.NoSuchMethodError:org.apache.hadoop.hbase.HColumnDescriptor.setMaxVersions(I)V”,据说这个错误已经被记入HBASE官方JIRA,BUG编号:HBASE-8273。大概意思是说这个setMaxVersions函数的返回值改了。。尼玛,这帮人有没有点面向对象合作编程的常识啊,你丫就不能重新写个函数啊。。。

那么吐槽归吐槽,怎么解决呢,既然大家都说0.92的支持好,那我就用0.92的jar包做替换试试,离0.94就差一个版本,应该不算太低的版本,说不定能操作0.94的库呢,这一试还真成了。

具体办法就是官网上下个hbase0.92.2的版本,把里面的hbase-0.92.2.jar文件拷贝到/home/hadoop/nutch2.2.1/lib目录下即可

?

5、修改nutch-site.xml

?

<property>
<name>storage.data.store.class</name>
<value>org.apache.gora.hbase.store.HBaseStore</value>
<description>Default?class?for?storing?data</description>
</property>
<property>
<name>http.agent.name</name>
<value>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36</value><!-- 这个随意填,我填了我chrome浏览器的UA -->
</property>
ログイン後にコピー

?

关于该文件各个参数的详细解释可以参考这个excel文件——《nutch配置

?

6、修改ivy/ivy.xml

?

?首先是一个常规的修改,找到

<dependency conf="*->default"></dependency>
ログイン後にコピー

这一行,把注释去掉

?

然后是见证奇迹的修改,让nutch2.2.1支持es0.90.5的修改。找到

<dependency org="org.elasticsearch" name="elasticsearch" rev="0.19.4" conf="*->default"></dependency>
ログイン後にコピー

这一行,把rev的值0.19.4替换为?0.90.5

?

这就是ivy进行包依赖管理的强大之处,一会儿执行ant的时候就是见证奇迹的时刻。

如果不做这一步,在进行nutch elasticindex(建立索引)的时候,会报MasterNotDiscoveredException

?

7、修改conf/gora.properties文件

添加一行:

?

gora.datastore.default=org.apache.gora.hbase.store.HBaseStore
ログイン後にコピー

8、执行ant编译

首次执行ant的时候会比较慢,因为ivy要下载依赖包,大家仔细观察屏幕上的输出,可以看到编译到elasticsearch依赖的时候,成功下来了0.90.5的jar包,同时下载的还有lucene4.4.0

执行完成后,会看到nutch目录下多了runtime目录,里面deploy用于分布式抓取,local用于本地抓取

?

至此,所有的安装配置都已完成,enjoy it!

?

?

四、简单体验一下抓取和检索的过程

?

1、建立一个目录urls

2、在urls目录里写一个种子文件,命名为url,里面随便写个页面丰富的网址例如http://blog.tianya.cn

3、将该目录放到hadoop的hdfs上

? ? ?

hadoop fs -copyFromLocal urls /home/hadoop/urls
ログイン後にコピー

4、执行nutch inject,向hbase注入抓取种子页

? ??

bin/nutch inject /home/hadoop/urls
ログイン後にコピー

执行完成后,可以在hbase里面看到“webpage”这个表

?

5、执行nutch 抓取流程

分别执行以下命令

?

bin/nutch generate -topN 10
bin/nutch?fetch?-all
bin/nutch?parse?-all
bin/nutch?updatedb
ログイン後にコピー

执行完成后,可以去hbase里面scan一下webpage表,应该已经有了百行以上的结果

?

6、为elasticsearch建立索引

?

bin/nutch elasticindex <cluster name> -all?</cluster>
ログイン後にコピー

如果没有修改过es的配置文件,这里cluster name默认应该是“elasticsearch”

?

7、利用curl进行查询

?

curl -XGET 'http://localhost:9200/_search?content=tianya'
ログイン後にコピー

要想进行中文查询,可以自行添加中文分词插件,参考《分布式搜索elasticsearch中文分词集成

?

?

五、总结

?

这篇博客虽然吐槽较多,但我还是挺尊重一些认真写博客,认真在论坛回答问题的大牛的,能够配置安装成功,也受到了一些大牛博客和大牛回答的启发,在这里要感谢这些无私的人。

?

下面就要在实际的实验和项目中检验我这套配置的合理性和健壮性了,以后博客中,也会多多记录在使用中遇到的问题和解决方法。

?

声明:如未作说明,则本文为 渣滓洞【解旻的博客】 原创。转载务必注明出处。
注意:转载须保留全文,如需修改请联系作者。

本文永久地址:http://xieminis.me/?p=268

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Linux での CURL バージョンの更新に関するチュートリアル! Linux での CURL バージョンの更新に関するチュートリアル! Mar 07, 2024 am 08:30 AM

Linux でカールのバージョンを更新するには、以下の手順に従います。 現在のカールのバージョンを確認します。 まず、現在のシステムにインストールされているカールのバージョンを確認する必要があります。ターミナルを開き、次のコマンドを実行します。curl --version このコマンドは、現在のcurlバージョン情報を表示します。利用可能なcurlのバージョンを確認する:curlを更新する前に、利用可能な最新バージョンを確認する必要があります。 Curl の公式 Web サイト (curl.haxx.se) または関連ソフトウェア ソースにアクセスして、curl の最新バージョンを見つけることができます。 Curl ソース コードをダウンロードする:curl またはブラウザを使用して、選択した CURL バージョンのソース コード ファイル (通常は .tar.gz または .tar.bz2) をダウンロードします。

AIはフェルマーの最終定理を克服できるか?数学者は100ページの証明をコードに変えるために5年間のキャリアを放棄した AIはフェルマーの最終定理を克服できるか?数学者は100ページの証明をコードに変えるために5年間のキャリアを放棄した Apr 09, 2024 pm 03:20 PM

フェルマーの最終定理、AIに征服されようとしている?そして、全体の中で最も意味のある部分は、AI が解決しようとしているフェルマーの最終定理は、まさに AI が役に立たないことを証明するものであるということです。かつて、数学は純粋な人間の知性の領域に属していましたが、現在、この領域は高度なアルゴリズムによって解読され、踏みにじられています。画像 フェルマーの最終定理は、何世紀にもわたって数学者を悩ませてきた「悪名高い」パズルです。それは 1993 年に証明され、現在数学者たちはコンピュータを使って証明を再現するという大きな計画を立てています。彼らは、このバージョンの証明に含まれる論理的エラーがコンピュータによってチェックできることを望んでいます。プロジェクトアドレス: https://github.com/riccardobrasca/flt

Kirin オペレーティング システムのバージョンとカーネルのバージョンを確認する Kirin オペレーティング システムのバージョンとカーネルのバージョンを確認する Feb 21, 2024 pm 07:04 PM

Kylin オペレーティング システムのバージョンとカーネル バージョンの確認 Kirin オペレーティング システムでは、システム バージョンとカーネル バージョンを確認する方法を知ることが、システム管理とメンテナンスの基礎となります。 Kylin オペレーティング システムのバージョンを確認する方法 1: /etc/.kyinfo ファイルを使用する Kylin オペレーティング システムのバージョンを確認するには、/etc/.kyinfo ファイルを確認します。このファイルには、オペレーティング システムのバージョン情報が含まれています。次のコマンドを実行します: cat/etc/.kyinfo このコマンドは、オペレーティング システムの詳細なバージョン情報を表示します。方法 2: /etc/issue ファイルを使用する オペレーティング システムのバージョンを確認するもう 1 つの方法は、/etc/issue ファイルを参照することです。このファイルにはバージョン情報も含まれていますが、.kyinfo ファイルほど優れていない可能性があります。

Stable Diffusion 3 の論文がついに公開され、アーキテクチャの詳細が明らかになりましたが、Sora の再現に役立つでしょうか? Stable Diffusion 3 の論文がついに公開され、アーキテクチャの詳細が明らかになりましたが、Sora の再現に役立つでしょうか? Mar 06, 2024 pm 05:34 PM

StableDiffusion3 の論文がついに登場しました!このモデルは2週間前にリリースされ、Soraと同じDiT(DiffusionTransformer)アーキテクチャを採用しており、リリースされると大きな話題を呼びました。前バージョンと比較して、StableDiffusion3で生成される画像の品質が大幅に向上し、マルチテーマプロンプトに対応したほか、テキスト書き込み効果も向上し、文字化けが発生しなくなりました。 StabilityAI は、StableDiffusion3 はパラメータ サイズが 800M から 8B までの一連のモデルであると指摘しました。このパラメーター範囲は、モデルを多くのポータブル デバイス上で直接実行できることを意味し、AI の使用を大幅に削減します。

PyCharm を詳しく見る: プロジェクトを簡単に削除する方法 PyCharm を詳しく見る: プロジェクトを簡単に削除する方法 Feb 26, 2024 pm 04:21 PM

タイトル: PyCharm の詳細: プロジェクトを削除する効率的な方法 近年、Python は強力で柔軟なプログラミング言語として、ますます多くの開発者に支持されています。 Python プロジェクトの開発では、効率的な統合開発環境を選択することが重要です。 PyCharm は、強力な統合開発環境として、プロジェクト ディレクトリを迅速かつ効率的に削除するなど、多くの便利な機能とツールを Python 開発者に提供します。以下では、PyCharm での削除の使用方法に焦点を当てます。

インストールされている Oracle のバージョンを簡単に確認する方法 インストールされている Oracle のバージョンを簡単に確認する方法 Mar 07, 2024 am 11:27 AM

インストールされている Oracle のバージョンを簡単に確認するには、具体的なコード例が必要です。Oracle データベースは、エンタープライズ レベルのデータベース管理システムで広く使用されているソフトウェアとして、多くのバージョンとさまざまなインストール方法があります。私たちは日々の業務で、対応する運用やメンテナンスのために、インストールされている Oracle データベースのバージョンを確認する必要があることがよくあります。この記事では、インストールされているOracleのバージョンを簡単に確認する方法と具体的なコード例を紹介します。方法 1: Oracle データベースの SQL クエリを通じて、次のことができます。

PyCharm の実践的なヒント: プロジェクトを実行可能な EXE ファイルに変換する PyCharm の実践的なヒント: プロジェクトを実行可能な EXE ファイルに変換する Feb 23, 2024 am 09:33 AM

PyCharm は、豊富な開発ツールと環境構成を提供する強力な Python 統合開発環境であり、開発者がコードをより効率的に作成およびデバッグできるようにします。 Python プロジェクト開発に PyCharm を使用するプロセスでは、Python 環境がインストールされていないコンピューター上で実行できるように、プロジェクトを実行可能 EXE ファイルにパッケージ化する必要がある場合があります。この記事では、PyCharm を使用してプロジェクトを実行可能な EXE ファイルに変換する方法と、具体的なコード例を紹介します。頭

大型モデル間の1対1バトル75万ラウンド、GPT-4が優勝、Llama 3が5位にランクイン 大型モデル間の1対1バトル75万ラウンド、GPT-4が優勝、Llama 3が5位にランクイン Apr 23, 2024 pm 03:28 PM

Llama3 に関しては、新しいテスト結果が発表されました。大規模モデル評価コミュニティ LMSYS は、Llama3 が 5 位にランクされ、英語カテゴリでは GPT-4 と同率 1 位にランクされました。このリストは他のベンチマークとは異なり、モデル間の 1 対 1 の戦いに基づいており、ネットワーク全体の評価者が独自の提案とスコアを作成します。最終的に、Llama3 がリストの 5 位にランクされ、GPT-4 と Claude3 Super Cup Opus の 3 つの異なるバージョンが続きました。英国のシングルリストでは、Llama3 がクロードを追い抜き、GPT-4 と並びました。この結果について、Meta の主任科学者 LeCun 氏は非常に喜び、リツイートし、

See all articles