前提
支持的平台
- 支持 GNU/Linux 作為開發平台和生產環境。經實戰檢驗,Hadoop 能運行在包含 2000 台 GNU/Linux 機器組成的集群上。
- 同樣支持 Windows,但后續步驟只適用於 Linux。要在 Windows 上安裝 Hadoop,請查閱百科文檔。
需要的軟件
Linux 平台需要的軟件包括:
- Java™ 一定要安裝。推薦的 Java 版本參見 Hadoop Java 版本。
- 如果要執行 Hadoop 可選的啟停腳本來管理遠端的 Hadoop 守護進程,ssh 一定要安裝。此外,推薦安裝 pdsh 以更好地管理 ssh 資源。
安裝軟件
如果你的集群沒有上述軟件,你必須先安裝它們。
在 Ubuntu Linux 上可執行:
$ sudo apt-get install ssh $ sudo apt-get install pdsh
下載
為了獲得 Hadoop 發行包,請從 Apache 下載鏡像中任意一家下載最近的穩定版本。
准備啟動 Hadoop 集群
解壓下載的 Hadoop 發行包,編輯文件 etc/hadoop/hadoop-env.sh 以定義如下的參數:
# 給定 Java 安裝的根目錄 export JAVA_HOME=/usr/java/latest
執行如下命令:
$ bin/hadoop
屏幕將顯示 Hadoop 腳本的使用文檔。
現在,你可以任選以下三種模式之一來啟動你的 Hadoop 集群:
本地模式
默認情況,Hadoop 以一個 Java 進程的形態運行在非分布式模式下,這對於調試很有幫助。
以下示例復制解壓后的配置目錄作為輸入,查詢所有匹配正則表達式的文本,結果被寫到給定的輸出目錄中。
$ mkdir input $ cp etc/hadoop/*.xml input $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar grep input output 'dfs[a-z.]+' $ cat output/*
偽分布式模式
Hadoop 同樣可以在單機上以偽分布式模式運行,此時每個 Hadoop 守護進程是一個獨立的 Java 進程。
配置
修改文件內容如下:
etc/hadoop/core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
etc/hadoop/hadoop-env.sh
# 添加如下環境變量 export HDFS_DATANODE_USER=root export HDFS_NAMENODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root
配置免密碼的 ssh
現在,檢查你是否可以 ssh 登錄到本機而無需密碼:
$ ssh localhost
如果無法免密登錄,請執行如下命令:
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys
執行
執行后續命令以本地運行一個 MapReduce 作業。如果你想在 Yarn 上執行一個作業,請參閱單機運行 Yarn。
-
格式化文件系統:
$ bin/hdfs namenode -format
-
啟動 NameNode 守護進程和 DataNode 守護進程:
$ sbin/start-dfs.sh
Hadoop 守護進程的日志輸出目錄是 $HADOOP_LOG_DIR,其默認值是 $HADOOP_HOME/logs。
-
瀏覽 NameNode 的網頁,地址默認是:
- NameNode - http://localhost:9870/
-
創建運行 MapReduce 作業必需的 HDFS 目錄:
$ bin/hdfs dfs -mkdir /user $ bin/hdfs dfs -mkdir /user/<username>
-
復制輸入文件到分布式文件系統中:
$ bin/hdfs dfs -mkdir input $ bin/hdfs dfs -put etc/hadoop/*.xml input
-
運行提供的示例程序:
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar grep input output 'dfs[a-z.]+'
-
從分布式文件系統中復制文件到本地文件系統,驗證輸出的結果:
$ bin/hdfs dfs -get output output $ cat output/*
或者直接查看分布式文件系統的輸出文件:
$ bin/hdfs dfs -cat output/*
-
完成以上步驟后,執行一下命令來停止所有的守護進程:
$ sbin/stop-dfs.sh
單機運行 Yarn
在偽分布式模式中,只需設定很少的參數,你就可以用 Yarn 運行一個 MapReduce 作業,並激活 ResourceManager 守護進程和 NodeManager 守護進程。
后續指令假定上述指令的第 1 ~ 4 步已被執行:
-
如下配置參數:
etc/hadoop/mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> <configuration> <property> <name>mapreduce.application.classpath</name> <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value> </property> </configuration>
etc/hadoop/yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> </configuration>
-
啟動 ResourceManager 守護進程和 NodeManager 守護進程:
$ sbin/start-yarn.sh
-
瀏覽 ResourceManager 的網頁,地址默認是:
- ResourceManager - http://localhost:8088/
-
運行一個 MapReduce 作業。
-
完成以上步驟后,執行一下命令來停止所有的守護進程:
$ sbin/stop-yarn.sh
完全分布式模式
如果想要安裝完全分布式的、非試驗性的集群,請參閱文檔集群安裝。