1.准備一台Vmware虛擬機,添加hdfs用戶及用戶組,配置網絡見 https://www.cnblogs.com/qixing/p/11396835.html
在root用戶下
添加hdfs用戶,並設置密碼:
adduser hdfs
passwd hdfs
將hdfs用戶添加到hdfs用戶組中
usermod -a -G hdfs hdfs
前面一個hdfs是組名,后面一個hdfs是用戶名
驗證用戶和用戶組:
cat /etc/group
會看到 hdfs:x:1001:hdfs
將hdfs用戶賦予root權限,在sudoers文件中添加hdfs用戶並賦予權限
vim /etc/sudoers
在
root ALL=(ALL) ALL
下面添加:
hdfs ALL=(ALL) ALL
保存編輯后,hdfs就擁有root權限
本人習慣將軟件安裝到/opt/soft文件夾下
在/opt/下創建soft文件夾,並改為hdfs用戶擁有
cd /opt
mkdir soft
chown -R hdfs:hdfs soft
2.安裝jdk,配置環境變量
將jdk安裝包解壓到 /opt/soft/ 下
tar -zxvf jdk-8u231-linux-x64.tar.gz -C /opt/soft/
在/opt/soft/下就會出現jdk加壓文件夾 jdk1.8.0_231 文件夾 帶有jdk版本號,但是一般我們使用jdk時帶着版本號不太方便,也為以后升級能夠改動更小,一般我們會給jdk創建一個軟連接,這樣我們只要配置軟連接名字,或者升級時,將軟連接指向新jdk就可以了
ln -s jdk1.8.0_231 jdk
這樣我們就給jdk1.8.0_231創建一個jdk軟連接,我們只使用jdk軟連接就可以了
給jdk配置環境變量
vim /etc/profile 添加 # jdk export JAVA_HOME=/opt/soft/jdk export PATH=$PATH:$JAVA_HOME/bin
重新編譯profile文件
source /etc/profile
3.安裝hadoop2.10.0
將hadoop2.10.0安裝包解壓到/opt/soft目錄下
tar -zxvf hadoop-2.10.0.tar.gz -C /opt/soft/
創建hadoop軟鏈接
ln -s hadoop-2.10.0 hadoop
配置hadoop環境變量
vim /etc/profile 添加
# hadoop
export HADOOP_HOME=/opt/soft/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
重新編譯profile文件
source /etc/profile
驗證hadoop安裝是否成功:
hadoop version
安裝成功
配置hadoop偽分布:
配置hadoop配置文件core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
core-site.xml
<property> <name>fs.defaultFS</name> <value>hdfs://localhost/</value> </property>
hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
mapred-site.xml
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
yarn-site.xml
<property> <name>yarn.resourcemanager.hostname</name> <value>localhost</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
4.hadoop在使用時會使用ssh免密登錄,我們就需要配置ssh免密登錄
1)檢查是否安裝了ssh相關軟件包(openssh-server + openssh-clients + openssh)
$> yum list installed | grep ssh
2)檢查是否啟動了sshd進程
$> ps -Af | grep sshd
3)在client側生成公私秘鑰對。
$> ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
4)生成~/.ssh文件夾,里面有id_rsa(私鑰) + id_rsa.pub(公鑰)
5)追加公鑰到~/.ssh/authorized_keys文件中(文件名、位置固定)
$> cd ~/.ssh
$> cat id_rsa.pub >> authorized_keys
6)修改authorized_keys的權限為644.
$> chmod 644 authorized_keys
7)測試
$> ssh localhost
5.在hdfs用戶下格式化hadoop
如果是在root用戶下,可以使用su進入hdfs用戶
su - hdfs
格式化hdfs
hadoop namenode -format
這樣就格式化成功了
啟動hdfs,啟動命令在hadoop/sbin下的start-all.sh,由於我們已經將sbin加入到PATH中,所有我們現在可以在任何地方執行該命令
start-all.sh
但是hdfs沒有像我們預想的一樣起來,似乎報錯了
hadoop找不到jdk環境變量
這時就需要我們修改hadoop配置文件,手動指定JAVA_HOME環境變量
[${HADOOP_HOME}/etc/hadoop/hadoop-env.sh]
...
export JAVA_HOME=/opt/soft/jdk
...
改為
再重新啟動hadoop
start-all.sh
看着似乎是起來了
我們查看一下進程
似乎少了namenode
查看namenode啟動日志,進入到${HADOOP_HOME}/logs下
tail -200f hadoop-hdfs-namenode-localhost.log
namenode 啟動報錯了
Directory /tmp/hadoop-hdfs/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.?dfs/name文件夾不存在或沒有訪問權限,但是為什么剛裝完時是存在的呢
進入/tmp/hadoop-hdfs/dfs/下看一下,果然沒有name文件夾
於是抱着試試的心理,又重新格式化了hadoop
hadoop namenode -format
再看name文件夾是否存在
這次出來了
再次重啟hdfs
先stop
stop-all.sh
重新啟動
start-all.sh
namenode已經起來了
我們通過瀏覽器驗證一下是否啟動,在瀏覽器中輸入:http://192.168.30.141:50070 ,根據自己的IP修改
看到這個頁面說明hadoop偽分布模式已經啟動,如果網頁無法訪問,先看一下服務器的防火牆是否關閉
firewall-cmd --state
我這里已經將防火牆關閉
如果沒有關閉,使用如下命令關閉(需在root用戶下進行,否則沒有權限),再查看網頁是否正常:
停止firewall,這樣在下次重啟機器,會失效
systemctl stop firewalld.service
如果想一直關閉防火牆,請禁止firewall開機啟動