CentOS 6.5 hadoop 2.7.3 集群环境搭建
所需硬件,软件要求
使用 virtualBox 构建三台虚拟机模拟真实物理环境
操作系统:CentOS6.5
主机列表:
master ip: 192.168.3.171 slave1 ip: 192.168.3.135 slave2 ip: 192.168.3.136
# 添加用户 useradd hadoop # 修改密码 passwd hadoop
SSH 免密码登录安装,配置
保证由master主机能够免密码登录到datanodes节点机上
# master 生成公钥 $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys
复制 master 公钥到 datanodes节点机
# 复制 master 主机公钥到 datanode 节点机的 /tmp 目录 scp ~/.ssh/id_rsa.pub hadoop@192.168.3.135:/tmp/authorized_keys scp ~/.ssh/id_rsa.pub hadoop@192.168.3.136:/tmp/authorized_keys
追加 /tmp/authorized_keys 到 ~/.ssh/authorized_keys
cat /tmp/authorized_keys >> ~/.ssh/authorized_keys
注意:
1) .ssh目录的权限必须是700
2) .ssh/authorized_keys文件权限必须是600
JDK的安装与卸载
卸载 JDK
# 检查当前安装的JDK rpm -qa|grep gcj rpm -qa|grep jdk rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64 rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64 #查询当前系统中相关java 目录并删除 whereis java java: /etc/java /usr/lib/java /usr/share/java #删除查询出的结果目录 rm -fr /usr/share/java rm -fr /usr/lib/java rm -fr /etc/java
安装JDK
在usr目录下创建java目录并且下载JDK并且解压到 /usr/java 目录下
cd /usr mkdir java cd java wget http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-linux-x64.tar.gz tar -zxvf jdk-8u102-linux-x64.tar.gz
编辑 vim /etc/profile 文件并且在末尾追加
JAVA_HOME=/usr/java/jdk1.8.0_102 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar export PATH JAVA_HOME CLASSPATH
在不重新启动操作系统的情况下使 /etc/profile 文件生效
source /etc/profile
检查java的安装状态
[root@hadoop001 java]# javac 用法: javac <options> <source files> 其中,可能的选项包括: -g 生成所有调试信息 -g:none 不生成任何调试信息 -g:{lines,vars,source} 只生成某些调试信息 -nowarn 不生成任何警告 -verbose 输出有关编译器正在执行的操作的消息 -deprecation 输出使用已过时的 API 的源位置 -classpath <路径> 指定查找用户类文件和注释处理程序的位置 -cp <路径> 指定查找用户类文件和注释处理程序的位置 -sourcepath <路径> 指定查找输入源文件的位置 -bootclasspath <路径> 覆盖引导类文件的位置 -extdirs <目录> 覆盖所安装扩展的位置 -endorseddirs <目录> 覆盖签名的标准路径的位置 -proc:{none,only} 控制是否执行注释处理和/或编译。 -processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程 -processorpath <路径> 指定查找注释处理程序的位置 -parameters 生成元数据以用于方法参数的反射 -d <目录> 指定放置生成的类文件的位置 -s <目录> 指定放置生成的源文件的位置 -h <目录> 指定放置生成的本机标头文件的位置 -implicit:{none,class} 指定是否为隐式引用文件生成类文件 -encoding <编码> 指定源文件使用的字符编码 -source <发行版> 提供与指定发行版的源兼容性 -target <发行版> 生成特定 VM 版本的类文件 -profile <配置文件> 请确保使用的 API 在指定的配置文件中可用 -version 版本信息 -help 输出标准选项的提要 -A关键字[=值] 传递给注释处理程序的选项 -X 输出非标准选项的提要 -J<标记> 直接将 <标记> 传递给运行时系统 -Werror 出现警告时终止编译 @<文件名> 从文件读取选项和文件名 [root@hadoop001 java]# [root@hadoop001 java]# java -version java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14,mixed mode)
安装 Hadoop2.7.3
下载hadoop-2.7.3
cd /tmp wget http://apache.fayea.com/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
解压 hadoop-2.7.3.tar.gz
tar -zxvf hadoop-2.7.3.tar.gz
复制文件到 /usr 目录下
cp -R /tmp/hadoop-2.7.3 /usr/hadoop
配置hadoop的环境变量,在/etc/profile下追加
vim /etc/profile
追加如下的环境变量设置
HADOOP_HOME=/usr/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 YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
修改 etc/hadoop/hadoop-env.sh 文件
vim etc/hadoop/hadoop-env.sh # The java implementation to use. #export JAVA_HOME=${JAVA_HOME} export JAVA_HOME=/usr/java/jdk1.8.0_102
修改 etc/hadoop/core-site.xml 文件
<!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://Master:9000</value> </property> </configuration>
修改 etc/hadoop/hdfs-site.xml 文件
<!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>Master:50090</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/hadoop/tmp/dfs/data</value> </property> </configuration>
修改 etc/hadoop/yarn-site.xml 文件
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>Master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
修改 etc/hadoop/mapred-site.xml 文件
<!-- Put site-specific property overrides in this file. --> <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>
192.168.3.135 192.168.3.136
打包文件夹 /usr/hadoop,复制到 datanode 节点机,保证节点机环境配置与master保持一致格式化文件系统
hdfs namenode -format
启动文件服务
start-dfs.sh Make the HDFS directories required to execute MapReduce jobs:
hdfs dfs -mkdir /user hdfs dfs -mkdir /user/hadoop
hdfs dfs -mkdir input hdfs dfs -put etc/hadoop/*.xml input
执行提供的默认的例子
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
hdfs dfs -get output output cat output/* 或查看分布式文件系统文件内容 hdfs dfs -cat output/*
启动 ResourceManager守护进程和NodeManager守护进程,启动mapResource jobhistory 历史记录服务
start-yarn.sh mr-jobhistory-daemon.sh start historyserver
分别在各个主机上执行 jps 查看服务情况
[root@Master hadoop]# [root@Master hadoop]# jps 10210 Jps 9698 SecondaryNameNode 9864 ResourceManager 9497 NameNode [root@Master hadoop]# [root@Slave1 hadoop]# jps 8071 NodeManager 8279 Jps 7961 Datanode [root@Slave1 hadoop]# [root@Slave2 hadoop]# jps 5266 NodeManager 5155 Datanode 5444 Jps [root@Slave2 hadoop]# [root@Slave2 hadoop]#
web 访问页面
http://master:50070/ http://master:8088/cluster
停止服务
stop-dfs.sh stop-yarn.sh mr-jobhistory-daemon.sh stop historyserver
服务备注:
start-dfs.sh start-yarn.sh mr-jobhistory-daemon.sh start historyserver