Hadoop 安裝和使用

環境

  • 操作系統: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安裝成功

配置JDK環境變量

運行如下命令,來編輯全局環境變量文件

sudo vim /etc/environment

在文件末尾添加一行:

JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64"

注銷或重啟后,在終端執行echo $JAVA_HOME即可查看環境變量是否生效,生效后的效果如下圖。

配置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單機配置

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可以在單節點上以偽分布式的方式運行,此時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>
core-site.xml配置
修改配置文件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>

hdfs-site.xml配置

配置完成后,初始化Hadoop文件系統 hdfs:

./bin/hdfs namenode -format

運行成功效果如圖:

hdfs格式化

啟動 NameNode 和 DataNode:

./sbin/start-dfs.sh

運行成功效果如下圖,可以通過 jps 命令查看 NameNode、DataNode 和 SecondNameNode 進程信息:

啟動 NameNode 和 DataNode

還可以通過 Web 方式查看 Hadoop 相關信息:

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
向hdfs上傳文件

通過 web 方式可以看到文件已經上傳成功:

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 即可

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容