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用户)
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用户)
??? 修改/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用户)
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用户)
将该文件修改成如下内容:
表6-11:修改后的slaves
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用户)
禁用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用户)
69 格式化hdfs
在namenode上执行如下命令,格式化hdfs:
表6-22:格式化hdfs(hadoop用户)
7 测试
在namenode上执行如下命令启动Hadoop:
表7-1:启动Hadoop(hadoop用户)
start-dfs.sh start-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 |
|