我們之前已經解釋過了分布式存儲,分布式存儲有很多的解決方案,其中有個開源程序叫做HDFS,HDFS+MAPREDUCE=hadoop。
hadoop不算是單存的分布式存儲,我們之前提到的Mogilefs和Fastdfs都是分布式存儲。hadoop屬于分布式計算,MAPREDUCE是一個編程的框架,使得程序可以并行計算。
HDFS適用于存儲單個大文件,在存儲中內置塊大小為64M,會將大文件分片存儲,同時也支持存儲海量的文件。
MAPREDUCE就是基于上面存儲的文件進行處理,分析。
上面提到了hadoop是由mapreduce+hdfs組成,因此他也是兩個集群,hdfs分成了一個主節點和N個從節點,從節點主要用于存儲數據,主節點存儲從節點的元數據信息,有點類似于之前介紹的fastdfs由從節點向主節點匯報自己的狀態,存儲的文件等等。mapreduce(hadoop2.0以后)也分為了兩塊,一塊稱為RM(resource manager)一般運行與單個主機上,一塊稱為NM(node manager)運行在每個存儲節點之上,RM負責接收用戶的任務,并將任務發往NM之上,在NM之上又會生成一個AM(application manager),再由AM管理具體任務的執行。
接下來就來簡單配置一個偽分布式的hadoop(因為上述所有進程都運行在一個主機上,因此命名為偽分布式)
下載官網的tar包。
hadoop運行與java虛擬機之上,所以先得去配置java環境
[root@localhost ~]# yum -y install java-1.8.0-openjdk-devel java-1.8.0-openjdk
[root@localhost ~]# vi /etc/profile.d/java.sh
[root@localhost ~]# cat /etc/profile.d/java.sh
export JAVA_HOME=/usr #此處指明java目錄即可,hadoop在運行時會自動找java目錄下bin/java
export HADOOP_PREFIX=/usr/local/hadoop-2.7.1
export PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbin
export HADOOP_YARN_HOME=${HADOOP_PREFIX}
export HADOOP_MAPPERD_HOME=${HADOOP_PREFIX}
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
配置java以及hadoop配置環境
編輯hadoop目錄中etc/hadoop/core-site.xml文件,添加一下內容。
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:8020</value>
<final>true</final>
</property>
hadoop的配置文件格式name相當于一個指令,value就是指令值。
同目錄下yarn.site.xml添加此段
<property>
<name>yarn.resourcemanager.address</name>
<value>localhost:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>localhost:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>localhost:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>localhost:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.20.105:8088</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
同目錄下hdfs.site.xml添加此段
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hdfs/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hdfs/dn</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>file:///data/hdfs/snn</value>
</property>
<property>
<name>fs.checkpoint.edits.dir</name>
<value>file:///data/hdfs/snn</value>
</property>
[root@localhost hadoop-2.7.1]# cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
[root@localhost hadoop-2.7.1]# vi etc/hadoop/mapred-site.xml
復制此模板文件,并編輯此文件,添加如下內容
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
所有配置文件就準備好了,每個配置文件中都有很多參數,具體參數詳情查看以下官方文檔。(網上也有很多別人翻譯好的)
http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/core-default.xml
http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
http://hadoop.apache.org/docs/r2.7.3/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
http://hadoop.apache.org/docs/r2.7.3/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
創建配置文件中指定的目錄
[root@localhost sbin]# mkdir /data/hdfs/{nn,sn,dn} -pv
[root@localhost hadoop-2.7.1]# mkdir logs #創建日志目錄,日志會保存到這里
[root@localhost hadoop-2.7.1]# hdfs namenode -format #格式化NN
看到箭頭那行證明格式化成功,接著啟動所有服務
[root@localhost hadoop-2.7.1]# hadoop-daemons.sh start datanode
[root@localhost hadoop-2.7.1]# hadoop-daemons.sh start name
[root@localhost hadoop-2.7.1]# yarn-daemon.sh start resourcemanager
[root@localhost hadoop-2.7.1]# yarn-daemon.sh start nodemanager
啟動服務時回要求輸入密碼,因為默認是通過ssh協議鏈接到個節點的主機上啟動,另外啟動secondary時會報錯提示找不到secondary節點,這里我們不用管它
[root@localhost hadoop-2.7.1]# vi etc/hadoop/hadoop-env.sh #啟動服務時提示找不到JAVAHOME ,我核實了多遍,發現沒有問題,結果發現這個文件里面定義了一個JAVA_HOME,把他改一下即可
接著可以看到起來了一大堆端口,其中關注最多的應該是
50070:監控存儲節點的web接口
8088:監控運行任務的web接口
其他80的基本是程序員寫程序調用的接口
其他50的基本是hdfs通訊所用到的接口
存儲的狀態界面
運行任務的狀態界面
實際應用中出于安全考慮應該以普通用戶的身份啟動各服務。
有一點沒需求,就當是學習完整理下思路。
原創文章,作者:N24_Ghost,如若轉載,請注明出處:http://www.www58058.com/71067
對hadoop的基礎配置描述的非常詳細清晰,繼續加油。