日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop 集群的三种方式

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop 集群的三种方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,Local(Standalone) Mode 單機模式

$ mkdir input$ cp etc/hadoop/*.xml input$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output 'dfs[a-z.]+'$ cat output/*

解析$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output 'dfs[a-z.]+'
input 夾下面的文件 :capacity-scheduler.xml? core-site.xml? hadoop-policy.xml? hdfs-site.xml? httpfs-site.xml? yarn-site.xml

bin/hadoop hadoop 命令
jar 這個命令在jar包里面
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar 具體位置
grep grep 函數
input grep 函數的目標文件夾
output grep 函數結果的輸出文件夾
'dfs[a-z.]+' grep 函數的匹配正則條件

直譯:將input文件下面的文件中包含 'dfs[a-z.]+'?的字符串給輸出到output 文件夾中
輸出結果:part-r-00000? _SUCCESS
cat part-r-00000:1 dfsadmin
在hadoop-policy.xml?存在此字符串

?2,Pseudo-Distributed Operation 偽分布式

在 etc/hadoop/core.site.xml 添加以下屬性
<
configuration><property><name>fs.defaultFS</name><value>hdfs://hella-hadoop.chris.com:8020</value> hella-hadoop.chris.com是主機名,已經和ip相互映射</property>

還需要覆蓋默認的設定,mkdir -p data/tmp
??? <property>
??????? <name>hadoop.tmp.dir</name>
??????? <value>/opt/modules/hadoop-2.5.0/data/tmp</value>?? hella-hadoop.chris.com是主機名,已經和ip相互映射
??? </property>

垃圾箱設置刪除文件保留時間(分鐘)
??? <property>
??????? <name>fs.trash.interval</name>
??????? <value>10080</value>
??? </property>

</configuration>

etc/hadoop/hdfs-site.xml: 偽分布式1個備份
<configuration>
??? <property>
??????? <name>dfs.replication</name>
??????? <value>1</value>
??? </property>
配置從節點
? <property>
??????? <name>dfs.namenode.secondary.http-address</name>
??????? <value>主機名:50090</value>
??? </property>?
</configuration>

?格式化元數據,進入到安裝目錄下

bin/hdfs namenode -format

啟動namenode,所有的命令都在sbin下,通過ls sbin/?? 可以查看

sbin/hadoop-daemon.sh start namenode??? hadoop 的守護線程啟動(主數據)

sbin/hadoop-daemon.sh start datanode???? 啟動datanode(從數據)

nameNode都有個web網頁,端口50070

創建hdfs 文件夾,創建在用戶名下面

bin/hdfs dfs -mkdir -p /user/chris

查看文件夾

bin/hdfs dfs -ls -R /???? 回調查詢

本地新建文件夾mkdir wcinput???mkdir wcoutput?? vi wc.input創建wc.input文件,并寫入內容

hdfs文件系統新建文件夾

bin/hdfs dfs -mkdir -p /user/chris/mapreduce/wordcount/input

本地文件上傳hdfs文件系統

bin/hdfs dfs? -put wcinput/wc.input /user/chris/mapreduce/wordcount/input/

在hdfs文件系統上使用mapreduce

$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount?/user/chris/mapreduce/wordcount/input /user/chris/mapreduce/wordcount/output

紅色代表:讀取路徑

藍色代表:輸出路徑

所以mapreduce的結果已經寫到了hdfs的輸出文件里面去了

Yarn on a Single Node

/opt/modules/hadoop-2.5.0/etc/hadoop/yarn-site.xml 在hadoop的安裝路徑下 <configuration><property><name>yarn.resourcemanager.hostname</name><value>hella-hadoop.chris.com</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property> </configuration>

yarn 的配置已經完成

在同一目錄下slave文件上添加主機名或者主機ip,默認是localhost

yarn-env.sh 和 mapred-env.sh把JAVA_HOME 更改下,防止出錯

export JAVA_HOME=/home/chris/software/jdk1.8.0_201

將mapred-site.xml.template 重命名為mapred-site.xml,同時添加以下配置

<configuration><property><name>mapreduce.framework.name</name><value>yarn</name></property> </configuration>

先將/user/chris/mapreduce/wordcount/output/刪除

再次執行$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount?/user/chris/mapreduce/wordcount/input /user/chris/mapreduce/wordcount/output

偽分布式執行完畢,mapreduce 執行在了yarn 上

?

3,完全分布式

???基于偽分布式,配置好一臺機器后,分發至其它機器

??? step1: 配置ip 和 hostname 映射

???????? vi /etc/hosts

???????? 192.168.178.110 hella-hadoop.chris.com hella-hadoop

???????? 192.168.178.111 hella-hadoop02.chris.com hella-hadoop02

???????? 192.168.178.112 hella-hadoop03.chris.com hella-hadoop03

???? 同時在window以下路徑也得設置

???????? C:\Windows\System32\drivers\etc\hosts

???????? 192.168.178.110 hella-hadoop.chris.com hella-hadoop

???????? 192.168.178.111 hella-hadoop02.chris.com hella-hadoop02

???????? 192.168.178.112 hella-hadoop03.chris.com hella-hadoop03

??????具體可參考linux ip hostname 映射

????? https://www.cnblogs.com/pickKnow/p/10701914.html

step2:部署(假設三臺機器)

不同機器配置不同的節點

部署:hella-hadoop hella-hadoop02 hella-hadoop03 HDFS:NameNodeDataNode DataNode DataNodeSecondaryNameNode YARN:ResourceManagerNodeManager NodeManager NodeManager MapReduce:JobHistoryServer配置:* hdfshadoop-env.sh core.site.xmlhdfs-site.xmlslaves*yarnyarn-env.shyarn-site.xmlslaves*mapreducemapred-env.shmapred-site.xml

step3:修改配置文件

core.xml<configuration><property><name>fs.defaultFS</name><value>hdfs://hella-hadoop.chris.com:8020</value></property><property><name>hadoop.tmp.dir</name><value>/opt/app/hadoop-2.5.0/data/tmp</value></property><property><name>fs.trash.interval</name><value>10080</value></property></configuration>

?

hdfs-site.xml <configuration><property><name>dfs.namenode.secondary.http-address</name><value>hella-hadoop03.chris.com:50090</value></property> </configuration> slaveshella-hadoop.chris.com hella-hadoop02.chris.com hella-hadoop03.chris.com yarn-site.xml<configuration><property><name>yarn.resourcemanager.hostname</name><value>hella-hadoop02.chris.com</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!--NodeManager Resouce --><property><name>yarn.nodemanager.resource.memory-mb</name><value>4096</value></property><property><name>yarn.nodemanager.resource.cpu-vcores</name><value>4</value></property><property><name>yarn.log-aggregation-enable</name><value>true</value></property><property><name>yarn.log-aggregation-retain-seconds</name><value>640800</value></property></configuration> mapred-site.xml<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.jobhistory.address</name><value>hella-hadoop.chris.com:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>hella-hadoop.chris.com:19888</value></property> </configuration

step4:集群的配置路徑在各個機器上要一樣,用戶名一樣

step5: 分發hadoop 安裝包至各個機器節點

? ? ? scp -p 源節點 目標節點?

? ? ? 使用scp 命令需要配置ssh 無密鑰登陸,博文如下:

??https://www.cnblogs.com/pickKnow/p/10734642.html

step6:啟動并且test mapreduce

?? 可能會有問題No route to Host 的Error,查看hostname 以及 ip 配置,或者是防火墻有沒有關閉

防火墻關閉,打開,狀態查詢,請參考以下博文:

https://www.cnblogs.com/pickKnow/p/10670882.html

?

4,完全分布式+? HA?

HA全稱:HDFS High Availability Using the Quorum Journal Manager 即 HDFS高可用性通過配置分布式日志管理

HDFS集群中存在單點故障(SPOF),對于只有一個NameNode 的集群,若是NameNode 出現故障,則整個集群無法使用,知道NameNode 重新啟動。

HDFS HA 功能則通過配置Active/StandBy 兩個NameNodes 實現在集群中對NameNode 的熱備來解決上述問題,如果出現故障,如機器崩潰或機器需要升級維護,這時可以通過此種方式將NameNode很快的切換到另一臺機器.

?? 在以上的分布式配置如下:假設有三臺機器

?? 配置要點:

? ? ?? * share edits

? ? ? ? ? ? ?? JournalNode

? ? ?? *NameNode

? ? ? ? ? ? ?? Active,Standby

? ? ?? *Client

? ? ? ? ? ? ? proxy

? ? ? ? *fence

? ? ? ? ? ? ? 隔離,同一時刻只能僅有一個NameNode對外提供服務

?

? ? 規劃集群:

? ? ? ? ? ? hella-hadoop.chris.com ? ? ? ? ? hella-hadoop02.chris.com ? ? ? ? hella-hadoop03.chris.com

? ? ? ? ? ? NameNode ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NameNode

? ? ? ? ? ? JournalNode ? ? ? ? ? ? ? ? ? ? ? ? ? ? JournalNode ? ? ? ? ? ? ? ? ? ? ? ? ? ? JournalNode

? ? ? ? ? ? DateNode ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? DateNode ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DateNode

因為NameNode有兩個,一個備份,所以就不需要secondarynamenode了

配置:

core-site.xml

<property><name>fs.defaultFS</name><value>hdfs://ns1</value></property>

hdfs-site.xml

<!-- 代表一個nameservice --><property><name>dfs.nameservices</name><value>ns1</value></property><!-- ns1 有兩個namenode --><property><name>dfs.ha.namenodes.ns1</name><value>nn1,nn2</value></property><!-- 分別配置namenode的地址 --><property><name>dfs.namenode.rpc-address.ns1.nn1</name><value>hella-hadoop.chris.com:8020</value></property><property><name>dfs.namenode.rpc-address.ns1.nn2</name><value>hella-hadoop02.chris.com:8020</value></property><!-- 分別配置namenode web 端地址 --><property><name>dfs.namenode.http-address.ns1.nn1</name><value>hella-hadoop.chris.com:50070</value></property><property><name>dfs.namenode.http-address.ns1.nn2</name><value>hella-hadoop02.chris.com:50070</value></property><!-- NameNode Shared Edits Address 即 journal node 地址 --> <property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://hella-hadoop.chris.com:8485;hella-hadoop02.chris.com:8485;hella-hadoop03.chris.com:8485/ns1</value></property><!-- journal node 目錄--> <property><name>dfs.journalnode.edits.dir</name><value>/opt/app/hadoop-2.5.0/data/dfs/jn</value></property><!-- HDFS 代理客戶端 --> <property><name>dfs.client.failover.proxy.provider.ns1</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- fence 隔離 只允許一個namenode 激活 --> <!-- 如果使用fence ssh 隔離,要求機器namenode 的機器能夠相互無密鑰登陸--> <property><name>dfs.ha.fencing.methods</name><value>sshfence</value></property><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/home/chris/.ssh/id_rsa</value></property>

配置完畢,分發到其他的兩臺機器,開始啟動

step1:在各個JournalNode 節點桑,輸入以下命令啟動journalnode 服務

? ?? $sbin/hadoop-daemon.sh start journalnode

step2:在【nn1】上,對其進行格式化,并啟動:

? ?? $bin/hdfs namenode-format

? ?? $sbin/hadoop-daemon.sh start namenode

step3:在【nn2】上,同步nn1的元數據信息:

? ?? $bin/hdfs namenode-bootstrapStandby

step4:啟動【nn2】

? ?? $sbin/hadoop-daemon.sh start namenode

step5:將【nn1】切換為Active

? ?? $bin/hdfs haadmin-transitionToActive nn1

step6:在【nn1】上,啟動所有的datanode

? ?? $sbin/hadoop-daemon.sh start datanode

4,完全分布式+? HA? + zookeeper

?只配置HA,只是手動的故障轉移,要想做到自動的故障轉移,需要通過zookeeper 對集群的服務進行一個監控

?zookeeper的作用:
? ?? * 啟動以后兩個namenode 都是standby

? ? ? ? ? ? zookeeper 選舉一個為Active

? ?? *監控

? ? ? ? ? ? ZKFC:zookeeper failover controller

集群的守護進程更新如下:

? ? ? ? ? ? hella-hadoop.chris.com ? ? ? ? ? hella-hadoop02.chris.com ? ? ? ? hella-hadoop03.chris.com

? ? ? ? ? ? NameNode ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NameNode

? ? ? ? ? ? ZKFC ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ZKFC

? ? ? ? ? ? JournalNode ? ? ? ? ? ? ? ? ? ? ? ? ? ? JournalNode ? ? ? ? ? ? ? ? ? ? ? ? ? ? JournalNode

? ? ? ? ? ? DateNode ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? DateNode ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DateNode

ZKFC用來監控namenode

?

開始配置:

core-site.xml

<!--zookeeper集群配置--> <property><name>ha.zookeeper.quorum</name><value>hella-hadoop.chris.com:2181,hella-hadoop02.chris.com:2181,hella-hadoop03.chris.com:2181</value></property>

hdfs-site.xml

<!-- failover 故障自動轉移,依靠zookeeper 集群,zookeeper 配置在core --> <property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property>

配置完畢,開始啟動并且驗證:

? ? ?step1:關閉所有的HDFS 服務 sbin/stop-dfs.sh

? ? ?step2: 啟動Zookeeper集群 bin/zkServer.sh start

? ? ?step3: 初始化HA 在Zookeeper中的狀態 bin/hdfs zkfc -formatZK

? ? ?step4:啟動HDFS服務sbin/start-dfs.sh

? ? ?stepc5:在各個NameNode 節點上啟動DFSZK Failover Controller,先在那臺機器啟動,那臺機器的NameNode就是Active NameNode?

? ? ? ? ? ? ? ? ?sbin/hadoop-daemon.sh start zkfc

? ? ?驗證:

? ? ? jps 查看進程,可以將Active的進程kill, kill -9 pid

? ? ? 可以通過50070端口號在網頁上直接查看,也可以通過命令查看namenode 是否實現故障自動轉移,本來是standby 的namenode 轉化為active

?

轉載于:https://www.cnblogs.com/pickKnow/p/10701433.html

總結

以上是生活随笔為你收集整理的Hadoop 集群的三种方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。