1 安装环境
内核:3.10.0-229.el7.x86_64
操作系统:CentOS 7
ssh和sshd已经默认配置
在局域网中有三台机器用于安装:192.168.1.170,192.168.1.171,192.168.1.172,此处192.168.1.170为namenode,192.168.1.171和192.168.1.172为datanode1和datanode2。
IP地址已经配置好,三台机器互相可以通信。
2 配置Java
此处将Java配置到系统环境里面去。
首先,解压缩Java官方压缩包,并配置环境变量。
表2-1:配置Java(root用户)
tar -xzf jdk-8u45-linux-x64.gz
mv ./jdk1.8.0_45 /usr/local/java
cat <<HERE >>/etc/profile
JAVA_HOME=/usr/local/java
PATH=\$PATH:\$JAVA_HOME/bin
HERE
需要在三台机器上分别执行该配置操作。
如果需要JAVA_HOME环境变量在当前shell环境立即生效,执行如下命令即可。
表2-2:应用环境变量(root用户)
source /etc/profile
3 添加hadoop用户
分别在三台机器上添加hadoop用户,配置完成后,通过hadoop用户来使用Hadoop。
表3-1:添加hadoop用户(root用户)
useradd hadoop
passwd hadoop
4 配置主机名
4.1 配置/etc/hosts文件
在三台机器上的/etc/hosts文件末尾加入如下内容:
表4-1:修改/etc/hosts文件(root用户)
192.168.1.170 hmaster
192.168.1.171 hslave1
192.168.1.172 hslave2
4.2 配置/etc/hostname文件
将/etc/hostname文件,根据namenode,datanode1,datanode2的顺序修改为:
表4-2:修改/etc/hostname文件(root用户)
| hmaster |
|---|
| hslave1 |
| hslave2 |
修改/etc/hostname文件会在节点重启后依然生效。执行如下命令,只会在当前环境生效,重启失效。
按照同样的顺序(namenode,datanode1,datanode2)分别执行以下命令在各节点上。
表4-3:设置主机名(root用户)
| hostname hmaster |
|---|
| hostname hslave1 |
| hostname hslave2 |
5 配置ssh免密登录
首先,需要在三台机器上修改sshd的配置文件以允许使用密钥的验证方式登录。
表5-1:启用ssh密钥验证方式登录(root用户)
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
sed -i '1,/#RSA/s/#RSA/RSA/' /etc/ssh/sshd_config
sed -i '1,/#Pub/s/#Pub/Pub/' /etc/ssh/sshd_config
service sshd restart
需要在三台机器上分别生成private和public密钥。其中将namenode的公钥分发给namenode,datanode1和datanode2,将datanode1和datanode2的公钥分发给namenode。datanode1和datanode2互相分发公钥。
表5-2:namenode分发公钥(hadoop用户)
mkdir $HOME/namenode
echo "" | ssh-keygen -t rsa -P ''
ssh-copy-id hadoop@hmaster
ssh-copy-id hadoop@hslave1
ssh-copy-id hadoop@hslave2
表5-3:datanode1分发公钥(hadoop用户)
mkdir $HOME/datanode
echo "" | ssh-keygen -t rsa -P ''
ssh-copy-id hadoop@hmaster
ssh-copy-id hadoop@hslave2
表5-4:datanode2分发公钥(hadoop用户)
mkdir $HOME/datanode
echo "" | ssh-keygen -t rsa -P ''
ssh-copy-id hadoop@hmaster
ssh-copy-id hadoop@hslave1
配置完成之后,namenode的hadoop用户就可以免密ssh登录datanode1和datanode2了。同时,datanode1和datanode2也分别可以通过hadoop用户免密ssh登录namenode了。
6 配置Hadoop
6.1 配置环境变量
分别在三台机器上配置Hadoop。首先解压缩Hadoop官方压缩包,并为hadoop用户配置环境变量。
表6-1:配置Hadoop(root用户)
tar -xzf hadoop-2.6.0.tar.gz
mv hadoop-2.6.0 /usr/local/hadoop
chown -R hadoop:hadoop /usr/local/hadoop
表6-2:配置Hadoop环境变量(hadoop用户)
cat <<HERE >>/home/hadoop/.bashrc
HADOOP_HOME=/usr/local/hadoop
HADOOP_PREFIX=\$HADOOP_HOME
HADOOP_COMMON_HOME=\$HADOOP_HOME
HADOOP_CONF_DIR=\$HADOOP_HOME/etc/hadoop
HADOOP_HDFS_HOME=\$HADOOP_HOME
HADOOP_MAPRED_HOME=\$HADOOP_HOME
HADOOP_YARN_HOME=\$HADOOP_HOME
PATH=\$PATH:\$HADOOP_HOME/sbin:\$HADOOP_HOME/bin
HERE
如果需要hadoop相关环境变量在当前shell环境立即生效,执行如下命令即可。
表6-3:应用环境变量(hadoop用户)
source ~/.bashrc
6.2 修改hadoop-env.sh
修改hadoop默认配置文件。默认配置文件存放在$HADOOP_HOME/etc/hadoop目录下。
hadoop-env.sh(三台机器)
首先备份该文件:
表6-4:备份hadoop-env.sh(hadoop用户)
| cp hadoop-env.sh hadoop-env.sh.backup |
|---|
将该文件修改成如下内容:
表6-5:修改后的hadoop-env.sh
export JAVA_HOME=/usr/local/java
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}
for f in $HADOOP_HOME/contrib/capacity-scheduler/*.jar; do
if [ "$HADOOP_CLASSPATH" ]; then
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f
else
export HADOOP_CLASSPATH=$f
fi
done
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true"
export HADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS"
export HADOOP_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS $HADOOP_DATANODE_OPTS"
export HADOOP_SECONDARYNAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_SECONDARYNAMENODE_OPTS"
export HADOOP_NFS3_OPTS="$HADOOP_NFS3_OPTS"
export HADOOP_PORTMAP_OPTS="-Xmx512m $HADOOP_PORTMAP_OPTS"
export HADOOP_CLIENT_OPTS="-Xmx512m $HADOOP_CLIENT_OPTS"
export HADOOP_SECURE_DN_USER=${HADOOP_SECURE_DN_USER}
export HADOOP_SECURE_DN_LOG_DIR=${HADOOP_LOG_DIR}/${HADOOP_HDFS_USER}
export HADOOP_PID_DIR=${HADOOP_PID_DIR}
export HADOOP_SECURE_DN_PID_DIR=${HADOOP_PID_DIR}
export HADOOP_IDENT_STRING=$USER
6.3 修改hdfs-site.xml
hdfs-site.xml(三台机器)
首先备份该文件:
表6-6:备份hdfs-site.xml(hadoop用户)
| cp hdfs-site.xml hdfs-site.xml.backup |
|---|
将该文件修改成如下内容:
表6-7:修改后的hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/namenode</value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property><
property>
<name>dfs.client.block.write.replace-datanode-on-failure.policy</name>
<value>never</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value></property><property>
<name>dfs.support.append</name>
<value>true</value></property><property>
<name>dfs.namenode.secondary.http-address</name>
<value>hmaster:50090</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>hmaster:50070</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/datanode</value>
<final>true</final>
</property>
</configuration>
6.4 修改mapred-site.xml
mapred-site.xml(三台机器)
首先生成该文件:
表6-8:备份mapred-site.xml(hadoop用户)
| cp mapred-site.xml.template mapred-site.xml |
|---|
将该文件修改成如下内容:
表6-9:修改后的mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
6.5 修改slaves
slaves(三台机器)
首先备份该文件:
表6-10:备份slaves(hadoop用户)
| cp slaves slaves.backup |
|---|
将该文件修改成如下内容:
表6-11:修改后的slaves
| hslave1 hslave2 |
|---|
6.6 修改yarn-site.xml
yarn-site.xml(三台机器)
首先备份该文件:
表6-12:备份yarn-site.xml(hadoop用户)
| cp yarn-site.xml yarn-site.xml.backup |
|---|
将该文件修改成如下内容:
表6-13:修改后的yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hmaster:8031</value></property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hmaster:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hmaster:8030</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hmaster:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hmaster:8088</value>
</property>
<property>
<description>Classpath for typical applications.</description>
<name>yarn.application.classpath</name>
<value>$HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/share/hadoop/common/*,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,$HADOOP_YARN_HOME/share/hadoop/yarn/*,$HADOOP_YARN_HOME/share/hadoop/yarn/lib/</value>
</property>
</configuration>
6.7 修改core-site.xml
core-site.xml(三台机器)
首先备份该文件:
表6-14:备份core-site.xml(hadoop用户)
| cp core-site.xml core-site.xml.backup |
|---|
将该文件修改成如下内容:
表6-15:修改后的core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hmaster:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/data/hadoop/tmp</value>
</property>
</configuration>
6.8 关闭防火墙及禁用IPv6
关闭防火墙:
表6-16:关闭防火墙(root用户)
systemctl stop firewalld
# 执行以下命令配置开机禁用防火墙
systemctl disable firewalld
禁用IPv6:
表6-17:备份/etc/sysctl.conf文件(root用户)
| cp /etc/sysctl.conf /etc/sysctl.conf.backup |
|---|
表6-18:添加如下内容到/etc/sysctl.conf(root用户)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
要使/etc/sysctl.conf文件修改立即生效,执行如下命令即可。
表6-19:应用修改(root用户)
| sysctl -p |
|---|
禁用SELINUX,修改/etc/selinux/config文件,修改成如下内容。
表6-20:修改/etc/selinux/config文件(root用户)
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.SELINUXTYPE=targeted
修改此配置文件后,重启机器会禁用掉SELINUX。
如果要立即禁用SELINUX,执行如下命令即可。
表6-21:禁用SELINUX(root用户)
| setenforce 0 |
|---|
69 格式化hdfs
在namenode上执行如下命令,格式化hdfs:
表6-22:格式化hdfs(hadoop用户)
| hdfs namenode -format |
|---|
7 测试
在namenode上执行如下命令启动Hadoop:
表7-1:启动Hadoop(hadoop用户)
| start-dfs.shstart-yarn.sh |
|---|
访问http://hmaster:50070,测试是否安装成功。hmaster可以更换为实际的namenode的IP地址。
如果在Windows上面访问,可以修改系统hosts文件来实现主机名和IP地址的对应。修改C:\Windows\System32\drivers\etc\hosts文件,在该文件中加入如下内容,保存后,即可在浏览器地址栏输入主机名代替IP地址。
192.168.1.170 hmaster
192.168.1.171 hslave1
192.168.1.172 hslave2