搭建centos7的開發環境2-單機版Hadoop2.7.3配置

最近公司準備升級spark環境,主要緣由是生產環境的spark和hadoop版本都比較低,可是具體升級到何種版本還不肯定,須要作進一步的測試分析。這個任務對於大數據開發環境配置有要求,這裏記錄一下配置過程,可是對於爲何要作這些配置還不是很瞭解,算是知其然不知其因此然,深刻了解再寫篇博文分析。html

JDK配置

按照上一篇博文的配置,我發現centos7的 JDK已經安裝好了,能夠經過下面的代碼進行檢查,以下圖,顯示的1.8.0_121的openJDKjava

[kejun@localhost ~]$ java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)node

沒有安裝也沒關係,經過yum安裝仍是很方便的,能夠經過下面的指令來安裝JDK:shell

yum search java|grep jdk
yum install java-1.8.0-openjdkapache

下一步是配置JAVA的環境變量,由於是系統默認安裝的JDK,因此要找到JDK的目錄比較困難,須要經過下面兩個語句來進行查詢,第一個查詢是得到/usr/bin/java的依賴鏈接,第二個查詢是進一步得到依賴的依賴的:vim

[kejun@localhost ~]$ ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 3月  16 17:11  /usr/bin/java -> /etc/alternatives/java
[kejun@localhost ~]$ ll /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 3月  16 17:11 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/bin/java

經過這個辦法獲得的/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64就是系統默認的JDK目錄。得到JDK目錄後,配置環境變量的指令爲:centos

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH

有三種方法能夠支持配置JAVA的環境變量:
在shell終端中經過上述命令直接執行,這種配置只對當前的shell有效,因此不推薦。
修改~/.bash_profile文件,在下面的兩個語句中進行插入便可bash

PATH=$PATH:$HOME/.local/bin:$HOME/bin
#這裏插入
export PATH

這個修改只針對當前的用戶生效。可是hadoop配置中可能須要切換到另一個用戶hadoop進行配置,所以這個方法也不適合。
修改/etc/profile,這種配置方法適合於全部用戶,可是這種修改比較適合單人的開發環境使用,咱們選擇這種方式。服務器

vi /etc/profile
source /etc/profile

到此,咱們完成了JDK的配置。下一步進入hadoop的安裝。app

hadoop安裝

安裝參考的文檔是:CentOS 6.5 hadoop 2.7.3 集羣環境搭建
Linux Hadoop2.7.3 安裝(單機模式) 一

hadoop有三種安裝模式:單機standlone模式,僞分佈式模式,分佈式模式。
由於沒有多餘的服務器資源供我測試,這裏我選擇了單機模式的安裝。

  • 首先是安裝hadoop,目前hadoop已經更新到3.0版本了,可是2.7.3確定仍是主流版本,我選擇從清華的源下載了hadoop安裝包:
cd /tmp
wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
tar -zxvf hadoop-2.7.3.tar.gz
cp -R /tmp/hadoop-2.7.3  /usr/hadoop
  • 增長hadoop的環境變量
sudo -i
vim /etc/profile 
HADOOP_HOME=/usr/hadoop
export JAVA_LIBRARY_PATH='/usr/hadoop/lib/native
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 HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
  • 設置免密鑰登錄。
    hadoop中客戶端和服務器、計算節點之間通訊都須要經過SSH,Hadoop並無提供SSH輸入密碼的登陸形式,所以爲了保證能夠順利登陸每臺機器,須要將全部機器配置爲namenode能夠無密碼登陸它們。不配置免密鑰有什麼壞處我還沒搞清楚,後續再補充。
    首先經過rpm -qa | grep ssh 檢查ssh是否安裝:
[root@localhost ~]# rpm -qa | grep ssh
openssh-clients-6.6.1p1-33.el7_3.x86_64
openssh-6.6.1p1-33.el7_3.x86_64
openssh-server-6.6.1p1-33.el7_3.x86_64
libssh2-1.4.3-10.el7_2.1.x86_64

若是沒有發現ssh也沒關係,能夠經過yum安裝:

yum install openssh-clients  
yum install openssh-server

接下來依次執行,下面的指令能夠確保當前用戶能夠免密鑰登錄:

ssh localhost
cd ~/.ssh/ 
ssh-keygen -t dsa 
cat id_dsa.pub >> authorized_keys

經過root用戶修改ssh的配置:

sudo -i
vim /etc/ssh/sshd_config 
RSAAuthentication yes 
PubkeyAuthentication yes 
AuthorizedKeysFile .ssh/authorized_keys
service sshd restart

後續在配置hadoop的過程當中,咱們會發現會出現ssh的錯誤:The authenticity of host 0.0.0.0 can't be established.
解決方法能夠經過下列命令解決:

ssh  -o StrictHostKeyChecking=no  0.0.0.0

配置hadoop

完成hadoop及ssh的安裝步驟後,接下來是對hadoop的配置文件進行修改。

  • 修改/usr/hadoop/etc/hadoop/core-site.xml文件
<configuration>
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://0.0.0.0:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/hadoop/temp</value>
    </property>
</configuration>
  • 修改/usr/hadoop/etc/hadoop/hdfs-site.xmll文件
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
  • 首次啓動須要格式化namenode文件
/usr/hadoop/bin/hdfs namenode -format
  • 而後能夠啓動和中止hdfs
/usr/hadoop/sbin/start-dfs.sh
/usr/hadoop/sbin/stop-dfs.sh

