1. 目的说明
本文档提供apache hadoop的基础安装手册,适用于快速入门练习使用;生产环境配置,在关键步骤和重要参数设置需要小心对待。
2. 参考文档
《hadoop权威指南-第3版》
hadoop Reference Document
3. 系统准备
准备3台centos6.5服务器,机器配置保证2g内存,连通外网。
server info:
hostname ip
master 192.168.0.180
slave1 192.168.0.181
slave2 192.168.0.182
准备oracle JDK
http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html
准备apache hadoop
http://hadoop.apache.org/releases.html
#选择已经编译好的binary
4. 基础环境配置
基础环境搭建,主要是用户创建、JDK环境和ssh无密码登陆;在虚拟机环境中,通常先在一个虚拟机上配置好JDK和ssh无密码登陆,只需要clone或者直接copy2份虚拟机,然后更改ip和主机名。本次实验是按完整的3台完整虚拟机操作,安装时选择basic server。
4.1 网络环境配置
先在master机器上操作,slave1和slave2重复同样的操作:
主机名配置
vi /etc/sysconfig/network
#修改hostname
hostname=master
hosts配置
vi /etc/hosts
#添加以下内容
192.168.0.180 master
192.168.0.181 slave1
192.168.0.182 slave2
网卡文件配置
vi /etc/sysconfig/network-scripts/ifcfg-etho
#修改以下内容
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.181
GATEWAY=192.168.0.1
NETMASK=255.255.255.0
#重启网络服务
service network restart
DNS配置
vi /etc/resolv.conf
#添加以下内容
nameserver 114.114.114.114
关闭防火墙
service iptables stop
chkconfig iptables off
关闭selinux
vi /etc/selinux/config
#修改SELINUX
SELINUX=disabled
4.2 JDK安装配置
#检查是否安装JDK:
rpm -qa | grep java
#卸载JDK
rpm -e java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
rpm -e java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
#安装oracle JDK
scp jdk-8u111-linux-x64.tar.gz root@master:~/
mkdir -p /usr/java
tar -zxvf jdk-8u111-linux-x64.tar.gz -C /usr/java
#修改环境变量
vi /etc/profile
#末行添加以下内容
export JAVA_HOME=/usr/java/jdk1.8.0_111
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
#环境变量生效
source /etc/profile
#验证环境变量
java -version
javac -version
4.3 用户和目录创建
#创建用户组和用户
groupadd hadoop
useradd -g hadoop -s /bin/bash -d /home/hadoop -m hadoop
passwd hadoop
#创建hadoop介质目录
mkdir -p /opt/hadoop/
#创建hadoop存储目录
mkdir -p /hadoop/hdfs/name
mkdir -p /hadoop/hdfs/data
mkdir -p /hadoop/tmp
#目录权限
chown hadoop.hadoop -R /hadoop
chown hadoop.hadoop -R /opt/hadoop
4.4 ssh无密码登陆
master和slave操作。
#生成公钥私钥
su - hadoop
ssh-keygen -t rsa -P ''
chmod 700 ~/.ssh
master操作
#复制公钥到slave机器
ssh-copy-id hadoop@slave1
ssh-copy-id hadoop@slave2
#测试是否可以登陆
ssh slave1
ssh slave2
5. hadoop安装配置
5.1 hadoop介质配置
上传hadoop介质
scp hadoop-2.7.3.tar.gz root@master:~/
配置hadoop介质和环境变量
su - hadoop
#解压介质
tar -zxvf hadoop-2.7.3.tar.gz -C /opt/hadoop/
#编辑环境变量,slave最好也配置一下hadoop环境变量。
vi ~/.bash_profile
#添加以下内容
export HADOOP_HOME=/opt/hadoop/hadoop-2.7.3/
#PATH增加hadoop的bin目录
PATH=$PATH:$HOME/bin:$HADOOP_HOME/bin
#使之生效
source ~/.bash_profile
5.2 配置core-site.xml
vi core-site.xml
#修改以下内容
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
</configuration>
5.3 配置hdfs-site.xml
vi hdfs-site.xml
#添加以下内容
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
5.4 配置mapred-site.xml
#默认没有mapred-site.xml,需要copy一份模版
cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
vi etc/hadoop/mapred-site.xml
#添加以下内容
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
5.5 配置yarn-site.xml
vi yarn-site.xml
#添加以下内容
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1600</value>
</property>
</configuration>
```
### 5.6 配置相关env.sh
配置hadoop-env.sh
```bash
cd $HADOOP_HOME
vi etc/hadoop/hadoop-env.sh
```
配置yarn-env.sh
```bash
cd $HADOOP_HOME
vi etc/hadoop/yarn-env.sh
#修改JAVE_HOME
#修改JAVA_HEAP_MAX=-Xmx3072m
```
5.7 配置slave文件
添加slave机器
```bash
vi etc/hadoop/slaves
#添加以下内容
slave1
slave2
```
### 5.8 同步hadoop介质
```bash
scp -r hadoop-2.7.3 slave1:/opt/hadoop
scp -r hadoop-2.7.3 slave2:/opt/hadoop
```
## 6. hadoop环境验证
### 6.1 hadoop进程管理
```bash
#启动hadoop进程
cd $HADOOP_HOME
sbin/start-dfs.sh
sbin/start-yarn.sh
#关闭hadoop进程
sbin/stop-dfs.sh
sbin/stop-yarn.sh
#start-all.sh和stop-all.sh虽然支持,但已经标明被废弃了。
```
### 6.2 hadoop运行状态检查
分别在3台虚拟机上验证进程
master状态:
```bash
#状态检查
hdfs dfsadmin -report
#进程检查
[hadoop@master hadoop-2.7.3]$ jps
31616 Jps
31355 ResourceManager
31071 SecondaryNameNode
```
slave状态:
```bash
[hadoop@slave1 ~]$ jps
30885 NodeManager
30987 Jps
30669 DataNode
```
登陆web管理平台
```
http://master:8088/cluster
```
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/68803-ea481d5c8dc91eec.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
```
http://master:50070
```
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/68803-d0a4caf99ea5b853.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
### 6.3 运行wordcount示例
```bash
#创建hadoop目录
hdfs dfs -mkdir /test
#上传运行的文本,随便写几个单词
hdfs dfs -put test.txt /test/
hdfs dfs -ls /test/
#运行wordcount
cd $HADOOP_HOME
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/test.txt /test/out
#验证运行结果
[hadoop@master hadoop-2.7.3]$ hdfs dfs -ls /test/out
Found 2 items
-rw-r--r-- 2 hadoop supergroup 0 2016-11-20 20:56 /test/out/_SUCCESS
-rw-r--r-- 2 hadoop supergroup 41 2016-11-20 20:56 /test/out/part-r-00000
[hadoop@master hadoop-2.7.3]$ hdfs dfs -cat /test/out/part-r-00000
china 1
hadoop 1
hello 1
people 1
word 1
```
## 7. hadoop故障排查
### 7.1 启动前的检查
检查防火墙关闭
检查hosts正确配置
检查主机网络正确配置
检查selinux关闭
检查JDK安装正确
检查ssh无密码登陆正确
检查hadoop存储和介质目录权限正确
检查hadoop配置文件(重要的4个)是否正确
检查yarn-site.xml,此项参数设计hadoop性能调优,入门暂不考虑这个参数,保证大于1536即可,否则有可能会导致wordcount运行失败。
```xml
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1600</value>
</property>
```
检查yarn-env.sh,此项参数涉及hadoop性能调优,入门暂不考虑这个参数。
```bash
JAVA_HEAP_MAX=-Xmx3072m
```
### 7.2 运行日志
运行日志在$HADOOP_HOME/logs中:
```bash
cd $HADOOP_HOME
[hadoop@master logs]$ ls
hadoop-hadoop-namenode-master.log hadoop-hadoop-secondarynamenode-master.out.2
hadoop-hadoop-namenode-master.out hadoop-hadoop-secondarynamenode-master.out.3
hadoop-hadoop-namenode-master.out.1 SecurityAuth-hadoop.audit
hadoop-hadoop-namenode-master.out.2 yarn-hadoop-resourcemanager-master.log
hadoop-hadoop-namenode-master.out.3 yarn-hadoop-resourcemanager-master.out
hadoop-hadoop-secondarynamenode-master.log yarn-hadoop-resourcemanager-master.out.1
hadoop-hadoop-secondarynamenode-master.out yarn-hadoop-resourcemanager-master.out.2
hadoop-hadoop-secondarynamenode-master.out.1 yarn-hadoop-resourcemanager-master.out.3
#查看日志信息,slave机器类似操作
vi hadoop-hadoop-namenode-master.log
```