Linux 下 Hadoop 2.6.0 叢集環境的搭建
本文旨在提供最基本的,可以用於在生產環境進行Hadoop、HDFS分散式環境的搭建,對自己是個總結和整理,也能方便新人學習使用。
基礎環境
JDK的安裝與配置
現在直接到Oracle官網(http://www.oracle.com/)尋找JDK7的安裝包不太容易,因為現在官方推薦JDK8。找了半天才找到JDK下載列表頁的地址(http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html)。因為選擇Linux作業系統作為部署環境,所以選擇64位的版本。我選擇的是jdk-7u79-linux-x64.gz。
使用以下命令將jdk-7u79-linux-x64.gz下載到Linux下的/home/jiaan.gja/software目錄
wget http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz
然後使用以下命令將jdk-7u79-linux-x64.gz解壓縮到/home/jiaan.gja/install目錄
tar zxvf jdk-7u79-linux-x64.gz -C ../install
回到/home/jiaan.gja目錄,配置java環境變數,命令如下:
cd ~ vim .bash_profile
在.bash_profile中加入以下內容:
立刻讓java環境變數生效,執行如下命令:
source .bash_profile
最後驗證java是否安裝配置正確:
Host
由於我搭建Hadoop叢集包含三臺機器,所以需要修改調整各臺機器的hosts檔案配置,命令如下:
vi /etc/hosts
如果沒有足夠的許可權,可以切換使用者為root。
如果禁止使用root許可權,則可以使用以下命令修改:
sudo vi /etc/hosts
三臺機器的內容統一增加以下host配置:
SSH
由於NameNode與DataNode之間通訊,使用了SSH,所以需要配置免登入。
首先登入Master機器,生成SSH的公鑰,命令如下:
ssh-keygen -t rsa
執行命令後會在當前使用者目錄下生成.ssh目錄,然後進入此目錄將id_rsa.pub追加到authorized_keys檔案中,命令如下:
cd .ssh cat id_rsa.pub >> authorized_keys
最後將authorized_keys檔案複製到其它機器節點,命令如下:
scp authorized_keys jiaan.gja@Slave1:/home/jiaan.gja/.ssh scp authorized_keys jiaan.gja@Slave2:/home/jiaan.gja/.ssh
檔案目錄
為了便於管理,給Master的hdfs的NameNode、DataNode及臨時檔案,在使用者目錄下建立目錄:
/home/jiaan.gja/hdfs/name
/home/jiaan.gja/hdfs/data
/home/jiaan.gja/hdfs/tmp
然後將這些目錄通過scp命令拷貝到Slave1和Slave2的相同目錄下。
HADOOP的安裝與配置
下載
首先到Apache官網(http://www.apache.org/dyn/closer.cgi/hadoop/common/)下載Hadoop,從中選擇推薦的下載映象(http://mirrors.hust.edu.cn/apache/hadoop/common/),我選擇hadoop-2.6.0的版本,並使用以下命令下載到Master機器的/home/jiaan.gja/software目錄:
cd ~/software/ wget http://apache.fayea.com/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz
然後使用以下命令將hadoop-2.6.0.tar.gz解壓縮到/home/jiaan.gja/install目錄
tar zxvf hadoop-2.6.0.tar.gz -C ../install/
環境變數
回到/home/jiaan.gja目錄,配置hadoop環境變數,命令如下:
cd ~ vim .bash_profile
在.bash_profile中加入以下內容:
立刻讓hadoop環境變數生效,執行如下命令:
source .bash_profile
Hadoop的配置
進入hadoop-2.6.0的配置目錄:
cd ~/install/hadoop-2.6.0/etc/hadoop/
依次修改core-site.xml、hdfs-site.xml、mapred-site.xml及yarn-site.xml檔案。
core-site.xml
<configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/home/jiaan.gja/hdfs/tmp</value> <description>A base for other temporary directories.</description> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>fs.default.name</name> <value>hdfs://Master:9000</value> </property> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> </configuration>
hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/jiaan.gja/hdfs/name</value> <final>true</final> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/jiaan.gja/hdfs/data</value> <final>true</final> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>Master:9001</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.address</name> <value>Master:18040</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>Master:18030</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>Master:18088</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>Master:18025</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>Master:18141</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce.shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> </configuration>
由於我們已經配置了JAVA_HOME的環境變數,所以hadoop-env.sh與yarn-env.sh這兩個檔案不用修改,因為裡面的配置是:
export JAVA_HOME=${JAVA_HOME}
最後,將整個hadoop-2.6.0資料夾及其子資料夾使用scp複製到兩臺Slave的相同目錄中:
scp -r hadoop-2.6.0 jiaan.gja@Slave1:/home/jiaan.gja/install/ scp -r hadoop-2.6.0 jiaan.gja@Slave2:/home/jiaan.gja/install/
執行HADOOP
執行HDFS
格式化NameNode
執行命令:
hadoop namenode -format
執行過程如下圖:
最後的執行結果如下圖:
啟動NameNode
執行命令如下:
hadoop-daemon.sh start namenode
執行結果如下圖:
最後在Master上執行ps -ef | grep hadoop,得到如下結果:
在Master上執行jps命令,得到如下結果:
說明NameNode啟動成功。
啟動DataNode
執行命令如下:
hadoop-daemons.sh start datanode
執行結果如下:
在Slave1上執行命令,如下圖:
在Slave2上執行命令,如下圖:
說明Slave1和Slave2上的DataNode執行正常。
以上啟動NameNode和DataNode的方式,可以用start-dfs.sh指令碼替代:
執行YARN
執行Yarn也有與執行HDFS類似的方式。啟動ResourceManager使用以下命令:
yarn-daemon.sh start resourcemanager
批量啟動多個NodeManager使用以下命令:
yarn-daemons.sh start nodemanager
以上方式我們就不贅述了,來看看使用start-yarn.sh的簡潔的啟動方式:
在Master上執行jps:
說明ResourceManager執行正常。
在兩臺Slave上執行jps,也會看到NodeManager執行正常,如下圖:
測試HADOOP
測試HDFS
最後測試下親手搭建的Hadoop叢集是否執行正常,測試的命令如下圖所示:
測試YARN
可以訪問YARN的管理介面,驗證YARN,如下圖所示:
測試mapreduce
本人比較懶,不想編寫mapreduce程式碼。幸好Hadoop安裝包裡提供了現成的例子,在Hadoop的share/hadoop/mapreduce目錄下。執行例子:
配置執行HADOOP中遇見的問題
JAVA_HOME未設定?
我在啟動Hadoop時發現Slave2機器一直啟動不了,然後登入Slave2,在~/install/hadoop-2.6.0/logs目錄下檢視日誌,發現了以下錯誤:
Error: JAVA_HOME is not set and could not be found.
如果我執行echo $JAVA_HOME或者檢視.bash_profile檔案,都證明正確配置了JAVA_HOME的環境變數。無奈之下,只能將Slave2機器的hadoop-env.sh硬編碼為如下的配置:
# The java implementation to use. export JAVA_HOME=/home/jiaan.gja/install/jdk1.7.0_79
然後問題就解決了。雖然解決了,但是目前不知道所以然,有好心的同仁,告訴我下。。。
Incompatible clusterIDs
由於配置Hadoop叢集不是一蹴而就的,所以往往伴隨著配置——>執行——>。。。——>配置——>執行的過程,所以DataNode啟動不了時,往往會在檢視日誌後,發現以下問題:
此問題是由於每次啟動Hadoop叢集時,會有不同的叢集ID,所以需要清理啟動失敗節點上data目錄(比如我建立的/home/jiaan.gja/hdfs/data)中的資料。
NativeCodeLoader的警告
在測試Hadoop時,細心的人可能看到截圖中的警告資訊:
我也是查閱網路資料,得知以下解決辦法:
1、下載hadoop-native-64-2.6.0.tar:
在網站http://dl.bintray.com/sequenceiq/sequenceiq-bin/可以找到下載的相應版本,由於我是2.6.0的Hadoop,所以選擇下載
2、停止Hadoop,執行命令如下:
下載完以後,解壓到hadoop的native目錄下,覆蓋原有檔案即可。操作如下:
tar xvf hadoop-native-64-2.6.0.tar -C /home/jiaan.gja/install/hadoop-2.6.0/lib/native/
令人失望的是,這種方式並不好使,看到最後的解決方案是需要下載Hadoop原始碼,重新編譯,但這種方式有些重,我不打算嘗試了。有沒有簡便的解決方案,還希望知道的同學告訴一下。
yarn.nodemanager.aux-services錯誤
在執行start-yarn.sh指令碼啟動YARN時,在Slave1和Slave2機器上執行jps命令未發現NodeManager程式,於是登入Slave機器檢視日誌,發現以下錯誤資訊:
參考網上的解決方式,是因為yarn.nodemanager.aux-services對應的值mapreduce.shuffle已經被替換為mapreduce_shuffle。有些參考用書上也錯誤的寫為另一個值mapreduce-shuffle。
相關文章
- Linux下Hadoop2.6.0叢集環境的搭建LinuxHadoop
- hadoop2.6.0版本叢集環境搭建Hadoop
- Linux 環境下搭建Hadoop叢集(全分佈)LinuxHadoop
- hadoop叢集環境搭建Hadoop
- HADOOP SPARK 叢集環境搭建HadoopSpark
- Hadoop框架:叢集模式下分散式環境搭建Hadoop框架模式分散式
- Mac 環境下 Redis 叢集的搭建MacRedis
- Ubuntu上搭建Hadoop叢集環境的步驟UbuntuHadoop
- Hadoop叢集之 ZooKeeper和Hbase環境搭建Hadoop
- 【環境搭建】RocketMQ叢集搭建MQ
- Glassfish叢集環境的搭建
- PC基於Linux的叢集環境搭建?Linux
- Zookeeper 叢集環境搭建
- hadoop之旅9-centerOS7 : hbase叢集環境搭建HadoopROS
- es 5.5.3叢集環境搭建
- 搭建5個節點的hadoop叢集環境(CDH5)HadoopH5
- 從 0 開始使用 Docker 快速搭建 Hadoop 叢集環境DockerHadoop
- Hadoop-2.6.0 + Zookeeper-3.4.6 + HBase-0.98.9-hadoop2環境搭建示例Hadoop
- Redis叢集環境搭建實踐Redis
- 12. Redis叢集環境搭建Redis
- 基於docker環境下搭建redis主從叢集DockerRedis
- Hadoop叢集環境啟動順序Hadoop
- Hadoop叢集搭建Hadoop
- Hadoop搭建叢集Hadoop
- linux下搭建ZooKeeper叢集(偽叢集)Linux
- 高可用叢集環境搭建-留檔
- k8s——搭建叢集環境K8S
- HADOOP叢集在Linux平臺的搭建HadoopLinux
- Centos mini系統下的Hadoop叢集搭建CentOSHadoop
- [Hadoop踩坑]叢集分散式環境配置Hadoop分散式
- CDH版本大資料叢集下搭建Avro(hadoop-2.6.0-cdh5.5.4.gz + avro-1.7.6-cdh5.5.4.tar.gz的搭建)...大資料VRHadoopH5
- 生產環境的redis高可用叢集搭建Redis
- Linux下搭建ZooKeeper叢集Linux
- 4.4 Hadoop叢集搭建Hadoop
- Hadoop叢集搭建(一)Hadoop
- Linux環境搭建Nginx+Tomcat負載均衡叢集LinuxNginxTomcat負載
- ZooKeeper 系列(二)—— Zookeeper單機環境和叢集環境搭建
- Windows 10環境簡單搭建ELK叢集Windows