本教程服务器主机都是CentOS 7(Red Hat 7 亦可),集群结点分布状况以下表:html
+---------------+-----------+---------------------------------- |IP |HOSTNAME |备注 +---------------+-----------+---------------------------------- |192.168.6.171 |hdpmmaster |ResourceManager 进程所在机器 +---------------+-----------+---------------------------------- |192.168.6.172 |hdpsmaster |SecondaryNameNode 主机的备机 +---------------+-----------+---------------------------------- |198.168.6.67 |hdpslave67 |datanode +---------------+-----------+---------------------------------- |198.168.6.68 |hdpslave68 |datanode +---------------+-----------+---------------------------------- |198.168.6.69 |hdpslave68 |datanode +---------------+-----------+----------------------------------
01) 新建用户: adduser hadoop(注: 在建立hadoop用户的同时也建立了hadoop用户组) 02) 给hadoop用户添加登陆密码: passwd hadoop 03) 把hadoop用户加入到hadoop用户组: usermod -a -G hadoop hadoop 03) 赋予用户root权限, 向/etc/sudoers中添加"hadoop ALL=(ALL) ALL",若是没有写的权限须要先执行 chmod +w /etc/sudoers 注:以上全部操做都是在root用户下完成,非root用户能够在全部命令前加sudo
01) 修改服务器的 hostname,使用命令 hostnamectl set-hostname <new_host_name>java
192.168.6.171 中: hostnamectl set-hostname hdpmmaster 192.168.6.172 中: hostnamectl set-hostname hdpsmaster 192.168.6.67 中: hostnamectl set-hostname hdpslave67 192.168.6.68 中: hostnamectl set-hostname hdpslave68 192.168.6.69 中: hostnamectl set-hostname hdpslave69
02) 向/etc/hosts文件中添加域名和IP的映射,内容以下node
192.168.6.171 hdpmmaster 192.168.6.172 hdpsmaster 192.168.6.67 hdpslave67 192.168.6.68 hdpslave68 192.168.6.69 hdpslave69
注:以上全部操做都是在root用户下完成,非root用户能够在全部命令前加sudolinux
01) ssh安装,使用命令 sudo yum isntall -y openssdweb
02) ssh dsa算法密钥对生成,分别在5台机器执行如下3条命令算法
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
03) 复制公钥到集群服务器,使用命令 ssh-copy-id <user>@<host>apache
示例:复制 hdpslave67(192.168.6.67) 的公钥到 hdpslave68(192.168.6.68) bash
注:能够执行 ssh hadoop@hdpslave68 命令看是否须要输入登陆密码来确认是否陈功,同时避免之后检查出什么问题最好保证集群中的服务器可以两两无密码登陆。服务器
01) 下载并安装JDKapp
01) 下载 jdk 的 rpm 安装文件 02) 使用命令 sudo rpm -ivh jdk-8u144-linux-x64.rpm 安装
02) JDK 环境变量配置:sudo vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_144 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=$CLASSPATH:.:${JAVA_HOME}/lib:${JAVA_HOME}/jre/lib export PATH=${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin:$PATH
注:jdk的环境变量配置也可写入 hadoop 用户目录下的 .bashrc 文件,或者 .bash_profile 文件
sudo systemctl stop firewalld #中止防火墙服务 sudo systemctl disable firewalld #禁用防火墙服务开机启动
01) 下载并安装 hadoop (版本:3.0.0)
wget http://mirrors.shuosc.org/apache/hadoop/common/hadoop-3.0.0/hadoop-3.0.0.tar.gz tar -xzf hadoop-3.0.0.tar.gz -C /usr/local/ cd /usr/local/ ln -s hadoop-3.0.0/ hadoop #创建软连接, 也可直接使用 mv hadoop-3.0.0 hadoop 命令更名
02) 配置 hadoop 环境变量,向 /home/hadoop/.bashrc 文件添加如下内容
# HADOOP export HADOOP_HOME=/usr/local/hadoop export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export HADOOP_INSTALL=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
03) 配置 hadoop 安装目录(/usr/local/hadoop)下的 etc/hadoop/core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hdpmmaster:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:///usr/local/hadoop/hdptmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
04) 配置 hadoop 安装目录(/usr/local/hadoop)下的 etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///usr/local/hadoop/hadoop_data/hdfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///usr/local/hadoop/hadoop_data/hdfs/datanode</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>hdpsmaster:9868</value> </property> </configuration>
05) 配置 hadoop 安装目录(/usr/local/hadoop)下的 etc/hadoop/mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hdpmmaster:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hdpmmaster:19888</value> </property> </configuration>
06) 配置 hadoop 安装目录(/usr/local/hadoop)下的 etc/hadoop/yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <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> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>2</value> </property> <!-- <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>3072</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb></name> <value>3052</value> </property> --> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>hdpmmaster:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>hdpmmaster:8031</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>hdpmmaster:8032</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>hdpmmaster:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>hdpmmaster:8088</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration>
07) 配置 hadoop 安装目录(/usr/local/hadoop)下的 etc/hadoop/workers
hdpsmaster hdpslave67 hdpslave68 hdpslave69
注:该 workers 文件也能够配置为ip,以下
192.168.6.171 192.168.6.67 192.168.6.68 192.168.6.69
08) 配置 hadoop 安装目录(/usr/local/hadoop)下的 etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/java/latest #去掉前面的'#', 且写入jdk的安装路径, 这里的写法用latest是为了之后jdk升级不用修改该配置, 固然也能够写jdk安装的绝对路径, 即"/usr/java1.8.0_144"
09) 格式化namenode
hdfs namenode -format
注:格式化以前须要将剩余的主机都如此配置hadoop,最简单的作法就是配置好一台,而后直接复制到剩余的主机服务器上。同时后续可能须要修改配置文件每次都须要同步配置文件,能够写个简单的同步脚本,内容以下。
# 名称: scphdp.sh # 路径: /usr/local/hadoop # 备注: 01. 须要添加执行权限, chmod +x /usr/local/hadoop/scphdp.sh # 02. 注意修改集群的ip echo "==========6.67 begin==========" scp -r etc/hadoop hadoop@192.168.6.67:/usr/local/hadoop/etc echo "===========6.67 end===========" echo "==========6.68 begin==========" scp -r etc/hadoop hadoop@192.168.6.68:/usr/local/hadoop/etc echo "===========6.68 end===========" echo "==========6.69 begin==========" scp -r etc/hadoop hadoop@192.168.6.69:/usr/local/hadoop/etc echo "===========6.69 end===========" #echo "==========6.172 begin==========" #scp -r etc/hadoop hadoop@192.168.6.172:/usr/local/hadoop/etc #echo "===========6.172 end==========="
10) 启动集群
start-all.sh
注:启动以后经过 jps 命令查看java后台进程,各个结点的java进程信息以下
+---------------+-----------+-------------------------------------------------- |IP |HOSTNAME |java进程 +---------------+-----------+-------------------------------------------------- |192.168.6.171 |hdpmmaster |ResourceManager, NameNode, Jps +---------------+-----------+-------------------------------------------------- |192.168.6.172 |hdpsmaster |Jps, SecondaryNameNode, NodeManager, DataNode +---------------+-----------+-------------------------------------------------- |198.168.6.67 |hdpslave67 |NodeManager, Jps, DataNode +---------------+-----------+-------------------------------------------------- |198.168.6.68 |hdpslave68 |NodeManager, Jps, DataNode +---------------+-----------+-------------------------------------------------- |198.168.6.69 |hdpslave68 |NodeManager, Jps, DataNode +---------------+-----------+--------------------------------------------------
11) 在有图形界面的pc上访问下面两个地址连接,查看相关信息
http://hdpmmaster:8088/ #NameNode图形界面, 任务分配和任务进度信息的查询 http://hdpmmaster:9870/ #集群结点(Node Of Cluster)图形界面
注:以域名访问须要向该pc的hosts文件中加入 "192.168.6.171 hdpmmaster",Windows 操做系统的hosts文件路径在 "C:\Windows\System32\drivers\etc\hosts",CentOS操做系统的hosts文件路径在"/etc/hosts"。
12) 单词统计示例运行
hadoop fs -mkdir /input hadoop fs -chmod -R 775 /input hadoop fs -put /usr/local/hadoop/LICENSE.txt /input hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0.jar wordcount /input /output
注:01. 每次执行上面的 hadoop jar 命令,须要确认集群结点上的 /output 目录是否存在,存在则使用命令 "hadoop fs -rmr -f /output"删除该目录
02. 执行成功以后能够在 http://hdpmmaster:9870/explorer.html 中的"/output"文件夹中找到输出结果,容许下载和预览该结果文件
13) 中止集群
stop-all.sh
14) 任务历史服务启动与关闭,web访问地址是 http://hdpmmaster:19888/jobhistory/ 端口是在mapred-site.xml中配置的
mapred --daemon start historyserver #启动 mapred --daemon stop historyserver #关闭
问题描述: 执行任务的时虚拟内存溢出 报错信息: Container [pid=5623,containerID=container_1514514155753_0001_01_000002] is running beyond virtual memory limits. Current usage: 155.1 MB of 1 GB physical memory used; 2.4 GB of 2.1 GB virtual memory used. Killing container. 解决方案: 方案一: 关闭虚拟内存监测, 在yarn-site.xml文件中添加"yarn.nodemanager.vmem-check-enabled"配置, 值为"false"(该方案不建议在正式环境中使用) 方案二: 提升内存配置, 参考 http://blog.chinaunix.net/uid-25691489-id-5587957.html
问题描述: 集群启动正常, 使用jps查看各个结点的java进程也是对的, 可是没法打开http://hdpmmaster:8088, 虽然http://hdpmmaster:9870能访问, 可是查看 DataNode 页面没有看到任何一个结点。 报错信息: 查看任何一个 DataNode 结点的日志文件(HADOOP_HOME/logs/hadoop-hadoop-datanode-hdpsmaster.log)发现如下信息 Retrying connect to server: hdpmmaster/192.168.6.171:9000. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS) 解决方案: 查看 hdpmmaster/192.168.6.171 主机的hosts文件中是否有"127.0.0.1 hdpmmaster", 删除该行, 从新格式化集群(hdfs namenode -format). 问题缘由: 由于将hdpmmaster映射在了localhost, 因此DataNode结点没法访问到该NameNode, 同时也没法打开http://hdpmmaster:8088. 能够经过查看格式化集群结点时最后的提示信息来断定是否有出现该问题. 若是是"SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.0.1", 表示映射错误; 若是是"SHUTDOWN_MSG: Shutting down NameNode at hdpmmaster/192.168.6.171", 表示映射是正确的. 固然这一切都要在全部集群主机可以互相ping通的前提下, 即须要的全部端口都开放, 或者直接关闭防火墙, 该教程为简洁就是直接关闭集群全部主机的防火墙.
问题描述: 在http://hdpmmaster:8088/cluster/nodes的界面出现unhealthy结点 报错信息: yarn.server.nodemanager.DirectoryCollection: Directory /var/lib/hadoop-yarn/cache/yarn/nm-local-dir error, used space above threshold of 90.0%, removing from list of valid directories 解决方案: 加大磁盘容量, 或者清理磁盘空间, 固然也能够提升yarn的监测数值, 即在yarn-site.xml中添加"yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage"配置, 值是一个百分比数值, 例如"95.0" 问题缘由: 该结点主机的磁盘使用超过90%,