一、安裝Java1.下載jdk-8u91-linux-x64.tar.gz文件,網址為:http://www.oracle.com/technetwork/java/javase/downloads/index.html
2.安裝:
#選擇一個安裝路徑,我選擇的是/opt,並將下載的jdk-8u91-linux-x64.tar.gz文件復制到這個文件夾下
$ cd /opt
$ sudo cp ~/Downloads/jdk-8u91-linux-x64.tar.gz -i /opt/
#解壓、安裝
$ sudo tar zxvf jdk-8u91-linux-x64.tar.gz
$ sudo rm -r jdk-8u91-linux-x64.tar.gz
#檢查是否安裝成功
二、創建hadoop組和hadoop用戶
1.添加hadoop用戶到系統用戶
$ sudo addgroup hadoop
$ sudo adduser --ingroup hadoop hduser
2.給hadoop用戶賦予rs
在root ALL=(ALL:ALL) ALL下面加上hduser ALL=(ALL:ALL) ALL
如下圖:
三、配置SSH
以使各機器之間執行指令無需輸入登錄密碼,否則,主節點每次試圖訪問其他節點時,都需要手動輸入這個密碼。
1.安裝ssh
$ sudo apt-get install openssh-server
2.啟動服務
$ sudo /etc/init.d/ssh start
3.啟動後,可以通過如下命令查看服務是否正確啟動
$ ps -e |grep ssh
4.生成公鑰和私鑰:
$ ssh-keygen -y -t rsa -P ""
這時會在/home/hduser/.ssh下生成兩個文件:id_rsa和id_rsa.pub,前者為私鑰,後者為公鑰.
5.現在我們將公鑰追加到authorized_keys中
$ cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
6.登入ssh,確認以後登錄時不用輸入密碼
ssh localhost
7.登出
exit
再次登入的話就不需要密碼了四、安裝hadoop
1.首先到https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/stable/下載hadoop-2.7.2.tar.gz
2.解壓並放在你希望的目錄中。我放到了/usr/local/hadoop
$ sudo tar xzf hadoop-2.7.2.tar.gz
$ sudo mv hadoop-2.7.2 /usr/local/hadoop
3.要確保所有的操作都是在用戶hdsuer下完成的:
$ sudo chown -R hduser:hadoop /usr/local/hadoop
五、配置~/.bashrc1.切換到hadoop用戶,我的是hduser
$ su - hduser
2..查看java安裝路徑
update-alternatives - -config java
完整的路徑為: /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
我們只取前面的部分 /usr/lib/jvm/java-7-openjdk-amd64
3.修改配置文件bashrc
$ sudo gedit ~/.bashrc
#在文件末尾追加下面內容
#HADOOP VARIABLES START
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
#HADOOP VARIABLES END
4.修改/usr/local/hadoop/etc/hadoop/hadoop-env.sh
$ sudo gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh
找到JAVA_HOME變量,修改此變量如下
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
至此,單機模式配置完畢,下面進行wordcount測試六、wordcount測試
1.首先在hadoop目錄下新建文件夾input
$ cd /usr/local/hadoop/
$ mkdir input
2.將README.txt文件拷貝到input文件夾下,以統計文件中單詞的頻數
$ sudo cp README.txt input
3.運行wordcount程序,並將輸出結果保存在output文件夾下
#每次重新執行wordcount程序的時候,都需要先把output文件夾刪除!否則會出錯$ bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount input output
4.查看字符統計結果
$ cat output/*
七、偽分布模式配置
1.修改2個配置文件 core-site.xml 和 hdfs-site.xml,配置文件位於 /usr/local/hadoop/etc/hadoop/ 中
首先在hadoop目錄下創建幾個文件夾:
$ cd /usr/local/hadoop
$ mkdir tmp
$ mkdir tmp/dfs
$ mkdir tmp/dfs/data
$ mkdir tmp/dfs/name
修改 core-site.xml:
$ sudo gedit etc/hadoop/core-site.xml
修改為以下配置:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
修改hdfs-site.xml:
$ sudo gedit etc/hadoop/hdfs-site.xml
修改為以下配置:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<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/hadoop/tmp/dfs/data</value>
</property>
</configuration>
2.執行NameNode 的格式化
./bin/hdfs namenode -format
注意!只有剛創建hadoop集群的時候才需要格式化,不能對一個運行中的hadoop文件系統(HDFS)格式化,否則會丟失數據!!成功的話,會看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若為 “Exitting with status 1” 則是出錯。
3.啟動hadoop
執行start-all.sh來啟動所有服務,包括namenode,datanode.
$ start-all.sh
在這裡,如果出現了 Error: Cannot find configuration directory: /etc/hadoop,則通過下面方法解決:在hadoop-env.sh 配置一條hadoop配置文件所在目錄
$ sudo gedit etc/hadoop/hadoop-env.sh
加上export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
修改後如下圖:
$ source etc/hadoop/hadoop-env.sh
再次啟動所有服務就好了
$ start-all.sh
啟動時可能會出現如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable。該WARN 提示可以忽略,並不會影響正常使用
4.通過jps命令判斷是否成功啟動:
出現這種情況後,在計算機中搜索jps,由於我的java安裝路徑是:/opt/jdk1.8.0_91,所以jps位於:/opt/jdk1.8.0_91/bin
$ cd /opt/jdk1.8.0_91/bin
$ ./jps
若成功啟動則會列出如下進程: “NameNode”、”DataNode” 和 “SecondaryNameNode”
5.通過web界面查看hdfs信息
轉到http://localhost:50070/即可查看
如果不能加載出http://localhost:50070/,則可能通過下面的方法解決:先執行NameNode 的格式化
$ ./bin/hdfs namenode -format
出現提示輸入Y/N時一定要輸入大寫Y!!!出現提示輸入Y/N時一定要輸入大寫Y!!!
出現提示輸入Y/N時一定要輸入大寫Y!!!再執行start-all.sh來啟動所有服務
$ start-all.sh
然後執行jps命令
$ cd /opt/jdk1.8.0_91/bin
$ ./jps
再次轉到網址http://localhost:50070/,就可以正常加載了。
6.停止運行hadoop
$ stop-all.sh
出現了no datanode to stop的提示:
解決方法:在stop-all.sh之後,刪除/tmp/dfs/data以及/tmp/dfs/name下的所有內容,如下圖所示,均包含一個current文件夾:
因此只需刪除current文件夾
刪除之後,再次格式化namenode、啟動所有服務start-all.sh、並停止stop-all.sh,就可以正常stop datanode了。