#####
公司專注于為企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、商城網(wǎng)站開(kāi)發(fā),成都微信小程序,軟件定制網(wǎng)站設(shè)計(jì)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗(yàn),我們會(huì)仔細(xì)了解各客戶的需求而做出多方面的分析、設(shè)計(jì)、整合,為客戶設(shè)計(jì)出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)公司更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。
####安裝hadoop2.6.0完全分布式集群
#####
####文件及系統(tǒng)版本:
####
hadoop-2.6.0
Java version 1.8.0_77
centos 64位
####預(yù)備
####
在/home/hadoop/下:mkdir Cloud
把java和hadoop安裝包放在/home/hadoop/Cloud下
####配置靜態(tài)ip
####
master192.168.116.100
slave1192.168.116.110
slave2192.168.116.120
####修改機(jī)器相關(guān)名稱(都是在root權(quán)限下)
####
su root
vim /etc/hosts
在原信息下輸入:(空格+tab鍵)
192.168.116.100 master
192.168.116.110 slave1
192.168.116.120 slave2
vim /etc/hostname
master
shutdown -r now (重啟機(jī)器)
vim /etc/hostname
slave1
shutdown -r now
vim /etc/hostname
slave2
shutdown -r now
####安裝openssh
####
su root
yum install openssh
ssh-keygen -t rsa
然后一直確認(rèn)
把slave1和slave2的公鑰發(fā)給master:
scp /home/hadoop/.ssh/id_rsa.pub hadoop@master:~/.ssh/slave1.pub
scp /home/hadoop/.ssh/id_rsa.pub hadoop@master:~/.ssh/slave2.pub
在master下: cd .ssh/
cat id_rsa.pub >> authorized_keys
cat slave1.pub >> authorized_keys
cat slave2.pub >> authorized_keys
把公鑰包發(fā)給slave1和slave2:
scp authorized_keys hadoop@slave1:~/.ssh/
scp authorized_keys hadoop@slave2:~/.ssh/
ssh slave1
ssh slave2
ssh master
相應(yīng)的輸入yes
到這里ssh無(wú)密碼登錄配置完成
####
####設(shè)計(jì)JAVA_HOME HADOOP_HOME
####
su root
vim /etc/profile
輸入:
export JAVA_HOME=/home/hadoop/Cloud/jdk1.8.0_77
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/home/hadoop/Cloud/hadoop-2.6.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
然后source /etc/profile
(三臺(tái)都要配置)
####
####配置hadoop文件
####
在/home/hadoop/Cloud/hadoop-2.6.0/sbin下:
vim hadoop-daemon.sh
修改pid的路徑
vim yarn-daemon.sh
修改pid的路徑
在/home/hadoop/Cloud/hadoop-2.6.0/etc下:
vim slaves 輸入:
master
slave1
slave2
vim hadoop-env.sh 輸入:
export JAVA_HOME=/home/hadoop/Cloud/jdk1.8.0_77
export HADOOP_HOME_WARN_SUPPRESS="TRUE"
vim core-site.xml 輸入:
###############################################core
#################################################core
vim hdfs-site.xml
######################################################hdfs
#######################################################hdfs
vim mapred-site.xml
######################################mapred
######################################mapred
把配置好的hadoop發(fā)送到slave1和slave2
scp -r hadoop-2.6.0 hadoop@slave1:~/Cloud/
scp -r hadoop-2.6.0 hadoop@slave2:~/Cloud/
把Java包發(fā)到slave1和slave2:
scp -r jdk1.8.0_77 hadoop@slave1:~/Cloud/
scp -r jdk1.8.0_77 hadoop@slave2:~/Cloud/
到這里,hadoop集群配置完成
########
########現(xiàn)在可以啟動(dòng)hadoop
########
首先格式化namenode
hadoop namenode -format (由于前面設(shè)計(jì)了hadoop-env.sh和系統(tǒng)環(huán)境,所以在任意目錄下都可以執(zhí)行)
查看日志沒(méi)錯(cuò)的話往下
start-all.sh
然后
完整的的話通過(guò)jps查看:
[hadoop@master ~]$ jps
42306 ResourceManager
42407 NodeManager
42151 SecondaryNameNode
41880 NameNode
41979 DataNode
[hadoop@slave1 ~]$ jps
21033 NodeManager
20926 DataNode
[hadoop@slave2 ~]$ jps
20568 NodeManager
20462 DataNode
至此,hadoop-2.6.0完全分布式配置完成。
下面是hadoop的瀏覽器端口號(hào):
localhost:50070
localhost:8088
########
########配置C的API連接HDFS
########
find / -name libhdfs.so.0.0.0
vi /etc/ld.so.conf
寫(xiě)入:
/home/hadoop/Cloud/hadoop-2.6.0/lib/native/
/home/hadoop/Cloud/jdk1.8.0_77/jre/lib/amd64/server/
然后設(shè)計(jì)啟動(dòng)加載:
/sbin/ldconfig –v
接著配置環(huán)境變量:
查找并打印:
find /home/hadoop/Cloud/hadoop-2.6.0/share/ -name *.jar|awk '{ printf("export CLASSPATH=%s:$CLASSPATH\n", $0); }'
會(huì)看到打印的內(nèi)容如:
export CLASSPATH=/home/hadoop/Cloud/hadoop-2.6.0/share/hadoop/common/lib/activation-1.1.jar:$CLASSPATH
export CLASSPATH=/home/hadoop/Cloud/hadoop-2.6.0/share/hadoop/common/lib/jsch-0.1.42.jar:$CLASSPATH
。。。。。。
把打印的全部?jī)?nèi)容添加到環(huán)境變量vim /etc/profile
然后編寫(xiě)C語(yǔ)言代碼驗(yàn)證是否配置成功:
vim above_sample.c
代碼內(nèi)容如下:
#################################################################################
#include"hdfs.h"
#include
#include
#include
int main(int argc, char **argv) {
hdfsFS fs =hdfsConnect("192.168.116.100", 9000); //在這里做了一點(diǎn)修改
const char* writePath ="/tmp/testfile.txt";
hdfsFile writeFile = hdfsOpenFile(fs,writePath, O_WRONLY|O_CREAT, 0, 0, 0);
if(!writeFile) {
fprintf(stderr, "Failed toopen %s for writing!\n", writePath);
exit(-1);
}
char* buffer = "Hello,World!";
tSize num_written_bytes = hdfsWrite(fs,writeFile, (void*)buffer, strlen(buffer)+1);
if (hdfsFlush(fs, writeFile)) {
fprintf(stderr, "Failed to'flush' %s\n", writePath);
exit(-1);
}
hdfsCloseFile(fs, writeFile);
}
###############################################################################
編譯C語(yǔ)言代碼:
gcc above_sample.c -I /home/hadoop/Cloud/hadoop-2.6.0/include/ -L /home/hadoop/Cloud/hadoop-2.6.0/lib/native/ -lhdfs /home/hadoop/Cloud/jdk1.8.0_77/jre/lib/amd64/server/libjvm.so -o above_sample
執(zhí)行編譯完成生成的above_sample文件:
./above_sample
查看日志和hadoop文件目錄是否生成了testfile文件
至此,C語(yǔ)言的API連接HDFS配置完成
#########
#######集群的文件操作
########
###(自動(dòng)分發(fā)腳本)auto.sh
vim auto.sh
chmod +x auto.sh
./auto.sh jdk1.8.0_77 ~/Cloud/
自動(dòng)分發(fā)腳本
############################
#!/bin/bash
nodes=(slave1 slave2)
num=${#nodes[@]}
file=$1
dst_path=$2
for((i=0;i<${num};i++));do
scp -r ${file} ${nodes[i]}:${dst_path};
done;
####################
##### #####hadoop-2.6.0完全分布式集群基本操作 ##### hdfs dfs -mkdir /input echo "hello hadoop" > test1.txt 把當(dāng)前目錄的所有文件導(dǎo)入hdfs的in目錄: hadoop dfs -put / in hadoop dfs -ls /in/* hadoop dfs -cp /in/test1.txt /in/test1.txt.bak hadoop dfs -ls /in/* hadoop dfs -rm /in/test1.txt.bak mkdir dir_from_hdfs 從hdfs下載目錄in中的全部文件放到dir_from_hdfs中: hadoop dfs -get /in/* /dir_from_hdfs cd /home/hadoop/Cloud/hadoop-1.2.1 以空格為分隔,統(tǒng)計(jì)in目錄中的所有文本文件的單詞數(shù)目(注意output/wordcount目錄不可以為存在的目錄): hadoop jar hadoop-examples-2.6.0.jar wordcount in /output/wordcount 查看統(tǒng)計(jì)結(jié)果: hadoop fs -cat output/wordcount/part-r-00000 #### ####管理 #### 1.集群相關(guān)管理: edit log:修改日志,當(dāng)文件系統(tǒng)客戶端client進(jìn)行寫(xiě)操作的時(shí)候,我們就要把這條記錄放在修改日志中。在記錄了修改日志后,NameNode則修改內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)。每次寫(xiě)操作成功之前,edit log都會(huì)同步到文件系統(tǒng)中 fsp_w_picpath:命名空間鏡像,它是內(nèi)存中的元數(shù)據(jù)在硬盤上的checkpoint。當(dāng)NameNode失敗的時(shí)候,最新的checkpoint的元數(shù)據(jù)信息就會(huì)從fsp_w_picpath加載到內(nèi)存中,然后注意重新執(zhí)行修改日志中的操作。而Secondary NameNode就是用來(lái)幫助元數(shù)據(jù)節(jié)點(diǎn)將內(nèi)存中的元數(shù)據(jù)信息checkpoint到硬盤上的。 2.集群屬性: 優(yōu)點(diǎn): 1)能夠處理超大的文件; 2)流式訪問(wèn)數(shù)據(jù)。HDFS能夠很好的處理“一次寫(xiě)入,多次讀寫(xiě)”的任務(wù)。也就是說(shuō),一個(gè)數(shù)據(jù)集一旦生成了,就會(huì)被復(fù)制到不同的存儲(chǔ)節(jié)點(diǎn)中,然后響應(yīng)各種各樣的數(shù)據(jù)分析任務(wù)請(qǐng)求。在多數(shù)情況下,分析任務(wù)都會(huì)涉及到數(shù)據(jù)集中的大部分?jǐn)?shù)據(jù)。所以,HDFS請(qǐng)求讀取整個(gè)數(shù)據(jù)集要比讀取一條記錄更加高效。 缺點(diǎn): 1)不適合低延遲數(shù)據(jù)訪問(wèn):HDFS是為了處理大型數(shù)據(jù)集分析任務(wù)的,主要是為達(dá)到大數(shù)據(jù)分析,所以延遲時(shí)間可能會(huì)較高。 2)無(wú)法高效存儲(chǔ)大量小文件:因?yàn)镹amenode把文件系統(tǒng)的元數(shù)據(jù)放置在內(nèi)存中,所以文件系統(tǒng)所能容納的文件數(shù)目是由Namenode的內(nèi)存大小來(lái)決定。 3)不支持多用戶寫(xiě)入以及任意修改文件:在HDFS的一個(gè)文件中只有一個(gè)寫(xiě)入者,而且寫(xiě)操作只能在文件末尾完成,即只能執(zhí)行追加操作。目前HDFS還不支持多個(gè)用戶對(duì)同一文件的寫(xiě)操作,以及在文件任意位置進(jìn)行修改。