一、軟硬件環境
CentOS 7.2 64位
OpenJDK-1.8.0
Hadoop-2.7
二、安裝SSH客戶端
安裝ssh:
yum install openssh-clients openssh-server
(如果系統中沒有yum命令使用 sudo apt install yum安裝 如有lock問題參看如下解決方法)
當我的Ubuntu install某個東西時,給出下面提示 E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarly unavailable) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is an other process using it? 刪除鎖定文件,行了 sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/lib/dpkg/lock
安裝完成后,使用以下命令測試:
①查看是否安裝成功:
rpm -qa | grep ssh
②啟動SSH服務。
systemctl restart sshd
ssh localhost
輸入 root 賬戶的密碼,如果可以正常登錄,則說明SSH安裝沒有問題。
配置SSH免key登陸
hadoop是一個分布式系統,節點間通過ssh通信,為了避免在連接過程中人工輸入密碼,需要進行ssh免key登陸的配置,由於本例是在單機上模擬分布式過程,因此需要針對本機(localhost)進行免key登陸的配置。 依此輸入如下命令進行配置:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys
完成后嘗試用SSH連接本機,如果不需要輸入密碼就能登陸,說明配置成功: ssh localhost
結果顯示:
三、配置Java環境
安裝jdk
使用 yum 來安裝1.8版本 OpenJDK:
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
(如果之前已經安裝了jdk,可以通過which java找到安裝的路徑,我之前已經安裝好了)
安裝完成后,鍵入java和javac,如果能輸出對應的命令幫助,則表明jdk已正確安裝。
配置java環境變量
執行命令:
vim ~/.bashrc
在結尾追加:(jvm中java-1.8.0.???具體是多少自己看一下可能版本換了)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64
保存文件后執行下面命令使 JAVA_HOME 環境變量生效:
source ~/.bashrc
為了檢測系統中java環境是否已經正確配置並生效,可以分別執行以下命令:
java -version $JAVA_HOME/bin/java -version
若兩條命令輸出的結果一致,且都為我們前面安裝的 openjdk-1.8.0 的版本,則表明 JDK 環境已經正確安裝並配置。
四.安裝hadoop
下載 Hadoop
本教程使用 hadoop-2.7 版本,使用 wget 工具在線下載
wget http://archive.apache.org/dist/hadoop/core/hadoop-2.7.5/hadoop-2.7.5.tar.gz
(這種下載方式可能比較慢)
建議從別處(百度雲或者其他鏡像)下載好了拷貝過來
安裝 Hadoop
將 Hadoop 安裝到 /usr/local 目錄下:
tar -zxf hadoop-2.7.5.tar.gz -C /usr/local
對安裝的目錄進行重命名,便於后續操作方便:
mv ./hadoop-2.7.5/ ./hadoop
提示No such file or directory:需要先切換到local路徑下再執行
在hadoop中配置環境變量
檢查Hadoop是否已經正確安裝:
/usr/local/hadoop/bin/hadoop version
Error:
JAVA_HOME is not set and could not be found.
echo $java_home 為空
注意區分大小寫:echo $JAVA_HOME即可輸出正確路徑
如果成功輸出hadoop的版本信息,表明hadoop已經成功安裝。
五.hadoop偽分布式環境配置
(1)設置 Hadoop 的環境變量
編輯 ~/.bashrc,在結尾追加如下內容:
vim ~/.bashrc
export HADOOP_HOME=/usr/local/hadoop 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 exportHADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
使Hadoop環境變量配置生效:
source ~/.bashrc
修改 Hadoop 的配置文件
Hadoop的配置文件位於安裝目錄的 /etc/hadoop目錄下,在本教程中即位於 /usr/local/hadoop/etc/hadoop 目錄下,需要修改的配置文件為如下兩個:
/usr/local/hadoop/etc/hadoop/hdfs-site.xml
(2)編輯core-site.xml,修改<configuration></configuration>節點的內容為如下所示:
<configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>location to store temporary files</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
(3)配置HDFS文件,編輯 hdfs-site.xml,修改<configuration></configuration>節點的內容為如下所示:
<configuration> //設置HDFS文件副本數
<property> <name>dfs.replication</name> <value>1</value> </property>
//設置HDFS元數據文件存放路徑 <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property>
<property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hodoop/tmp/dfs/data</value> </property>
//設置其他用戶執行操作是會提醒沒有權限的問題
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
(4)(5)的xml位置沒找到,未進行配置
(4)配置MapReduce文件mapred-site.xml
<property> <name>mapreduce.framework</name> <value>yarn</value> </property>
(5)配置YARN文件yarn-site.xml
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
(6)從節點配置文件slaves
hadoop000
格式化NameNode:
/usr/local/hadoop/bin/hdfs namenode -format
輸出以下信息表示格式化成功:
啟動NameNode和DataNode進程:
/usr/local/hadoop/sbin/start-dfs.sh
執行過程中會提示輸入用戶密碼,輸入 root 用戶密碼即可。另外,啟動時ssh會顯示警告提示是否繼續連接,輸入 yes 即可
檢查NameNode和DateNode是否正常啟動。
jps
如果NameNode和DataNode已經正常啟動,會顯示NameNode、DataNode和SecondaryNameNode的進程信息:
如果jps命令后只顯示jps的進程無其余三個進程信息,處理措施:
檢查xml文件修改的是否正確
六、運行偽分布式實例
查看Hadoop自帶的例子
Hadoop附帶了豐富的例子,執行以下命令查看:
cd /usr/local/hadoop ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar
在HDFS中創建用戶目錄hadoop:
准備實驗數據
本教程中,我們將以 Hadoop 所有的 xml 配置文件作為輸入數據來完成實驗。執行下面命令在 HDFS 中新建一個 input 文件夾並將 hadoop 配置文件上傳到該文件夾下:
/usr/local/hadoop/bin/hdfs dfs -mkdir -p /user/hadoop
此時會出現警告:
原因:
Apache提供的hadoop本地庫是32位的,而在64位的服務器上就會有問題,因此需要自己編譯64位的版本。
1、首先找到對應自己hadoop版本的64位的lib包,可以自己手動去編譯,但比較麻煩,也可以去網上找,好多都有已經編譯好了的。
2、可以去網站:http://dl.bintray.com/sequenceiq/sequenceiq-bin/ 下載對應的編譯版本
3、將准備好的64位的lib包解壓到已經安裝好的hadoop安裝目錄的lib/native 和 lib目錄下:
下載hadoop版本2.7.5對應的64位的lib包:
[root@izwz963wlhi02sl69o3i1dz hadoop]#
wget http://dl.bintray.com/sequenceiq/sequenceiq-bin/hadoop-native-64-2.7.0.tar
解壓到已經安裝好的hadoop安裝目錄的lib/native 和 lib目錄下:
[root@izwz963wlhi02sl69o3i1dz hadoop]# tar -xvfhadoop-native-64-2.7.0.tar -C /usr/local/hadoop/lib/native [root@izwz963wlhi02sl69o3i1dz hadoop]# tar -xvfhadoop-native-64-2.7.0.tar -C /usr/local/hadoop/lib
4、添加環境變量
[root@izwz963wlhi02sl69o3i1dz hadoop]# vim /etc/profile
5、添加以下內容
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
6、讓環境變量生效
[root@izwz963wlhi02sl69o3i1dz hadoop]# source /etc/profile
source 后邊有空格
7、自檢hadoop checknative –a 指令檢查
再次在HDFS 中創建用戶目錄 hadoop:
/usr/local/hadoop/bin/hdfs dfs -mkdir -p /user/hadoop
不再出現警告。
准備實驗數據
本教程中,我們將以 Hadoop 所有的 xml 配置文件作為輸入數據來完成實驗。執行下面命令在 HDFS 中新建一個 input 文件夾並將 hadoop 配置文件上傳到該文件夾下:
[root@izwz963wlhi02sl69o3i1dz hadoop]# cd /usr/local/hadoop
[root@izwz963wlhi02sl69o3i1dz hadoop]# ./bin/hdfs dfs -mkdir /user/hadoop/input
[root@izwz963wlhi02sl69o3i1dz hadoop]# ./bin/hdfs dfs -put ./etc/hadoop/*.xml /user/hadoop/input
使用下面命令可以查看剛剛上傳到 HDFS 的文件:
/usr/local/hadoop/bin/hdfs dfs -ls /user/hadoop/input
運行實驗:
[root@izwz963wlhi02sl69o3i1dz hadoop]# cd /usr/local/hadoop
[root@izwz963wlhi02sl69o3i1dz hadoop]# ./bin/hadoopjar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar grep/user/hadoop/input /user/hadoop/output 'dfs[a-z.]+'
[root@izwz963wlhi02sl69o3i1dz hadoop]# cd/usr/local/hadoop [root@izwz963wlhi02sl69o3i1dz hadoop]# ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar grep /user/hadoop/input /user/hadoop/output 'dfs[a-z.]+'
上述命令以 HDFS 文件系統中的 input 為輸入數據來運行 Hadoop 自帶的 grep 程序,提取其中符合正則表達式 dfs[a-z.]+ 的數據並進行次數統計,將結果輸出到 HDFS 文件系統的 output 文件夾下。
查看運行結果
上述例子完成后的結果保存在 HDFS 中,通過下面命令查看結果:
紅色圈出的部分是運行成功的結果:
/usr/local/hadoop/bin/hdfs dfs -cat /user/hadoop/output/*
刪除HDFS 中的結果目錄:
/usr/local/hadoop/bin/hdfs dfs -rm -r /user/hadoop/output
運行Hadoop 程序時,為了防止覆蓋結果,程序指定的輸出目錄不能存在,否則會提示錯誤,因此在下次運行前需要先刪除輸出目錄。
(一)HDFS操作
關閉Hadoop進程:
/usr/local/hadoop/sbin/stop-dfs.sh
再次啟動Hadoop進程的命令:
①一次性啟動所有進程:
[root@izwz963wlhi02sl69o3i1dz hadoop]#/usr/local/hadoop/sbin/start-dfs.sh
②單獨啟動某個進程
hadoop-daemon.sh start namenode/datanode/secondarynode
七、部署完成
參考:
官方文檔
https://blog.csdn.net/feng_zhiyu/article/details/81018869