PDF文檔:
?
=============================================================
Nutch相關框架視頻教程
第一講
1、?通過nutch,誕生了hadoop、tika、gora。
2、?nutch通過ivy來進行依賴管理(1.2之后)。
3、?nutch是使用svn進行源代碼管理的。
4、?lucene、nutch、hadoop,在搜索界相當有名。
5、?ant構建之后,生成runtime文件夾,該文件夾下面有deploy和local文件夾,分別代表了nutch的兩種運行方式。
6、?nutch和hadoop是通過什么連接起來的?通過nutch腳本。通過hadoop命令把apache-nutch-1.6.job提交給hadoop的JobTracker。
7、?nutch入門重點在于分析nutch腳本文件。
第二講
1、?git來作為分布式版本控制工具,github作為server。bitbucket.org提供免費的私有庫。
2、?nutch的提高在于研讀nutch-default.xml文件中的每一個配置項的實際含義(需要結合源代碼理解)。
3、?定制開發nutch的入門方法是研讀build.xml文件。
4、?命令:
apt-get?install?subversion
svn?co? https://svn.apache.org/repos/asf/nutch/tags/release-1.6/
cd?release-1.6
apt-get?install?ant
ant
cd?runtime/local
mkdir?urls
vi?urls/url.txt?并輸入http://blog.tianya.cn
nohup?bin/nutch?crawl?urls?-dir?data?-depth?3?-threads?100?&
vi?release-1.6/conf/nutch-site.xml?增加http.agent.name配置
cd?../../release-1.6
ant
cd?runtime/local
nohup?bin/nutch?crawl?urls?-dir?data?-depth?3?-threads?100?&
刪除報錯的文件夾
nohup?bin/nutch?crawl?urls?-dir?data?-depth?1?-threads?100?&
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
第三講
1、?nutch的存儲文件夾data下面各個文件夾和文件里面的內容究竟是什么?
2、?命令:
crawldb
bin/nutch?|?grep?read
bin/nutch??readdb??data/crawldb??-stats
bin/nutch??readdb??data/crawldb??-dump??data/crawldb/crawldb_dump
bin/nutch??readdb??data/crawldb??-url?? http://4008209999.tianyaclub.com/
bin/nutch??readdb??data/crawldb??-topN??10??data/crawldb/crawldb_topN
bin/nutch?readdb?data/crawldb??-topN?10??data/crawldb/crawldb_topN_m?1
segments
crawl_generate:
bin/nutch?readseg?-dump?data/segments/20130325042858?data/segments/20130325042858_dump?-nocontent?-nofetch?-noparse?-noparsedata??–noparsetext
crawl_fetch:
bin/nutch?readseg?-dump?data/segments/20130325042858?data/segments/20130325042858_dump?-nocontent?-nogenerate?-noparse?-noparsedata??–noparsetext
content:
bin/nutch?readseg?-dump?data/segments/20130325042858?data/segments/20130325042858_dump?-nofetch??-nogenerate?-noparse?-noparsedata??–noparsetext
crawl_parse:
bin/nutch?readseg?-dump?data/segments/20130325042858?data/segments/20130325042858_dump?-nofetch??-nogenerate?-nocontent?–noparsedata??–noparsetext
parse_data:
bin/nutch?readseg?-dump?data/segments/20130325042858?data/segments/20130325042858_dump?-nofetch??-nogenerate?-nocontent?-noparse??–noparsetext
parse_text:
bin/nutch?readseg?-dump?data/segments/20130325042858?data/segments/20130325042858_dump?-nofetch??-nogenerate?-nocontent?-noparse??-noparsedata
全部:
bin/nutch?readseg?-dump?data/segments/20130325042858?data/segments/20130325042858_dump
segments
bin/nutch?readseg?-list?-dir?data/segments
bin/nutch?readseg?-list?data/segments/20130325043023
bin/nutch?readseg?-get??data/segments/20130325042858?http://blog.tianya.cn/
linkdb
bin/nutch?readlinkdb?data/linkdb?-url?http://4008209999.tianyaclub.com/
bin/nutch?readlinkdb?data/linkdb?-dump?data/linkdb_dump
?
?
?
?
?
?
?
?
?
?
?
?
?
第四講
1、?深入分析nutch的抓取周期
inject
generate?->?fetch?->?parse?->updatedb
2、?3大merge和3大read命令闡釋
bin/nutch??|??grep?merge
bin/nutch??|??grep?read
bin/nutch??mergesegs??data/segments_all??-dir??data/segments
3、?反轉鏈接?
bin/nutch??invertlinks??data/linkdb??-dir??data/segments
4、?解析頁面
bin/nutch??parsechecker?? http://apdplat.org
?
?
?
?
?
?
?
第五講
1、?域統計
bin/nutch??domainstats??data2/crawldb/current??host??host
bin/nutch??domainstats??data2/crawldb/current??domain?domain
bin/nutch??domainstats??data2/crawldb/current??suffix?suffix
bin/nutch??domainstats??data2/crawldb/current??tld??tld
2、webgraph
bin/nutch?webgraph?-segmentDir?data2/segments?-webgraphdb?data2/webgraphdb
有相同inlinks的 URL ,只輸出 topn條
bin/nutch?nodedumper?-inlinks?-output??inlinks?-topn?1?-webgraphdb?data2/webgraphdb
有相同 out links的 URL ,只輸出 topn條
bin/nutch?nodedumper?-outlinks??-output??outlinks?-topn?1?-webgraphdb?data2/webgraphdb?
有相同scores的 URL ,只輸出 topn條(初始分值全為 0 )
bin/nutch?nodedumper?-scores??-output?scores?-topn?1?-webgraphdb?data2/webgraphdb?
計算 URL 分值
bin/nutch??linkrank??-webgraphdb??data2/webgraphdb?
再次查看分值
bin/nutch?nodedumper?-scores??-output?scores?–topn?1?-webgraphdb?data2/webgraphdb?
對結果進行分組,取最大值或是連加和( topn 參數不參與)
bin/nutch?nodedumper?-group?domain?sum?-inlinks?-output?inlinks_group_sum??-webgraphdb?data2/webgraphdb?
bin/nutch?nodedumper?-group?domain?max?-inlinks?-output?inlinks_group_max??-webgraphdb?data2/webgraphdb
對 url 進行分組,分組方式可選擇為 host 或是 domain ,對同一組的 url 執行 topn 限制,對執行了 topn 限制的 url 集合執行 max 或是 sum 操作, max 和 sum 所針對的排序值是 3 種方式之一 inlinks 、 outlinks 以及 scores 。
?
?
?
?
?
?
?
第六講
1、注入分值
bin/nutch??readdb??data2/crawldb??-dump??crawldb_dump
cat??crawldb_dump/*??|??grep??Score??|??sort??|??uniq
bin/nutch??scoreupdater?-crawldb?data2/crawldb?-webgraphdb?data2/webgraphdb
2、輕量級抓取
bin/nutch??freegen??urls??data3/segments
?
?
?
?
?
?
?
?
第七講
1、indexchecker
bin/nutch??indexchecker??http://www.163.com
2、安裝配置SOLR3.6.2
wget? http://mirror.bjtu.edu.cn/apache/lucene/solr/3.6.2/apache-solr-3.6.2.tgz
tar??-xzvf??apache-solr-3.6.2.tgz
cd??apache-solr-3.6.2/example
復制 nutch 的 conf 目錄中的 schema.xml文件到solr/conf目錄
將solr/conf/solrconfig.xml文件里的所有<str?name="df">text</str> 都替換為 <str?name="df">content</str>
3、運行SOLR并提交索引
啟動
SOLR
服務器
?java?-jar?start.jar?&
Web 界面
提交索引
bin/nutch?solrindex?http://host2:8983/solr?data/crawldb?-linkdb?data/linkdb?-dir?data/segments
4、使用LUKE工具查看索引
5、給SOLR3.6.2配置分詞器mmseg4j
wget? http://mmseg4j.googlecode.com/files/mmseg4j-1.8.5.zip
unzip?mmseg4j-1.8.5.zip?-d??mmseg4j-1.8.5
將mmseg4j-1.8.5/mmseg4j-all-1.8.5-with-dic.jar復制到solr下的
lib
目錄
將
schema.xml
文件中
所有的
??<tokenizer?class="solr.WhitespaceTokenizerFactory"/>
??
和
??<tokenizer?class="solr.StandardTokenizerFactory"/>
??
替換為
??<tokenizer?class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory"?mode="complex"/>
?
?
?
?
?
?
?
?
?
?
第八講
1、指定LUKE工具的分詞器
訪問 https://code.google.com/p/mmseg4j/downloads/list ??
下載mmseg4j-1.9.1.v20130120-SNAPSHOT.zip
將壓縮包里面的 dist 文件夾里面的 jar 解壓,將解壓出來 com 和 data 文件夾拖到 lukeall-4.0.0-ALPHA.jar 里面
啟動 luke ,在 Search 選項卡的 Analysis 里面選擇 com.chenlb.mmseg4j.analysis.ComplexAnalyzer
2、安裝配置SOLR4.2
wget?http://labs.mop.com/apache-mirror/lucene/solr/4.2.0/solr-4.2.0.tgz
tar??-xzvf??solr-4.2.0.tgz
cd??solr-4.2.0/example
復制 nutch 的 conf 目錄中的 schema-solr4.xml文件到solr/collection1/conf目錄,改名為schema.xml ,覆蓋原來文件
修改solr/collection1/conf/schema.xml,在 <fields> 下增加: <field?name="_version_"?type="long"?indexed="true"?stored="true"/>
3、給SOLR4.2配置分詞器mmseg4j
wget?https://mmseg4j.googlecode.com/files/mmseg4j-1.9.1.v20130120-SNAPSHOT.zip
unzip?mmseg4j-1.9.1.v20130120-SNAPSHOT.zip?-d??mmseg4j-1.9.1
將mmseg4j-1.9.1/dist/*.jar
復制到
solr下的
lib
目錄
將
schema.xml
文件中的
??<tokenizer?class="solr.WhitespaceTokenizerFactory"/>
??
和
??<tokenizer?class="solr.StandardTokenizerFactory"/>
??
替換為
??<tokenizer?class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory"?mode="complex"/>
4、運行SOLR并提交索引
啟動
SOLR
服務器
?java?-jar?start.jar?&
Web 界面
提交索引
bin/nutch?solrindex?http://host2:8983/solr?data/crawldb?-linkdb?data/linkdb?-dir?data/segments
?
?
?
?
?
第九講
1、?安裝win上的nutch運行環境Cygwin
cygwin 路徑不要有空格
把安裝好的 JDK 拷貝到用戶主目錄
把 nutch 的文件拷貝到用戶主目錄
下載解壓 ant ,加入 path
2、?運行nutch
Exception?in?thread?"main"?java.io.IOException:?Failed?to?set?permissions?of?path:?\tmp\hadoop-ysc\mapred\staging\ysc-2036315919\.staging?to?0700
?
https://issues.apache.org/jira/browse/HADOOP-7682
?
http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.1.2/hadoop-1.1.2.tar.gz
?
修改hadoop-1.1.2\src\core\org\apache\hadoop\fs\?FileUtil.java,搜索?Failed?to?set?permissions?of?path,找到 689 行,把 throw?new?IOException改為LOG.warn
?
修改hadoop-1.1.2\?build.xml,搜索autoreconf,移除匹配的 6 個 executable="autoreconf"的exec配置
?
執行 ant
?
用新生成的hadoop-core-1.1.3-SNAPSHOT.jar替換 nutch 的 hadoop-core-1.0.3.jar ?
?
?
?
第十講
1、HADOOP單機本地模式
wget? http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.1.2/hadoop-1.1.2.tar.gz
tar?-xzvf?hadoop-1.1.2.tar.gz
export??PATH=/home/ysc/hadoop-1.1.2/bin:$PATH
切換到 nutch 的 deploy 目錄運行命令 ?
2、HADOOP單機偽分布式模式
新建用戶和組
addgroup?hadoop
adduser?--ingroup?hadoop?hadoop
注銷 root 以 hadoop 用戶登錄
配置SSH
ssh-keygen?-t?rsa(密碼為空,路徑默認)
cp?.ssh/id_rsa.pub?.ssh/authorized_keys
準備HADOOP運行環境
wget? http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.1.2/hadoop-1.1.2.tar.gz
tar?-xzvf?hadoop-1.1.2.tar.gz
在 /home/hadoop/ .bashrc?中追加:
export??PATH=/home/hadoop/hadoop-1.1.2/bin:$PATH
重新登錄就生效
ssh?localhost
which?hadoop
配置HADOOP運行參數
vi?conf/core-site.xml
?
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
?
vi?conf/hdfs-site.xml
?
<property>
??<name>dfs.name.dir</name>
??<value>/home/hadoop/dfs/filesystem/name</value>
</property>
<property>
??<name>dfs.data.dir</name>
??<value>/home/hadoop/dfs/filesystem/data</value>
</property>
<property>
??<name>dfs.replication</name>
??<value>1</value>
</property>
?
vi?conf/mapred-site.xml
?
<property>
??<name>mapred.job.tracker</name>
??<value>localhost:9001</value>
</property>
<property>?
??<name>mapred.tasktracker.map.tasks.maximum</name>
??<value>4</value>
</property>?
<property>?
??<name>mapred.tasktracker.reduce.tasks.maximum</name>
??<value>4</value>
</property>
<property>
??<name>mapred.system.dir</name>
??<value>/home/hadoop/mapreduce/system</value>
</property>
<property>
??<name>mapred.local.dir</name>
??<value>/home/hadoop/mapreduce/local</value>
</property>
格式化名稱節點并啟動集群
hadoop?namenode?-format
啟動集群并查看WEB管理界面
start-all.sh
訪問? http://localhost:50030 ?可以查看? JobTracker? 的運行狀態
訪問? http://localhost:50060 ?可以查看? TaskTracker? 的運行狀態
訪問? http://localhost:50070 ?可以查看? NameNode? 以及整個分布式文件系統的狀態,瀏覽分布式文件系統中的文件以及? log? 等
停止集群
stop-all.sh 停止集群
3、執行Nutch的crawl命令
?
?
?
?
?
?
?
?
?
?
?
第十一講
1、配置Cygwin支持無密碼SSH登陸
安裝SSH
默認的 Cygwin 沒有安裝 ssh ,所以重新運行 http://www.cygwin.com/setup.exe
在 Select?Packages 的時候,在 search 輸入 ssh ,選擇 openssh:?The?OpenSSH?server?and?client?programs?
配置SSH服務(以管理員身份運行cygwin)
ssh-host-config
Should?privilege?separation?be?used????yes
Do?you?want?to?install?sshd?as?a?service???yes
默認確認
Do?you?want?to?use?a?different?name???no
Create?new?privileged?user?account?'cyg_server'???yes
輸入密碼
cygrunsrv??-S??sshd?
如果需要重新安裝 sshd 服務,可以用 cygrunsrv?-R?sshd
生成SSH?Key
ssh-keygen??-t??rsa(密碼為空,路徑默認)
cp??.ssh/id_rsa.pub??.ssh/authorized_keys
登陸
ssh??localhost
2、win上的HADOOP單機偽分布式
準備HADOOP運行環境
下載解壓并拷貝到 Cygwin 的用戶主目錄
http://archive.apache.org/dist/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz
1.x 版本有 BUG, 參考:
https://issues.apache.org/jira/browse/HADOOP-7682
https://issues.apache.org/jira/browse/HADOOP-8274
BUG 修復請參考:
http://en.wikisource.org/wiki/User:Fkorning/Code/Hadoop-on-Cygwin
?
在 /home/ysc/ .bashrc?中追加:
export??JAVA_HOME=/home/ysc/jdk1.7.0_17
export??PATH=/home/ysc/hadoop-0.20.2/bin:$JAVA_HOME/bin:$PATH
在 hadoop-0.20.2/conf/hadoop-evn.sh 中追加
export??JAVA_HOME=/home/ysc/jdk1.7.0_17
export??HADOOP_LOG_DIR=/tmp/logs
創建符號鏈接
mklink??/D??C:\tmp??C:\cygwin\tmp
重新登錄就生效
ssh??localhost
which??hadoop
配置HADOOP運行參數
vi?conf/core-site.xml
?
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
?
vi?conf/hdfs-site.xml
?
<property>
??<name>dfs.replication</name>
??<value>1</value>
</property>
?
vi?conf/mapred-site.xml
?
<property>
??<name>mapred.job.tracker</name>
??<value>localhost:9001</value>
</property>
<property>?
??<name>mapred.tasktracker.map.tasks.maximum</name>
??<value>4</value>
</property>?
<property>?
??<name>mapred.tasktracker.reduce.tasks.maximum</name>
??<value>4</value>
</property>
格式化名稱節點并啟動集群
hadoop?namenode?-format
啟動集群并查看WEB管理界面
start-all.sh
訪問? http://localhost:50030 ?可以查看? JobTracker? 的運行狀態
訪問? http://localhost:50060 ?可以查看? TaskTracker? 的運行狀態
訪問? http://localhost:50070 ?可以查看? NameNode? 以及整個分布式文件系統的狀態,瀏覽分布式文件系統中的文件以及? log? 等
停止集群
stop-all.sh 停止集群
3、?執行wordcount命令
hadoop??jar??hadoop-0.20.2-examples.jar??wordcount??input??output
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
第十二講
1、?HADOOP多機完全分布式模式
三臺機器
host2(NameNode 、 SecondaryNameNode 、 JobTracker 、 DataNode 、 TaskTracker)?
host6(DataNode 、 TaskTracker)
host8(DataNode 、 TaskTracker)
vi??/etc/hostname(分別給每一臺主機指定主機名)
vi??/etc/hosts(分別給每一臺主機指定主機名到 IP 地址的映射)
新建用戶和組
三臺機器上面都要新建用戶和組
addgroup?hadoop
adduser?--ingroup?hadoop?hadoop?
更改臨時目錄權限
chmod?777?/tmp
注銷 root 以 hadoop 用戶登錄
配置SSH
在 host2 上面執行
ssh-keygen??-t??rsa(密碼為空,路徑默認)
該命令會在用戶主目錄下創建? .ssh? 目錄,并在其中創建兩個文件: id_rsa? 私鑰文件 ,是基于? RSA? 算法創建 ,該私鑰文件要妥善保管,不要泄漏。 id_rsa.pub? 公鑰文件 ,和? id_rsa? 文件是一對兒,該文件作為公鑰文件,可以公開
cp??.ssh/id_rsa.pub??.ssh/authorized_keys
把公鑰追加到其他主機的authorized_keys? 文件中
ssh-copy-id??-i??.ssh/id_rsa.pub??hadoop@host6?
ssh-copy-id??-i??.ssh/id_rsa.pub??hadoop@host8
可以在 host2 上面通過 ssh 無密碼登陸 host6 和 host8
ssh?host2
ssh?host6
ssh?host8
準備HADOOP運行環境
wget? http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.1.2/hadoop-1.1.2.tar.gz
tar?-xzvf?hadoop-1.1.2.tar.gz
在 /home/hadoop/ .bashrc?中追加:
export??PATH=/home/hadoop/hadoop-1.1.2/bin:$PATH
重新登錄就生效
ssh??localhost
which??hadoop
配置HADOOP運行參數
vi?conf/masters
?
把 localhost 替換為?:host2
?
vi?conf/slaves
?
刪除 localhost ,加入兩行 :
host2
host6
host8
?
vi?conf/core-site.xml
?
<property>
<name>fs.default.name</name>
<value>hdfs://host2:9000</value>
</property>
?
vi?conf/hdfs-site.xml
?
<property>
??<name>dfs.name.dir</name>
??<value>/home/hadoop/dfs/filesystem/name</value>
</property>
<property>
??<name>dfs.data.dir</name>
??<value>/home/hadoop/dfs/filesystem/data</value>
</property>
<property>
??<name>dfs.replication</name>
??<value>3</value>
</property>
?
vi?conf/mapred-site.xml
?
<property>
??<name>mapred.job.tracker</name>
??<value>host2:9001</value>
</property>
<property>?
??<name>mapred.tasktracker.map.tasks.maximum</name>
??<value>4</value>
</property>?
<property>?
??<name>mapred.tasktracker.reduce.tasks.maximum</name>
??<value>4</value>
</property>
<property>
??<name>mapred.system.dir</name>
??<value>/home/hadoop/mapreduce/system</value>
</property>
<property>
??<name>mapred.local.dir</name>
??<value>/home/hadoop/mapreduce/local</value>
</property>
復制HADOOP文件到其他節點
?scp?-r?/home/hadoop/hadoop-1.1.2??hadoop@host6:/home/hadoop/hadoop-1.1.2
?scp?-r?/home/hadoop/hadoop-1.1.2??hadoop@host8:/home/hadoop/hadoop-1.1.2
格式化名稱節點并啟動集群
hadoop?namenode?-format
啟動集群并查看WEB管理界面
start-all.sh
訪問? http://localhost:50030 ?可以查看? JobTracker? 的運行狀態
訪問? http://localhost:50060 ?可以查看? TaskTracker? 的運行狀態
訪問? http://localhost:50070 ?可以查看? NameNode? 以及整個分布式文件系統的狀態,瀏覽分布式文件系統中的文件以及? log? 等
停止集群
stop-all.sh 停止集群
?
?
?
?
?
?
?
?
?
?
?
?
?
第十三講
1、改變負載
三臺機器,改變負載
host2(NameNode、 DataNode 、 TaskTracker)?
host6(SecondaryNameNode、 DataNode 、 TaskTracker)
host8(JobTracker?、 DataNode 、 TaskTracker)
?
指定 SecondaryNameNode 為 host6 :
vi??conf/masters指定 host6
scp??conf/masters??host6:/home/hadoop/hadoop-1.1.2/conf/masters
scp??conf/masters??host8:/home/hadoop/hadoop-1.1.2/conf/masters
?
vi??conf/hdfs-site.xml
???<property>
?????<name>dfs.http.address</name>
?????<value>host2:50070</value>
???</property>
???<property>
???<name>dfs.secondary.http.address</name>
???<value>host6:50090</value>
???</property>
scp??conf/hdfs-site.xml??host6:/home/hadoop/hadoop-1.1.2/conf/hdfs-site.xml
scp??conf/hdfs-site.xml??host8:/home/hadoop/hadoop-1.1.2/conf/hdfs-site.xml
?
指定 JobTracker 為 host8 :
vi??conf/mapred-site.xml
<property>
??<name>mapred.job.tracker</name>
??<value>host8:9001</value>
</property>
scp??conf/mapred-site.xml??host6:/home/hadoop/hadoop-1.1.2/conf/mapred-site.xml
scp??conf/mapred-site.xml??host8:/home/hadoop/hadoop-1.1.2/conf/mapred-site.xml?
?
vi?conf/core-site.xml
<property>
??<name>fs.checkpoint.dir</name>
??<value>/home/hadoop/dfs/filesystem/namesecondary</value>
</property>
scp??conf/core-site.xml??host6:/home/hadoop/hadoop-1.1.2/conf/core-site.xml
scp??conf/core-site.xml??host8:/home/hadoop/hadoop-1.1.2/conf/core-site.xml
配置 host8 :
host8 上的腳本 start-mapred.sh 會啟動 host2 和 host6 上面的 TaskTracker ,所以需要對 host8 執行:
ssh-keygen??-t??rsa(密碼為空,路徑默認)?
ssh-copy-id??-i??.ssh/id_rsa.pub??hadoop@host2?
ssh-copy-id??-i??.ssh/id_rsa.pub??hadoop@host6?
ssh-copy-id??-i??.ssh/id_rsa.pub??hadoop@host8
可以在 host8 上面通過 ssh 無密碼登陸 host2 和 host6
ssh?host2
ssh?host6
ssh?host8
在 /home/hadoop/ .bashrc?中追加:
export??PATH=/home/hadoop/hadoop-1.1.2/bin:$PATH
?
host2:? 執行 start-dfs.sh
host8:? 執行 start-mapred.sh
?
2、SecondaryNameNode
ssh??host6
停止secondarynamenode
hadoop-1.1.2/bin/hadoop-daemon.sh??stop??secondarynamenode
強制合并 fsimage 和 eidts
hadoop-1.1.2/bin/hadoop??secondarynamenode??-checkpoint??force
啟動secondarynamenode
hadoop-1.1.2/bin/hadoop-daemon.sh??start??secondarynamenode
?
3、啟用回收站
<property>
??<name>fs.trash.interval</name>
??<value>10080</value>
</property>
?
?
?
?
?
?
?
?
第十四講
1、?動態增加DataNode節點和TaskTracker節點
以 host226 為例
在 host226 上執行:
指定主機名
vi??/etc/hostname
指定主機名到 IP 地址的映射
vi??/etc/hosts
增加用戶和組
addgroup?hadoop
adduser?--ingroup?hadoop?hadoop?
更改臨時目錄權限
chmod?777?/tmp
?
在 host2 上執行:
vi??conf/slaves
增加 host226
ssh-copy-id??-i??.ssh/id_rsa.pub??hadoop@host226
scp?-r?/home/hadoop/hadoop-1.1.2??hadoop@host226:/home/hadoop/hadoop-1.1.2
在 host8 上執行:
vi??conf/slaves
增加 host226
ssh-copy-id??-i??.ssh/id_rsa.pub??hadoop@host226
?
在 host226 上面執行:
hadoop-daemon.sh??start??datanode
hadoop-daemon.sh??start??tasktracker
在/etc/hosts的配置文件中,localhost到ip地址的映射要放到ipv4的最后面
?
?
第十五講
1、限制hadoop節點連接
NameNode:
vi??conf/hdfs-site.xml
?
<property>
??<name>dfs.hosts</name>
??<value>/home/hadoop/hadoop-1.1.2/conf/include</value>
</property>
<property>
??<name>dfs.hosts.exclude</name>
??<value>/home/hadoop/hadoop-1.1.2/conf/exclude</value>
</property>
加入集群節點
vi??/home/hadoop/hadoop-1.1.2/conf/include
?
?
JobTracker:
vi??conf/mapred-site.xml?
?
<property>
??<name>mapred.hosts</name>
??<value>/home/hadoop/hadoop-1.1.2/conf/include</value>
</property>
<property>
??<name>mapred.hosts.exclude</name>
??<value>/home/hadoop/hadoop-1.1.2/conf/exclude</value>
</property>?
加入集群節點
vi??/home/hadoop/hadoop-1.1.2/conf/include
?
重啟集群
2、動態刪除DataNode節點和TaskTracker節點
???vi???/home/hadoop/hadoop-1.1.2/conf/exclude
增加待刪除的節點 host226
在NameNode上面執行:
hadoop???dfsadmin???-refreshNodes
vi?hadoop-1.1.2/conf/slaves? (去掉 host226 )
vi?hadoop-1.1.2/conf/include?(去掉 host226 )
hadoop???dfsadmin???-refreshNodes( 使 include 的更改生效 )
rm?hadoop-1.1.2/conf/exclude
exclude主要是使一個 datanode 節點安全退役
?
刪除 tasktracker 方式一:
vi???/home/hadoop/hadoop-1.1.2/conf/exclude
增加待刪除的節點 host226
在JobTracker上面執行:
hadoop???mradmin???-refreshNodes
vi?hadoop-1.1.2/conf/slaves? (去掉 host226 )
vi?hadoop-1.1.2/conf/include?(去掉 host226 )
hadoop???mradmin???-refreshNodes( 使 include 的更改生效 )
rm?hadoop-1.1.2/conf/exclude
?
刪除 tasktracker 方式二:
vi???/home/hadoop/hadoop-1.1.2/conf/include
刪除待刪除的節點 host226
在JobTracker上面執行:
hadoop???mradmin???-refreshNodes
vi?hadoop-1.1.2/conf/slaves? (去掉 host226 )
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
第十六講
1、運行基準測試
hadoop?jar?hadoop-test-1.1.2.jar
?
hadoop?jar?hadoop-test-1.1.2.jar?DFSCIOTest?-write?-nrFiles?12?-fileSize?100000?-resFile?test
hadoop?jar?hadoop-test-1.1.2.jar?DFSCIOTest?-read?-nrFiles?12?-fileSize?100000?-resFile?test
hadoop?jar?hadoop-test-1.1.2.jar?DFSCIOTest?-clear
?
?
?
?
?
?
?
?
?
?
?
第十七講
Ganglia 主要是用來監控 大規模分布式系統的性能,如: cpu? 、 內存、硬盤、負載、網絡流量等。Ganglia 支持 通過瀏覽器訪問,強大的圖表展示方式很容易直觀地了解每個節點以及整個集群的工作狀態,對集群運行參數調整、提高系統整體資源利用率起到重要作用。
1、?配置服務端
host6 作為服務端:
創建用戶和組:
addgroup??ganglia
adduser??--ingroup??ganglia??ganglia
安裝:
apt-get??install???gmetad
apt-get??install???rrdtool
apt-get??install???ganglia-webfrontend
apt-get??install???ganglia-monitor
配置gmond:
vi?/etc/ganglia/gmond.conf
先找到 setuid?=?yes, 改成 setuid?=no;?
在找到 cluster 塊中的 name ,改成 name?=”hadoop-cluster”;
配置gmetad:
vi?/etc/ganglia/gmetad.conf
在這個配置文件中增加 datasource ,即增加以下內容:
data_source??“hadoop-cluster”??10??host2??host6??host8
gridname??"Hadoop"
指定 web 文件夾:
ln??-s??/usr/share/ganglia-webfrontend??/var/www/ganglia
指定主機名:
vi?/etc/apache2/apache2.conf
添加: ?ServerName? ?host6
重啟服務:
/etc/init.d/gmetad?restart
/etc/init.d/ganglia-monitor?restart
/etc/init.d/apache2?restart
2、?配置客戶端
在 host2 和 host8 上安裝數據收集服務:
創建用戶和組:
addgroup??ganglia
adduser??--ingroup??ganglia??ganglia
安裝:
apt-get??install???ganglia-monitor
配置gmond:
vi?/etc/ganglia/gmond.conf
先找到 setuid?=?yes, 改成 setuid?=no;?
在找到 cluster 塊中的 name ,改成 name?=”hadoop-cluster”; ?
重啟服務:
/etc/init.d/ganglia-monitor?restart
3、?訪問頁面
如果頁面中的 Choose?a?Source 有 unspecified, ?重啟gmetad即可:
/etc/init.d/gmetad??restart
4、?集成hadoop
vi?conf/hadoop-metrics2.properties
設置內容為:
??#? 大于 0.20 以后的版本用 ganglia31??
*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
??*.sink.ganglia.period=10
??#?default?for?supportsparse?is?false
??*.sink.ganglia.supportsparse=true
?*.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both
?*.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40
??#
組播地址
239.2.11.71
??namenode.sink.ganglia.servers=239.2.11.71:8649
??datanode.sink.ganglia.servers=239.2.11.71:8649
??jobtracker.sink.ganglia.servers=239.2.11.71:8649
??tasktracker.sink.ganglia.servers=239.2.11.71:8649
??maptask.sink.ganglia.servers=239.2.11.71:8649
??reducetask.sink.ganglia.servers=239.2.11.71:8649
??dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
??dfs.period=10
??dfs.servers=239.2.11.71:8649
??mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
??mapred.period=10
??mapred.servers=239.2.11.71:8649
??jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
??jvm.period=10
??jvm.servers=239.2.11.71:8649
?
把配置文件復制到集群其他節點,重啟集群。
第十八講
1、準備壓縮數據
從 dmoz 下載 url 庫
wget??http://rdf.dmoz.org/rdf/content.rdf.u8.gz
gunzip??content.rdf.u8.gz
準備 nutch1.6
svn??co?? https://svn.apache.org/repos/asf/nutch/tags/release-1.6/
cp?release-1.6/conf/nutch-site.xml.template?release-1.6/conf/nutch-site.xml
vi?release-1.6/conf/nutch-site.xml
增加:
<property>
??<name>http.agent.name</name>
??<value>nutch</value>
</property>
cd?release-1.6
ant
cd?..
使用DmozParser把 dmoz 的 URL 庫解析為文本
release-1.6/runtime/local/bin/nutch?org.apache.nutch.tools.DmozParser??content.rdf.u8??>??urls?&
將 url 文本內容放到 HDFS 上面
hadoop??fs??-put??urls??urls
2、以不同壓縮方法注入URL
進入 nutch 主目錄
cd??release-1.6
以未壓縮的方式注入 URL
runtime/deploy/bin/nutch??inject??data_no_compress/crawldb??urls
?
以默認壓縮的方式注入 URL
vi?conf/nutch-site.xml
??<property>
????<name>mapred.output.compression.type</name>
????<value>BLOCK</value>
??</property>
??<property>
????<name>mapred.output.compress</name>
????<value>true</value>
??</property>
????<property>
????<name>mapred.compress.map.output</name>
????<value>true</value>
??</property>
??<property>
????<name>mapred.map.output.compression.codec</name>
????<value>org.apache.hadoop.io.compress.DefaultCodec</value>
??</property>
??<property>
????<name>mapred.output.compression.codec</name>
????<value>org.apache.hadoop.io.compress.DefaultCodec</value>
??????</property>
ant
runtime/deploy/bin/nutch??inject??data_default_compress/crawldb??urls
?
以Gzip壓縮的方式注入 URL
vi?conf/nutch-site.xml
??<property>
????<name>mapred.output.compression.type</name>
????<value>BLOCK</value>
??</property>
??<property>
????<name>mapred.output.compress</name>
????<value>true</value>
??</property>
????<property>
????<name>mapred.compress.map.output</name>
????<value>true</value>
??</property>
??<property>
????<name>mapred.map.output.compression.codec</name>
????<value>org.apache.hadoop.io.compress.GzipCodec</value>
??</property>
??<property>
????<name>mapred.output.compression.codec</name>
????<value>org.apache.hadoop.io.compress.GzipCodec</value>
??????</property>
ant
runtime/deploy/bin/nutch??inject??data_gzip_compress/crawldb??urls
?
以BZip2的壓縮方式注入 URL
vi?conf/nutch-site.xml
??<property>
????<name>mapred.output.compression.type</name>
????<value>BLOCK</value>
??</property>
??<property>
????<name>mapred.output.compress</name>
????<value>true</value>
??</property>
????<property>
????<name>mapred.compress.map.output</name>
????<value>true</value>
??</property>
??<property>
????<name>mapred.map.output.compression.codec</name>
????<value>org.apache.hadoop.io.compress.BZip2Codec</value>
??</property>
??<property>
????<name>mapred.output.compression.codec</name>
????<value>org.apache.hadoop.io.compress.BZip2Codec</value>
??????</property>
ant
runtime/deploy/bin/nutch??inject??data_bzip2_compress/crawldb??urls
?
以 S nappy的方式注入 URL
vi?conf/nutch-site.xml
??<property>
????<name>mapred.output.compression.type</name>
????<value>BLOCK</value>
??</property>
??<property>
????<name>mapred.output.compress</name>
????<value>true</value>
??</property>
????<property>
????<name>mapred.compress.map.output</name>
????<value>true</value>
??</property>
??<property>
????<name>mapred.map.output.compression.codec</name>
????<value>org.apache.hadoop.io.compress.SnappyCodec</value>
??</property>
??<property>
????<name>mapred.output.compression.codec</name>
????<value>org.apache.hadoop.io.compress.SnappyCodec</value>
??????</property>
ant
runtime/deploy/bin/nutch??inject??data_snappy_compress/crawldb??urls
壓縮類型的影響
塊大小的影響
3、Hadoop配置Snappy壓縮
下載解壓:
wget?? https://snappy.googlecode.com/files/snappy-1.1.0.tar.gz
tar??-xzvf??snappy-1.1.0.tar.gz
cd?snappy-1.0.5
編譯 :
./configure
make
make??install
復制庫文件:
scp??/usr/local/lib/libsnappy*??host2:/home/hadoop/hadoop-1.1.2/lib/native/Linux-amd64-64/
scp??/usr/local/lib/libsnappy*??host6:/home/hadoop/hadoop-1.1.2/lib/native/Linux-amd64-64/
scp??/usr/local/lib/libsnappy*??host8:/home/hadoop/hadoop-1.1.2/lib/native/Linux-amd64-64/
在每一臺集群機器上面修改環境變量:
vi??/home/hadoop/.bashrc
追加:
export??LD_LIBRARY_PATH=/home/hadoop/hadoop-1.1.2/lib/native/Linux-amd64-64
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
第十九講
1、Ganglia以組播方式監控同一個網段中的多個集群
vi??/etc/ganglia/gmetad.conf?
data_source?"cluster1"???10??host2?
data_source?"cluster2"???10??host6?
data_source?"cluster3"???10??host8
?
/etc/init.d/gmetad?restart
?
下面要分別指定節點使用的端口:
cluster1:
vi?/etc/ganglia/gmond.conf
指定集群名稱:
cluster?{
??name?=?"cluster1"
??owner?=?"unspecified"
??latlong?=?"unspecified"
??url?=?"unspecified"
}
指定端口:
udp_send_channel?{
??mcast_join?=?239.2.11.71
??port?=?8661
??ttl?=?1
}
udp_recv_channel?{
??mcast_join?=?239.2.11.71
??port?=?8661
??bind?=?239.2.11.71
}
/etc/init.d/ganglia-monitor?restart
?
cluster2:
vi?/etc/ganglia/gmond.conf
指定集群名稱:
cluster?{
??name?=?"cluster2"
??owner?=?"unspecified"
??latlong?=?"unspecified"
??url?=?"unspecified"
}
指定端口:
udp_send_channel?{
??mcast_join?=?239.2.11.71
??port?=?8662
??ttl?=?1
}
udp_recv_channel?{
??mcast_join?=?239.2.11.71
??port?=?8662
??bind?=?239.2.11.71
}
/etc/init.d/ganglia-monitor?restart
?
cluster3:
vi?/etc/ganglia/gmond.conf
指定集群名稱:
cluster?{
??name?=?"cluster3"
??owner?=?"unspecified"
??latlong?=?"unspecified"
??url?=?"unspecified"
}
指定端口:
udp_send_channel?{
??mcast_join?=?239.2.11.71
??port?=?8663
??ttl?=?1
}
udp_recv_channel?{
??mcast_join?=?239.2.11.71
??port?=?8663
??bind?=?239.2.11.71
}
/etc/init.d/ganglia-monitor?restart
?
2、Ganglia以單播方式監控同一個網段中的多個集群
vi??/etc/ganglia/gmetad.conf?
data_source?"cluster1"???10??host2?
data_source?"cluster2"???10??host6?
data_source?"cluster3"???10??host8
?
/etc/init.d/gmetad?restart
?
cluster1:
vi?/etc/ganglia/gmond.conf
指定集群名稱:
cluster?{
??name?=?"cluster1"
??owner?=?"unspecified"
??latlong?=?"unspecified"
??url?=?"unspecified"
}
指定接收數據的節點:
udp_send_channel?{
??#?mcast_join?=?239.2.11.71
??host?=?host2
??port?=?8649
??ttl?=?1
}
udp_recv_channel?{
??#?mcast_join?=?239.2.11.71
??port?=?8649
??#?bind?=?239.2.11.71
}?
/etc/init.d/ganglia-monitor?restart
?
?
cluster2:
vi?/etc/ganglia/gmond.conf
指定集群名稱:
cluster?{
??name?=?"cluster2"
??owner?=?"unspecified"
??latlong?=?"unspecified"
??url?=?"unspecified"
}
指定接收數據的節點:
udp_send_channel?{
??#?mcast_join?=?239.2.11.71
??host?=?host6
??port?=?8649
??ttl?=?1
}
udp_recv_channel?{
??#?mcast_join?=?239.2.11.71
??port?=?8649
??#?bind?=?239.2.11.71
}?
/etc/init.d/ganglia-monitor?restart
?
?
cluster3:
vi?/etc/ganglia/gmond.conf
指定集群名稱:
cluster?{
??name?=?"cluster3"
??owner?=?"unspecified"
??latlong?=?"unspecified"
??url?=?"unspecified"
}
指定接收數據的節點:
udp_send_channel?{
??#?mcast_join?=?239.2.11.71
??host?=?host8
??port?=?8649
??ttl?=?1
}
udp_recv_channel?{
??#?mcast_join?=?239.2.11.71
??port?=?8649
??#?bind?=?239.2.11.71
}
/etc/init.d/ganglia-monitor?restart
3、Ganglia監控不同網段中的多個集群
不同網段中的主機如果屬于同一個集群,則無法使用ganglia的多播配置方法,必須使用單播。
下面把host226加入cluster1:
在 host226 上安裝數據收集服務:
創建用戶和組:
addgroup??ganglia
adduser??--ingroup??ganglia??ganglia
安裝:
apt-get??install???ganglia-monitor
配置gmond:
vi?/etc/ganglia/gmond.conf
先找到 setuid?=?yes, 改成 setuid?=no;?
在找到 cluster 塊中的 name ,改成 name?=” cluster1”;?
指定端口(要注意剛才第一步演示組播的時候已經把UDP端口改為8661):
udp_send_channel?{
??mcast_join?=?239.2.11.71
??port?=?8661
??ttl?=?1
}
udp_recv_channel?{
??mcast_join?=?239.2.11.71
??port?=?8661
??bind?=?239.2.11.71
}
重啟服務:
/etc/init.d/ganglia-monitor?restart
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
第二十講
1、Ganglia以單播方式監控跨多個網段的單一集群
vi??/etc/ganglia/gmetad.conf?
data_source?"hadoop-cluster"???10??host6?
?
/etc/init.d/gmetad?restart
?
在集群的所有節點中指定以下配置:
vi?/etc/ganglia/gmond.conf
指定集群名稱:
cluster?{
??name?=?"hadoop-cluster"
??owner?=?"unspecified"
??latlong?=?"unspecified"
??url?=?"unspecified"
}
指定接收數據的節點:
udp_send_channel?{
??#?mcast_join?=?239.2.11.71
??host?=?host6
??port?=?8649
??ttl?=?1
}
udp_recv_channel?{
??#?mcast_join?=?239.2.11.71
??port?=?8649
??#?bind?=?239.2.11.71
}?
/etc/init.d/ganglia-monitor?restart
2、配置Hadoop集群使用單播地址
vi?conf/hadoop-metrics2.properties
設置內容為:
??#? 大于 0.20 以后的版本用 ganglia31??
*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
??*.sink.ganglia.period=10
??#?default?for?supportsparse?is?false
??*.sink.ganglia.supportsparse=true
?*.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both
?*.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40
??namenode.sink.ganglia.servers=host6
??datanode.sink.ganglia.servers=?host6
??jobtracker.sink.ganglia.servers=?host6
??tasktracker.sink.ganglia.servers=?host6
??maptask.sink.ganglia.servers=?host6
??reducetask.sink.ganglia.servers=?host6
??dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
??dfs.period=10
??dfs.servers=?host6
??mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
??mapred.period=10
??mapred.servers=?host6
??jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
??jvm.period=10
??jvm.servers=?host6
?
把配置文件復制到集群其他節點,重啟集群。
3、擴展集群,節點分別位于3個不同網段
將 host226 重新加入集群,并新增 host138
在 host6 和 host8 的 include 文件中加入 host226 和 host138
在 host6 和 host8 的 slaves 文件中加入 host226 和 host138
在新增的節點 host138 上面執行:
指定主機名
vi??/etc/hostname
指定主機名到 IP 地址的映射
vi??/etc/hosts
增加用戶和組
addgroup?hadoop
adduser?--ingroup?hadoop?hadoop?
更改臨時目錄權限
chmod?777?/tmp
在 host2 和 host8? 上面配置對 host138 的 SSH 登陸:
ssh-copy-id??-i??.ssh/id_rsa.pub??hadoop@host138?
在 host2 上將 hadoop 文件復制到 host138 :
scp?-r?/home/hadoop/hadoop-1.1.2??hadoop@host138:/home/hadoop/hadoop-1.1.2
?
如果集群已經在運行,則在 host226 和 host138 上面執行以下命令以動態增加節點:
hadoop-daemon.sh??start??datanode
hadoop-daemon.sh??start??tasktracker
4、配置host138
在 host138 上安裝數據收集服務:
創建用戶和組:
addgroup??ganglia
adduser??--ingroup??ganglia??ganglia
安裝:
apt-get??install???ganglia-monitor
配置gmond:
vi?/etc/ganglia/gmond.conf
指定集群名稱:
cluster?{
??name?=?"hadoop-cluster"
??owner?=?"unspecified"
??latlong?=?"unspecified"
??url?=?"unspecified"
}
指定接收數據的節點:
udp_send_channel?{
??#?mcast_join?=?239.2.11.71
??host?=?host6
??port?=?8649
??ttl?=?1
}
udp_recv_channel?{
??#?mcast_join?=?239.2.11.71
??port?=?8649
??#?bind?=?239.2.11.71
}?
/etc/init.d/ganglia-monitor?restart
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
