Hadoop 一:完美集群搭建

jopen 12年前發布 | 3K 次閱讀 拉手 扎克伯格

 【集群節點】
——————————————————————————————————————————————
unbuntu-master  192.168.77.81  namenode|jobtracker
unbuntu-slaveone  192.168.77.82  datanode|tasktracker
unbuntu-slavetwo  192.168.77.83  datanode|tasktracker
——————————————————————————————————————————————
# NameNode 和 JobTracker 可以是同一臺機器,也可以分開;
# Secondary NameNode 在 Hadoop-1.0.3 中被廢棄,用 Checkpoint Node 和 Backup Node 來代替;

 

一、HOSTS

 

1. 修改 HOSTS 文件:
$ sudo vi /ect/hosts

 

# 增加以下行:
192.168.77.81 unbuntu-master
192.168.77.82 unbuntu-slaveone
192.168.77.83 unbuntu-slavetwo

 

# 其中以下兩行名稱重復,容易引起異常,可注釋第一行;
127.0.1.1  unbuntu-master
192.168.77.81 unbuntu-master

 

2. 其他節點同步修改;

 

二、JDK(Ubuntu)

 

Suse 和 Redhat 操作系統可以下載 RPM 格式安裝包,使用以下命令直接安裝,并且不需要配置環境變量:
$ rpm -ivh jdk-7u6-linux-x64.rpm

 

1. 下載 JDK 安裝包并放入指定位置:
/home/navon/entry/jdk-7u6-linux-x64.tar.gz

 

2. 解壓并移動到指定位置:
$ tar -zxvf jdk-7u6-linux-x64.tar.gz
$ mv /home/navon/entry/jdk1.7.0_06 /usr/java

 

3. 配置環境變量:
$ vim ~/.bashrc

 

# 增加以下行:
export JAVA_HOME=/usr/java/jdk1.7.0_06
export CLASSPATH=.:${JAVA_HOME}/lib:${JAVA_HOME}/jre/lib
export PATH=${JAVA_HOME}/bin:$PATH

 

# 使配置生效:
$ source ~/.bashrc

 

4. 測試安裝:
$ java -version

 

5. 其他節點同步安裝;

 

三、SSH(Ubuntu)

 

Suse 和 Redhat 操作系統,可以省略步驟1,SSH 默認已安裝;

 

1. 安裝 SSH(Ubuntu):
$ sudo apt-get install ssh

 

2. 生成密鑰:
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

 

3. 存儲口令:
$ ssh-add

 

4. 同步到其他節點(其他節點需先安裝 SSH):

方法一:
$ scp ~/.ssh/authorized_keys ubuntu-slaveone:~/.ssh/
$ scp ~/.ssh/authorized_keys ubuntu-slavetwo:~/.ssh/

 

navon@ubuntu-slaveone$ chmod 644 ~/.ssh/authorized_keys
navon@ubuntu-slavetwo$ chmod 644 ~/.ssh/authorized_keys

 

方法二:
$ scp ~/.ssh/id_dsa.pub ubuntu-slaveone:~/.ssh/
$ scp ~/.ssh/id_dsa.pub ubuntu-slavetwo:~/.ssh/

 

navon@ubuntu-slaveone$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
navon@ubuntu-slavetwo$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

 

5. 驗證:
navon@ubuntu-master$ ssh ubuntu-slaveone
navon@ubuntu-master$ ssh ubuntu-slavetwo

 

# 不需要密碼連接成功說明配置完成;

 

四、安裝 HADOOP

 

1. 下載 Hadoop 安裝包并放入指定位置:
/home/navon/entry/hadoop-1.0.3.tar.gz

 

2. 解壓并移動到指定位置:
$ tar -zxvf hadoop-1.0.3.tar.gz
$ mv /home/navon/entry/hadoop-1.0.3. /usr

 

3. 配置環境變量(所有節點):
$ vim ~/.bashrc

 

# 增加以下行:
export HADOOP_HOME=/usr/hadoop-1.0.3
export PATH=$PATH:$HADOOP_HOME/bin

 

# 使配置生效:
$ source ~/.bashrc

 

4. 其他節點同步安裝;

 

五、Hadoop 配置(/usr/hadoop-1.0.3/conf):

 

1. 配置 hadoop-env.sh:
$ vi /usr/hadoop-1.0.3/conf/hadoop-env.sh

 

# 增加以下行:
export JAVA_HOME=/usr/java/jdk1.7.0_06
export HADOOP_HOME_WARN_SUPPRESS=1

 

