Ubuntu Hadoop偽分散式搭建
系統: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