啓動後,訪問 http://localhost:50070/dfshealth.html#tab-datanode 能夠獲得這個頁面,就是配置成功了。


##Map-Reduce示例
爲了驗證單機版的hadoop配置是否正確,接下來作一個map-reduce的樣例。對於一個文本的單詞集進行計數
具體的配置以下:

  • 首先配置mapred-site.xml
cd /usr/hadoop/etc/hadoop
mv mapred-site.xml.template mapred-site.xml
vim mapred-site xml
===============================
<configuration>
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
===============================
</configuration>
  • 配置 yarn-site.xml:
vim mapred-site xml
===============================
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration
===============================
  • 準備數據words.txt,並將其導入hdfs:
[root@localhost hadoop]# cd /usr/hadoop
[root@localhost hadoop]# vi words.txt
[root@localhost hadoop]# cat words.txt
=============================
wo xiang shuo shen me 
shen me dou bu jue de
yi qie yi qie dou shi xu huan de 
hahaha
=============================
[root@localhost hadoop]# cd bin
[root@localhost bin]# hadoop fs -put /usr/hadoop/words.tx
  • 啓動yarn,並執行wordcount任務:
[root@localhost bin]# start-yarn.sh
[root@localhost bin]# hadoop jar /usr/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount hdfs://localhost:9000/words.txt hdfs://localhost:9000/out3

接下來,打開連接就能夠看到結果了http://localhost:50070/explorer.html#/



遇到的問題及解決

  • p1:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
    首先,啓動在終端顯示debug信息,而後再開始尋找緣由:
export HADOOP_ROOT_LOGGER=DEBUG,console

網上也有人有相似的問題,可是緣由並不老是同樣的,我配置的出現這個問題是由於JAVA_LIBRARY_PATH沒有配置,這個在配置我已經在上文的hadoop環境配置中增長上了(標粗體)

  • p2: data node沒有啓動
    這個問題出現的比較隱蔽,我打開頁面http://localhost:50070/dfshealth.html#tab-datanode 發現沒有data node在運行。
    首先name node、data node和namesecondary的運行文件都在/usr/hadoop/logs這個目錄中
    而後檢查logs文件目錄中的hadoop-root-datanode-localhost.localdomain.log就能夠發現問題了:
[root@localhost logs]# ls
hadoop-root-datanode-localhost.localdomain.log
hadoop-root-datanode-localhost.localdomain.out
hadoop-root-datanode-localhost.localdomain.out.1
hadoop-root-datanode-localhost.localdomain.out.2
hadoop-root-datanode-localhost.localdomain.out.3
hadoop-root-datanode-localhost.localdomain.out.4
hadoop-root-datanode-localhost.localdomain.out.5
hadoop-root-namenode-localhost.localdomain.log
hadoop-root-namenode-localhost.localdomain.out
hadoop-root-namenode-localhost.localdomain.out.1
hadoop-root-namenode-localhost.localdomain.out.2
hadoop-root-namenode-localhost.localdomain.out.3
hadoop-root-namenode-localhost.localdomain.out.4
hadoop-root-namenode-localhost.localdomain.out.5
hadoop-root-secondarynamenode-localhost.localdomain.log
hadoop-root-secondarynamenode-localhost.localdomain.out
hadoop-root-secondarynamenode-localhost.localdomain.out.1
hadoop-root-secondarynamenode-localhost.localdomain.out.2
hadoop-root-secondarynamenode-localhost.localdomain.out.3
hadoop-root-secondarynamenode-localhost.localdomain.out.4
hadoop-root-secondarynamenode-localhost.localdomain.out.5
SecurityAuth-root.audit
userlogs
yarn-root-nodemanager-localhost.localdomain.log
yarn-root-nodemanager-localhost.localdomain.out
yarn-root-nodemanager-localhost.localdomain.out.1
yarn-root-nodemanager-localhost.localdomain.out.2
yarn-root-nodemanager-localhost.localdomain.out.3
yarn-root-resourcemanager-localhost.localdomain.log
yarn-root-resourcemanager-localhost.localdomain.out
yarn-root-resourcemanager-localhost.localdomain.out.1
yarn-root-resourcemanager-localhost.localdomain.out.2
yarn-root-resourcemanager-localhost.localdomain.out.3

檢查log後發現出現data node不啓動的緣由是使用了屢次namenode format的操做,後臺存儲的clusterID爲第一次format的ID,再次format後datanode的clusterID沒有變化,致使匹配不上,具體的報錯狀況爲:

java.io.IOException: Incompatible clusterIDs in /usr/hadoop/temp/dfs/data: namenode clusterID = CID-9754ec5b-c309-4b36-89ce-f00de7285927; datanode clusterID = CID-d05d2a3a-4fe7-4de4-a53a-6960403696cc

解決這個問題比較簡單,到datanode目錄下修改VISION便可:

[root@localhost hadoop]# cd /usr/hadoop/temp/dfs/data/current/
[root@localhost current]# ls
BP-1948380787-127.0.0.1-1490148702615  VERSION
BP-2135918609-127.0.0.1-1490082190396
[root@localhost current]# vim VERSION
=======================================
storageID=DS-34e30373-c8e1-4bfa-a5c7-84fd43ac99e2
clusterID=#在這裏修改#
cTime=0
datanodeUuid=ae0dae79-7de1-4207-8151-af6a6b86079d
storageType=DATA_NODE
layoutVersion=-56
=======================================
相關文章
相關標籤/搜索