# 后面一句表示取消環境變量HADOOP_HOME過時的警告;

 

2. 配置 core-site.xml:
$ vi /usr/hadoop-1.0.3/conf/core-site.xml

 

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <property>
  <name>hadoop.local.dir</name>
  <value>/home/${user.name}/hadoop/local</value>
  <description>A base for other directories.</description>
 </property>
 <property>
  <name>hadoop.other.dir</name>
  <value>/home/${user.name}/hadoop/other</value>
  <description>A base for other directories.</description>
 </property>
 <property>
  <name>hadoop.remote.dir</name>
  <value>/home/${user.name}/hadoop/remote</value>
  <description>A base for other directories.</description>
 </property>
 <property>
  <name>fs.default.name</name>
  <value>hdfs://ubuntu-master:19880</value>
  <description>The name of the default file system. A URI whose
  scheme and authority determine the FileSystem implementation.
  The uri's scheme determines the config property (fs.SCHEME.impl)
  naming the FileSystem implementation class. The uri's authority is
  used to determine the host, port, etc. for a filesystem.</description>
 </property>
 <property>
  <name>hadoop.tmp.dir</name>
  <value>/home/${user.name}/hadoop/tmp</value>
  <description>A base for other temporary directories.</description>
 </property>
</configuration>

 

# 其中 hadoop.local.dir 、hadoop.remote.dir 和 hadoop.other.dir
# 是自定義變量,使用方式:${hadoop.local.dir};
# ${user.name} 返回當前系統用戶;

 

3. 配置 hdfs-site.xml:
$ vi /usr/hadoop-1.0.3/conf/hdfs-site.xml

 

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <property>
  <name>dfs.name.dir</name>
  <value>${hadoop.local.dir}/dfs/name,${hadoop.remote.dir}/dfs/name</value>
  <description>Determines where on the local filesystem the DFS
  name node should store the name table(fsimage). If this is a
  comma-delimited list of directories then the name table is
  replicated in all of the directories, for redundancy. </description>
 </property>
 <property>
  <name>dfs.data.dir</name>
  <value>${hadoop.local.dir}/dfs/data,${hadoop.other.dir}/dfs/data</value>
  <description>Determines where on the local filesystem an DFS
  data node should store its blocks. If this is a comma-delimited
  list of directories, then data will be stored in all named
  directories, typically on different devices. Directories that
  do not exist are ignored. </description>
 </property>
 <property>
  <name>dfs.replication</name>
  <value>2</value>
  <description>Default block replication. The actual number of
  replications can be specified when the file is created. The default
  is used if replication is not specified in create time. </description>
 </property>
</configuration>

 

# 此處的目錄不能預先創建,Hadoop 格式化時會自動創建,如果預先創建反而會有問題;

 

4. 配置 mapred-site.xml:
$ vi /usr/hadoop-1.0.3/conf/mapred-site.xml

 

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <property>
  <name>mapred.job.tracker</name>
  <value>ubuntu-master:19881</value>
  <description>The host and port that the MapReduce job tracker
  runs at. If "local", then jobs are run in-process as a single map
  and reduce task. </description>
 </property>
 <property>
  <name>mapred.local.dir</name>
  <value>${hadoop.local.dir}/mapred/local</value>
  <description>The local directory where MapReduce stores
  intermediate data files. May be a comma-separated list of
  directories on different devices in order to spread disk i/o.
  Directories that do not exist are ignored. </description>
 </property>
 <property>
  <name>mapred.system.dir</name>
  <value>${hadoop.local.dir}/mapred/system</value>
  <description>The directory where MapReduce stores control files.
  </description>
 </property>
 <property>
  <name>mapred.tasktracker.map.tasks.maximum</name>
  <value>2</value>
  <description>The maximum number of map tasks that will be
  run simultaneously by a task tracker. </description>
 </property>
 <property>
  <name>mapred.tasktracker.reduce.tasks.maximum</name>
  <value>2</value>
  <description>The maximum number of reduce tasks that will be
  run simultaneously by a task tracker.</description>
 </property>
 <property>
  <name>mapred.child.java.opts</name>
  <value>-Xmx800m</value>
  <description>Java opts for the task tracker child processes.
  The following symbol, if present, will be interpolated: @taskid@
  is replaced by current TaskID. Any other occurrences of '@' will
  go unchanged. For example, to enable verbose gc logging to a
  file named for the taskid in /tmp and to set the heap maximum
  to be a gigabyte, pass a 'value'
  of: -Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc The
  configuration variable mapred.child.ulimit can be used to control
  the maximum virtual memory of the child processes. </description>
 </property>
