環境
- 操作系統:Ubuntu 14.04
- Hadoop版本:Hadoop 2.6.5
- JDK版本:OpenJDK 1.7
創建Hadoop用戶
創建用戶
sudo useradd -m hadoop
為新用戶設置密碼
sudo passwd hadoop
為新用戶添加權限
sudo adduser hadoop sudo
如果失敗,則切換到root用戶下,修改/etc/sudoers文件,將hadoop用戶添加進去。
安裝SSH Server、配置SSH免密鑰登錄
Ubuntu默認安裝了SSH client,還需要安裝SSH server。集群、單節點模式都需要用到SSH無密碼登陸。
sudo apt-get install openssh-server
設置登錄到本機
運行命令:
ssh localhost
會有如下提示,輸入yes。
SSH首次登陸提示。然后按提示輸入密碼hadoop,這樣就登陸到本機了。但這樣的登陸是需要密碼的,需要配置成無密碼登陸。
配置免密鑰登錄
運行命令:
cd ~/.ssh
ssh-keyen
連按三次回車。
再運行命令(將公鑰拷貝到本地):
ssh-copy-id -i ~/.ssh/id_rsa.pub localhost
此時再執行 ssh localhost
命令,就可以直接登陸了,如下圖所示。
配置Java環境
下載JDK
根據 Hadoop Java Versions 中的羅列的 Tested JDK 項可知,Hadoop 支持 openjdk 1.7,因此下載 openjdk 1.7。運行如下命令,下載 openjdk 1.7:
sudo apt-get install openjdk-7-jre openjdk-7-jdk
JDK默認安裝在 /usr/lib/jvm/java-7-openjdk-amd64
,運行java -version
出現下圖,表示 jdk 安裝成功。
配置JDK環境變量
運行如下命令,來編輯全局環境變量文件
sudo vim /etc/environment
在文件末尾添加一行:
JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64"
注銷或重啟后,在終端執行echo $JAVA_HOME
即可查看環境變量是否生效,生效后的效果如下圖。
安裝、配置 Hadoop 2.6.5
下載 Hadoop
從 Hadoop官網 上下載 Hadoop二進制壓縮包 hadoop-2.6.5.tar.gz 到本地目錄中。下載完成后解壓縮:
cd ~/software/
sudo tar -zxvf hadoop-2.6.5.tar.gz -C /usr/local # 解壓到/usr/local中
cd /usr/local
sudo mv hadoop-2.6.5 hadoop # 將文件名改為hadoop
sudo chown -R hadoop:hadoop /usr/local/hadoop # 修改文件權限
Hadoop解壓后即可使用,輸入如下命令Hadoop檢查是否可用:
/usr/local/hadoop/bin/hadoop
可用則會顯示命令行的用法:
Hadoop單機配置
Hadoop默認配置是以非分布式模式運行,即單Java進程,方便進行調試。可以執行附帶的例子WordCount來查看Hadoop的運行。例子將Hadoop的配置文件作為輸入文件,統計符合正則表達式dfs[a-z.]+的單詞的出現次數。
cd /usr/local/hadoop
mkdir input
cp etc/hadoop/*.xml input
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar grep input output 'dfs[a-z.]+'
cat ./output/*
執行成功后如下所示,輸出了作業的相關信息,輸出的結果是符合正則的單詞dfsadmin
,出現了1次。
Hadoop偽分布式配置
Hadoop可以在單節點上以偽分布式的方式運行,此時Hadoop進程以分離的Java進程來運行,節點既是NameNode也是DataNode。這種情況下,需要修改etc/hadoop/
目錄下core-site.xml和hdfs-site.xml。Hadoop的配置文件是xml格式,聲明property的name和value。
修改配置文件 etc/hadoop/core-site.xml
將 etc/hadoop/core-site.xml
文件中的 <configuration> </configuration>
修改為:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>some description</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
修改配置文件etc/hadoop/hdfs-site.xml
將 etc/hadoop/hdfs-site.xml
文件中的 <configuration> </configuration>
修改為:
<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>
配置完成后,初始化Hadoop文件系統 hdfs:
./bin/hdfs namenode -format
運行成功效果如圖:
啟動 NameNode 和 DataNode:
./sbin/start-dfs.sh
運行成功效果如下圖,可以通過 jps
命令查看 NameNode、DataNode 和 SecondNameNode 進程信息:
還可以通過 Web 方式查看 Hadoop 相關信息:
Hadoop偽分布式實例-WordCount
首先創建所需的目錄,并把 /etc/hadoop 下文件上傳到 input 目錄下:
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/hadoop
bin/hdfs dfs -put etc/hadoop input
通過 web 方式可以看到文件已經上傳成功:
同單機模式一樣,運行 MapReduce 程序:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar grep input output 'dfs[a-z.]+'
注意:運行前若 output 目錄已存在則會報錯,可執行
bin/hdfs dfs -rm -R /user/hadoop/output
刪除該目錄再重新運行
程序運行結束后再執行 bin/hdfs dfs -cat output/*
查看上述程序的輸出結果,效果如圖:
使用中可以體會到 bin/hdfs dfs
-linux命令 就是分布式文件系統的命令,類似于在linux本機上操作,只不過前面加了 bin/hdfs dfs
,比如還有:
bin/hdfs dfs -ls /user/hadoop # 查看 /user/hadoop 中的文件
bin/hdfs dfs -rm -R /user/hadoop/input/* # 刪除 input 中的文件
bin/hdfs dfs -rm -R /user/hadoop/output # 刪除 output 文件夾
停止 Hadoop
執行如下命令即可停止 Hadoop:
sbin/stop-dfs.sh
注意:下次再啟動 Hadoop,無須再進行 hdfs 的初始化,只需要運行
sbin/start-dfs.sh
即可