標籤:
轉寄請註明本文連結
準備工作:
VMware-workstation (網路統一設定為橋接)
Xshell或者putty (方便在Windows下進行操作,複製粘貼命令方便,更推薦用第一個,以後不需要輸入IP地址和帳號密碼了)
FileZilla (傳輸檔案,連接埠22,使用SFTP協議)
環境為
Centos6.5 X86 minimal
Hadoop1.2.1
jdk-8u73-linux-i586
先配置偽分布式,把偽分布式跑起來再升級為完全分布模式
註:192.168.67.57 是Master節點主機。
以下操作在root使用者下進行
一、在linux系統建立目錄
mkdir /opt
把hadoop-1.2.1-bin.tar 、jdk-8u73-linux-i586.rpm上傳到/opt目錄下
在/opt目錄下安裝hadoop會減少不必要麻煩
二、設定靜態ip
vi /etc/sysconfig/network-scripts/ifcfg-eth0
三、關閉防火牆
vi /etc/selinux/config 設定 SELINUX=disabled
此外,輸入以下命令
service iptables status --查看防火牆狀態
service iptables stop --關閉防火牆
service ip6tables stop --關閉防火牆
chkconfig ip6tables off --設定防火牆開機自關閉
chkconfig iptables off --設定防火牆開機自關閉
chkconfig iptables --list --查看防火牆服務狀態列表
chkconfig ip6tables --list --查看防火牆服務狀態列表
#iptables 和 ip6tables一樣,都是linux防火牆軟體,不同的是ip6tables採用的TCP/ip協議為IP6.
四、修改hosts,該主機設定為Master
vi /etc/hosts 添加
192.168.67.57 Master
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=Master
五、 增加使用者組,使用者
groupadd hadoop
useradd –g hadoop hadoop
passwd hadoop
六、安裝java,並且配置java環境
我使用的是rpm安裝包,簡化安裝
rpm -ivh jdk-8u73-linux-i586.rpm
安裝目錄為 /usr/java/jdk1.8.0_73
將該安裝目錄複寫出來,方便後面配置環境
vi /etc/profile
在最下面加入
export JAVA_HOME=/usr/java/jdk1.8.0_73
export JRE_HOME=/usr/java/jdk1.8.0_73/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
儲存退出,執行以下命令使配置生效!
[[email protected] ~]#chmod +x /etc/profile ;增加執行許可權
[[email protected] ~]#source /etc/profile;使配置生效!
以上操作都在root使用者下完成。
七、設定SSH免密碼登陸,切換到hadoop使用者
先檢查一下是否有ssh和rsync工具
rpm -qa |grep ssh
rpm -qa |grep rsync(可有可無,有更好)
沒有ssh和rsync工具的話使用下面命令進行安裝:
yum install ssh #安裝SSH
yum install rsync #(rsync是一個遠端資料同步工具,可通過LAN/WAN快速同步多台主機間的檔案)
service sshd restart #啟動SSH服務
ssh-keygen -t rsa # 會有提示,都按斷行符號就可以
cat id_rsa.pub >> authorized_keys # 加入授權
chmod 600 ./authorized_keys # 修改檔案許可權,否則無法免密碼登陸
chmod 700 ~/.ssh #修改目錄許可權
八、安裝hadoop
cd /opt #進入opt目錄
tar -zxf /opt/hadoop-1.2.1-bin.tar.gz -C /opt #解壓
mv hadoop-1.2.1 hadoop #重新命名
chown -R hadoop:hadoop hadoop #更改所屬使用者,十分重要
九、嘗試單機模式
hadoop預設的模式就是非分布式模式,只需配置java環境,無需hadoop配置就可以運行
cd /opt/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input # 將設定檔作為輸入檔案
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output ‘dfs[a-z.]+‘
cat ./output/*
hadoop不能覆蓋結果檔案,所以先刪除 ./output ,下次運行上面的例子就不會報錯。
rm -r ./output
十、配置hadoop
(1)vi /etc/profile
添加下面內容
# Hadoop Environment Variables
export HADOOP_HOME=/opt/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
————————————————————————————————
下面進入hadoop的設定檔夾
cd /opt/hadoop/conf/
(2)配置 hadoop-env.sh
vi hadoop-env.sh 在最下面添加
export JAVA_HOME=/usr/java/jdk1.8.0_73
export HADOOP_HOME_WARN_SUPPRESS=1 #我的環境在格式化namenode時出現過Warning: $HADOOP_HOME is deprecated.,這句根據情況
(3)配置 core-site.xml
vi core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.67.57:9000</value>
</property>
</configuration>
(4)配置hdfs-site.xml
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
(5)配置mapred-site.xml
vi mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>http://192.168.67.57:9001</value>
</property>
</configuration>
(6)配置masters 和 slaves檔案(這部可以省略)
全部清空,再添加Master的ip地址
(7)格式化
cd /opt/hadoop
hadoop namenode -format
start-all.sh
(8)查看運行狀態
jps
這樣就啟動成功了
十一、執行樣本程式
hadoop基本操作命令
(1)列出檔案(hdfs是系統中的系統)
hadoop fs -ls /
(2)關閉hadoop
stop-all.sh
(3)建立檔案夾
hadoop fs -mkdir /newfile
(4)添加檔案到hdfs
是在FileZilla查看檔案,我已經在file1.txt和file2.txt輸入了兩句英文句子。
注意,file檔案夾和裡面的檔案都要是hadoop使用者組,否則會失敗
hadoop fs -put /opt/hadoop/file/* /newfile
(5)執行樣本程式wordcount
先看下程式包在哪裡
ll /opt/hadoop | grep jar
hadoop jar /opt/hadoop/hadoop-examples-1.2.1.jar wordcount /newfile /output/file
/newfile 為輸入檔案
/output/file 為輸出檔案
(6)查看執行結果
hadoop fs -cat /output/file/part-r-00000
(7)其他常用命令
下載檔案
hadoop fs -get /output/file/part-r-00000 /home/hadoop/
(8)刪除檔案
hadoop fs -rmr /output/file
問題總結
在使用這個
環境為
Centos6.5 X86 minimal
Hadoop1.2.1
jdk-8u73-linux-i586
配置之前,我使用的配置是
Centos6.5 X64 minimal
hadoop2.6.0
jdk-8u101-linux-x64
但是遇到了
“WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable”
雖然NameNode,DataNode等都啟動了,但是在hdfs下建立檔案夾失敗
hadoop fs –mkdir input
無法對hdfs進行任何操作
後來換成
Centos6.5 X86 minimal
hadoop2.6.0
jdk-8u101-linux-x64
http://f.dataguru.cn/thread-542396-1-1.html
再後來,把hadoop降級
Centos6.5 X86 minimal
Hadoop1.2.1
jdk-8u73-linux-i586
啟動時候遇到Warning: $HADOOP_HOME is deprecated.,加入一條命令搞掂,前面有提到。
————————————————————————————————————————————
下面介紹如何將其升級為完全分布式
一、
在剛才成功運行偽分布式的情況下,關機,複製出另外的三台虛擬機器。centos6.5靜態ip複製出來的話是不能上網的,設定參考!!!
修改好每個虛擬機器的ip,設定為靜態ip,接著修改hostname,修改hosts,至於/etc/profile則不用再配置了。
需要修改的有:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
vi /etc/sysconfig/network
vi /etc/hosts
二、ssh配置
因為複製出來的,每台虛擬機器的ssh檔案都一致
只需要在hadoop使用者下,Master與Slave都互相ssh一下,就可以了。
三、配置hadoop
需要修改的只有masters 和 slaves
(1)在Master節點下
vi /opt/hadoop/conf/masters
192.168.67.57是我Master的ip地址
(2)在Master節點下
vi /opt/hadoop/conf/slaves
為什麼是四個ip呢,因為我後來在叢集運行時動態地加入了一個Slave。有多少個Slave就寫多少個IP就行了。
(3)把slaves,masters檔案發送到其他三個slaves上
scp /opt/hadoop/conf/slaves 192.168.67.58:/opt/hadoop/conf/
scp /opt/hadoop/conf/masters 192.168.67.58:/opt/hadoop/conf/
(4) 格式化
執行格式化之前,把/opt/hadoop/tmp下面的東西刪掉
並且把/opt/hadoop/logs 裡面的日誌清空
四、動態添加slave節點
建議直接複製虛擬機器,參考偽分布式編程完全分布式時候的設定進行修改設定檔。
第一步,修改虛擬機器的基本資料。
需要修改的有:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
vi /etc/sysconfig/network
vi /etc/hosts
第二步,SSH,參照上文
第三步,修改Master主機上 /opt/hadoop/conf/下的masters檔案和slaves檔案,並發送到所有的Slaves節點
第四步,因為其他節點正在運行,並不需要再次進行格式化hdfs
只需要在新的slave節點上,啟動datanode和tasktracker進程
hadoop-daemon.sh start datanode
hadoop-daemon.sh start tasktracker
通過jps可以查看到運行情況,也可以通過網頁端查看新添加的節點
第四步,如果有必要,進行負載平衡
在master節點上運行start-balancer.sh進行資料負載平衡
start-balancer.sh
CentOS 6.5安裝hadoop1.2.1經驗(由偽分布式到完全分布式)