</configuration>

 

5. 配置 masters:
$ vi /usr/hadoop-1.0.3/conf/masters

 

# 注意,此處不要設置為:
unbuntu-master

 

# 運行 Secondary NameNode 的機器列表(每行一個);

 

6. 配置 slaves
$ vi /usr/hadoop-1.0.3/conf/slaves

 

# 增加以下行:
unbuntu-slaveone
unbuntu-slavetwo

 

# 運行 DataNode 和 TaskTracker 的機器列表(每行一個);

 

7. 同步Hadoop配置:

navon@ubuntu-master$ scp -r /usr/hadoop-1.0.3/conf ubuntu-slaveone:/usr/hadoop-1.0.3
navon@ubuntu-master$ scp -r /usr/hadoop-1.0.3/conf ubuntu-slavetwo:/usr/hadoop-1.0.3

 

8. 測試:
navon@ubuntu-master$ hadoop

 

六、啟動集群

 

1. 格式化一個新的分布式文件系統:
navon@ubuntu-master$ hadoop namenode -format

 

2. 啟動 Hadoop:
navon@ubuntu-master$ start-dfs.sh
navon@ubuntu-master$ start-mapred.sh
 
# 在主節點上啟動 Hadoop,主節點會啟動所有從節點的 Hadoop;

# start-all.sh 和 stop-all.sh 這兩個腳本在1.03中被廢棄,使用
# start-dfs.sh & start-mapred.sh 和 stop-dfs.sh & stop-mapred.sh 來代替;

 

3. 關閉 Hadoop:
navon@ubuntu-master$ stop-dfs.sh
navon@ubuntu-master$ stop-mapred.sh

 

七、排錯

 

1. 日志目錄:
navon@ubuntu-master$ cd /usr/hadoop1.0.3/logs/

 

2. 查看端口占用情況:
navon@ubuntu-master$ netstat -antp | grep 19880

 

3. Incompatible namespaceIDs 錯誤:
namespaceIDs 不一致,每次進行文件系統格式化(hadoop namenode -format)會
重新創建一個 namenodeId,存儲在 …/dfs/data 目錄中,格式化時清空了 NameNode
下的數據,但沒有清空 DataNode 下的數據,導致啟動時 DataNode 失敗!
每次格式化之前清空所有節點數據目錄(…/dfs/data)即可避免該問題的出現;

 

八、實例

 

1. HDFS 瀏覽:
# NameNode 和 JobTracker 的網絡接口,默認地址分別為:
http://ubuntu-master:50070/
http://ubuntu-master:50030/

 

# DataNode 和 TaskTracker 的網絡接口,默認地址分別為:
http://ubuntu-slaveone:50075/
http://ubuntu-slaveone:50060/
http://ubuntu-slavetwo:50075/
http://ubuntu-slavetwo:50060/

 

2. 使用 jps(JVM 進程工具)查看進程:
navon@ubuntu-master$ jps
***** NameNode
***** JobTracker
***** jps

 

navon@ubuntu-slaveone$ jps
***** DataNode
***** TaskTracker
***** jps

 

3. 將輸入文件拷貝到分布式文件系統:
$ hadoop fs -mkdir sample-input
$ hadoop fs -put /usr/hadoop_1.0.3/conf/slaves sample-input

 

4. 運行發行版提供的示例程序:
$ hadoop jar hadoop-examples-1.0.3.jar grep sample-input sample-output 'sla[a-z.]+'

 

# 運行示例程序中的 grep(類),HDFS 上的輸入目錄為 sample-input
,輸出目錄為 sample-output,查找以 sla 開頭的文件;

 

5. HDFS 常用操作:
#  將 HDFS 的文件拷貝到本地文件系統;
hadoop fs -get output ~/output

 

# 查看 HDFS 的基本統計信息;
hadoop dfsadmin -report
 
# 查看當前 HDFS 的副本數;
$ hadoop fsck -locations

 

# 列出 HDFS 下的文件;
$ hadoop fs -ls

 

# 列出 HDFS 下 output 目錄中文件;
$ hadoop fs -ls output

 

#  刪除 HDFS 上 output 目錄;
hadoop fs -rmr output

 

#  查看 HDFS 上 output 目錄中文件的內容;
hadoop fs -cat output/*

轉自:http://www.cnblogs.com/cloudhopping/archive/2012/09/14/perfact_hadoop_1.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!