溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

centos6.5下部署用于生產(chǎn)的hadoop,并使用C語(yǔ)言API連接hadoop

發(fā)布時(shí)間:2020-07-05 22:53:12 來(lái)源:網(wǎng)絡(luò) 閱讀:439 作者:clear_path 欄目:大數(shù)據(jù)


#####

####安裝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

<configuration>


 <property>


<name>io.native.lib.avaliable</name>


<value>true</value>


</property>


<property>


<name>fs.default.name</name>


<value>hdfs://master:9000</value>


<final>true</final>


</property>


<property>


<name>hadoop.tmp.dir</name>


<value>/home/hadoop/Cloud/workspace/temp</value>


</property>


</configuration>

#################################################core


vim  hdfs-site.xml

######################################################hdfs

<configuration>


<property>


<name>dfs.replication</name>


<value>3</value>


</property>


<property>


<name>dfs.permissions</name>


<value>false</value>


</property>


<property>


<name>dfs.namenode.name.dir</name>


<value>/home/hadoop/Cloud/workspace/hdfs/data</value>


<final>true</final>


</property>


<property>


<name>dfs.namenode.dir</name>


<value>/home/hadoop/Cloud/workspace/hdfs/name</value>


</property>


<property>


<name>dfs.datanode.dir</name>


<value>/home/hadoop/Cloud/workspace/hdfs/data</value>


</property>


<property>


<name>dfs.webhdfs.enabled</name>


<value>true</value>


</property>


</configuration>

#######################################################hdfs


vim mapred-site.xml


######################################mapred

<configuration>


<property>

   <name>mapred.job.tracker</name>

      <value>master:9001</value>

        </property>


</configuration>

######################################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<stdio.h>


#include<stdlib.h>


#include<string.h>


 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ù)在硬盤(pán)上的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到硬盤(pán)上的。

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)行修改。



向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI