系統:Ubuntu16.04
JDK:JDK1.8.0_101
Hadoop:2.7.3

JDK安裝路徑:/usr/lib/jdk/jdk1.8.0_101
Hadoop安裝路徑:/usr/lib/hadoop

首先我們要新建一個叫hadoop的賬戶

sudo adduser hadoop

之後會提示你輸入密碼等資訊

然後我們為這個賬戶新增sudo許可權(這樣在後續的操作中可以方便些),編輯/etc/sudoers

sudo vim /etc/sudoers

root    ALL=(ALL:ALL) All

下面添上

hadoop  ALL=(ALL:ALL) ALL

儲存退出,

注:編輯/etc/sudoers檔案可能需要有寫入許可權可用root許可權對其新增(chmod a+w /etc/sudoers),在編輯完成後需要將寫入許可權去掉(chmod a-w /etc/sudoers)

完成這一步之後我們切換使用者用新建立的hadoop賬戶登陸

然後我們需要對使用者新增ssh免密碼登陸

ssh-keygen -t rsa

就會在~/.ssh路徑下面生成id_rsa.pub檔案,把這個檔案的內容複製到~/.ssh目錄下面的authorized_keys

cp ~/.ssh/id_rsa.pub ~/.sh/authorized_keys

然後編輯/etc/ssh/sshd_config檔案,開啟免密碼登陸

sudo vim /etc/ssh/sshd_config

#AuthorizedKeysFile         %h/.ssh/authorized_keys

前的#去掉,就開啟了免密碼登陸,儲存退出
重啟ssh服務

sudo service ssh restart

驗證免密碼登陸是否有效,

ssh hadoop@localhost

第一次登陸會讓你輸入yes/no輸入yes,回車,如果沒有提示輸入密碼,那就說明免密碼登陸已經奏效。

由於Hadoop是由java編寫的所以在安裝hadoop之前需要先搭建jdk的環境,將jdk解壓縮

sudo tar -zxvf jdk-8u101-linux-x64.tar.gz -C /usr/lib/jdk

然後配置jdk環境,在/etc/profile加上

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_101
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

儲存
source /etc/profile重新載入

java -version

輸出了java的版本號,說明配置成功

然後我們把hadoop解壓縮到/usr/lib目錄下

sudo tar -zxvf hadoop-2.7.3.tar.gz -C /usr/lib

然後對其重新命名

sudo mv /usr/lib/hadoop-2.7.3 /usr/lib/hadoop

我們需要給hadoop使用者對/usr/lib/hadoop目錄的寫入許可權

接著我們需要修改hadoop的一些配置檔案讓它支援偽分散式,
首先我們需要修改hadoop/etc/hadoop/hadoop-env.sh

vim /usr/lib/hadoop/etc/hadoop/hadoop-env.sh

找到 JAVA_HOME 應該在檔案開頭,把裡面的內容修改成

export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_101

儲存退出(如果這裡沒有設定,即便在/etc/profile中設定了,在執行的時候還是會提示JAVA_HOME not set)

接著修改core-site.xml檔案

vim /usr/lib/hadoop/etc/hadoop/core-site.xml

開啟之後

<configuration>
</configuration>

<configuration></configuration>中間新增

<property>
    <name>hadoop.tmp.dir</name>
    <value>file:/usr/lib/hadoop/tmp</value>
</property>
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
</property>

儲存退出

然後修改hdfs-site.xml

vim /usr/lib/hadoop/etc/hadoop/hdfs-site.xml

同樣在<configuration></configuration>中新增

<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/usr/lib/hadoop/tmp/dfs/name</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/usr/lib/hadoop/tmp/dfs/data</value>
</property>

儲存退出

然後執行

/usr/lib/hadoop/bin/hdfs namenode -format

開啟namenode和datanode

/usr/lib/hadoop/sbin/start-dfs.sh

啟動完成之後執行jps

可以看到

NameNode
DataNode
Jps
SecondaryNameNode

這幾個程序,如果不是說明配置有問題

接下來可以測試一下,看看hadoop有沒有正常執行

/usr/lib/hadoop/bin/hadoop dfs -mkdir input

建立input目錄

/usr/lib/hadoop/bin/hadoop dfs -put /usr/lib/hadoop/etc/hadoop/*.xml input

這樣會把/usr/lib/hadoop/etc/hadoop/目錄下所有的xml檔案都存放到新建的hdfs的input目錄下

可以通過命令

/usr/lib/hadoop/bin/hadoop dfs -ls input

來進行檢視

然後我們執行example

/usr/lib/hadoop/bin/hadoop jar /usr/lib/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

用命令

/usr/lib/hadoop/bin/hdfs dfs -cat output/*

對執行結果進行檢視

1   dfsadmin
2   dfs.replication
3   dfs.namenode.name.dir
4   dfs.datanode.data.dir