Linux下Hadoop2.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。
鳴謝
我在試驗的過程中,遇到很多問題。但是很多問題在網路上都能找到,特此感謝在網際網路上分享經驗的同仁們。
後記:個人總結整理的《深入理解Spark:核心思想與原始碼分析》一書現在已經正式出版上市,目前京東、噹噹、天貓等網站均有銷售,歡迎感興趣的同學購買。
京東(現有滿150減50活動)):http://item.jd.com/11846120.html
噹噹:http://product.dangdang.com/23838168.html
相關文章
- hadoop2.6.0版本叢集環境搭建Hadoop
- Linux 下 Hadoop 2.6.0 叢集環境的搭建LinuxHadoop
- Mac 環境下 Redis 叢集的搭建MacRedis
- 【環境搭建】RocketMQ叢集搭建MQ
- Linux 環境下搭建Hadoop叢集(全分佈)LinuxHadoop
- Glassfish叢集環境的搭建
- PC基於Linux的叢集環境搭建?Linux
- Zookeeper 叢集環境搭建
- es 5.5.3叢集環境搭建
- hadoop叢集環境搭建Hadoop
- Redis叢集環境搭建實踐Redis
- 12. Redis叢集環境搭建Redis
- HADOOP SPARK 叢集環境搭建HadoopSpark
- 基於docker環境下搭建redis主從叢集DockerRedis
- Hadoop框架:叢集模式下分散式環境搭建Hadoop框架模式分散式
- linux下搭建ZooKeeper叢集(偽叢集)Linux
- 高可用叢集環境搭建-留檔
- k8s——搭建叢集環境K8S
- 生產環境的redis高可用叢集搭建Redis
- Linux下搭建ZooKeeper叢集Linux
- Linux環境搭建Nginx+Tomcat負載均衡叢集LinuxNginxTomcat負載
- ZooKeeper 系列(二)—— Zookeeper單機環境和叢集環境搭建
- Windows 10環境簡單搭建ELK叢集Windows
- Docker環境搭建redis叢集(主從模式)DockerRedis模式
- Ubuntu上搭建Hadoop叢集環境的步驟UbuntuHadoop
- Linux叢集環境下NTP伺服器時間同步Linux伺服器
- Elasticsearch叢集搭建教程及生產環境配置Elasticsearch
- 搭建 MongoDB分片(sharding) / 分割槽 / 叢集環境MongoDB
- Hadoop叢集之 ZooKeeper和Hbase環境搭建Hadoop
- linux 下搭建php環境LinuxPHP
- Linux下NDK環境搭建!Linux
- Linux環境快速搭建elasticsearch6.5.4叢集和Head外掛LinuxElasticsearch
- CentOS 7.9 環境下搭建k8s叢集(一主兩從)CentOSK8S
- OSCache叢集環境下快取同步的問題快取
- RocketMQ 4.7.1 環境搭建、叢集、MQ整合SpringBootMQSpring Boot
- linux環境下搭建個人微博Linux
- Windows環境下的Nginx環境搭建WindowsNginx
- linux下jsp環境的搭建薦LinuxJS