4.2 安装Apache Hadoop
4.2.1 安装环境
这里只是演示手工安装ApacheHadoop的过程,不作为生产环境使用,因此建立四台VirtualBox上的Linux虚机,每台硬盘20GB,内存768MB(Hadoop建议操作系统的最小内存是2GB)。IP与主机名如下:
● 192.168.56.101 master
● 192.168.56.102 slave1
● 192.168.56.103 slave2
● 192.168.56.104 slave3
主机规划:192.168.56.101做master,运行NameNode和ResourceManager进程。其他三台主机做slave,运行DataNode和NodeManager进程。
操作系统:CentOS release 6.4(Final)。
Java版本:jdk1.7.0_75(2.7及其以后版本的Hadoop需要Java 7)。
Hadoop版本:hadoop-2.7.2。
4.2.2 安装前准备
第1、2步使用root用户执行,3、4步使用grid用户执行。
1.分别在四台机器上建立grid用户
# 新建用户grid,主目录为/home/grid,如果该目录不存在则建立 useradd -d /home/grid -m grid # 将grid用户加到root组 usermod -a -G root
2.分别在四台机器上的/etc/hosts文件中添加如下内容,用作域名解析
192.168.56.101 master 192.168.56.102 slave1 192.168.56.103 slave2 192.168.56.104 slave3
3.分别在四台机器上安装java(安装包已经下载到grid用户主目录)
# 进入grid用户的主目录 cd ~ # 解压缩 tar -zxvf jdk-7u75-linux-x64.tar.gz
4.配置ssh免密码
Hadoop集群中的各个节点主机需要相互通信,因此DataNode与NameNode之间要能免密码ssh,这里配置了任意两台机器都免密码。
(1)分别在四台机器上生成密钥对
# 进入grid用户的主目录 cd ~ # 生成密钥对 ssh-keygen -t rsa
然后一路按回车键。
(2)在master上执行
# 进入.ssh cd ~/.ssh/ # 把本机的公钥追加到自身的~/.ssh/authorized_keys文件里 ssh-copy-id 192.168.56.101 # 将authorized_keys文件复制到第二台主机 scp /home/grid/.ssh/authorized_keys 192.168.56.102:/home/grid/.ssh/
(3)在slave1上执行
cd ~/.ssh/ ssh-copy-id 192.168.56.102 scp /home/grid/.ssh/authorized_keys 192.168.56.103:/home/grid/.ssh/
(4)在slave2上执行
cd ~/.ssh/ ssh-copy-id 192.168.56.103 scp /home/grid/.ssh/authorized_keys 192.168.56.104:/home/grid/.ssh/
(5)在slave3上执行
cd ~/.ssh/ ssh-copy-id 192.168.56.104 # 此时authorized_keys文件中已经包含所有四台主机的公钥,将它复制到每台主机 scp /home/grid/.ssh/authorized_keys 192.168.56.101:/home/grid/.ssh/ scp /home/grid/.ssh/authorized_keys 192.168.56.102:/home/grid/.ssh/ scp /home/grid/.ssh/authorized_keys 192.168.56.103:/home/grid/.ssh/
至此,免密码ssh配置完成。
4.2.3 安装配置Hadoop
以下的操作均使用grid用户在master主机上执行。
1.安装hadoop(安装包已经下载到grid用户主目录)
cd ~ tar -zxvf hadoop-2.7.2.tar.gz
2.建立目录
cd ~/hadoop-2.7.2 mkdir tmp mkdir hdfs mkdir hdfs/data mkdir hdfs/name
3.修改配置文件
编辑~/hadoop-2.7.2/etc/hadoop/core-site.xml文件,添加如下内容。
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://192.168.56.101:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/grid/hadoop-2.7.2/tmp</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> </configuration>
说明:core-site.xml是Hadoop的全局配置文件,这里配置了三个参数。
● fs.defaultFS:默认文件系统的名称,URI形式,默认是本地文件系统。
● hadoop.tmp.dir:Hadoop的临时目录,其他目录会基于此路径,是本地目录。
● io.file.buffer.size:在读写文件时使用的缓存大小。这个大小应该是内存Page的倍数。
编辑~/hadoop-2.7.2/etc/hadoop/hdfs-site.xml文件,添加如下内容。
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/grid/hadoop-2.7.2/hdfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/grid/hadoop-2.7.2/hdfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>192.168.56.101:9001</value> </property> <property> <name>dfs.namenode.servicerpc-address</name> <value>192.168.56.101:10000</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
说明:hdfs-site.xml是HDFS的配置文件,这里配置了6个参数。
● dfs.namenode.name.dir:本地磁盘目录,用于NamaNode存储fsimage文件。可以是按逗号分隔的目录列表,fsimage文件会存储在每个目录中,冗余安全。这里多个目录设定,最好在多个磁盘,如果其中一个磁盘故障,会跳过坏磁盘,不会导致系统停服。如果配置了HA,建议仅设置一个。如果特别在意安全,可以设置2个。
● dfs.datanode.data.dir:本地磁盘目录,HDFS数据存储数据块的地方。可以是逗号分隔的目录列表,典型的,每个目录在不同的磁盘。这些目录被轮流使用,一个块存储在这个目录,下一个块存储在下一个目录,依次循环。每个块在同一个机器上仅存储一份。不存在的目录被忽略。必须创建文件夹,否则被视为不存在。
● dfs.replication:数据块副本数。此值可以在创建文件时设定,客户端可以设定,也可以在命令行修改。不同文件可以有不同的副本数。默认值用于未指定时。
● dfs.namenode.secondary.http-address:SecondaryNameNode的http服务地址。如果端口设置为0,服务将随机选择一个空闲端口。使用了HA后,就不再使用SecondaryNameNode了。
● dfs.namenode.servicerpc-address:HDFS服务通信的RPC地址。如果设置该值,备份结点、数据结点和其他服务将会连接到指定地址。注意,该参数必须设置。
● dfs.webhdfs.enabled:指定是否在NameNode和DataNode上开启WebHDFS功能。
编辑~/hadoop-2.7.2/etc/hadoop/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.address</name> <value>192.168.56.101:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>192.168.56.101:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>192.168.56.101:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>192.168.56.101:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>192.168.56.101:8088</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>1024</value> </property> </configuration>
说明:yarn-site.xml是YARN的配置文件,这里配置了8个参数。
● yarn.nodemanager.aux-services:NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序。
● yarn.nodemanager.aux-services.mapreduce.shuffle.class:对应参考yarn.nodemanager. aux-services。
● yarn.resourcemanager.address:ResourceManager对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等。
● yarn.resourcemanager.scheduler.address:调度器地址,是ResourceManager对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。
● yarn.resourcemanager.resource-tracker.address:ResourceManager对NodeManager暴露的地址。NodeManager通过该地址向RM汇报心跳,领取任务等。
● yarn.resourcemanager.admin.address:ResourceManager对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等。
● yarn.resourcemanager.webapp.address:ResourceManage对外WebUI地址。用户可通过该地址在浏览器中查看集群各类信息。
● yarn.nodemanager.resource.memory-mb:NodeManage总的可用物理内存,不能小于1024。注意,该参数一旦设置,整个运行过程中不可动态修改。
编辑~/hadoop-2.7.2/etc/hadoop/mapred-site.xml文件,添加如下内容。
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>192.168.56.101:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>192.168.56.101:19888</value> </property> </configuration>
说明:mapred-site.xml是MapReduce的配置文件,这里配置了三个参数。
● mapreduce.framework.name:设置MapReduce的执行框架为yarn。
● mapreduce.jobhistory.address:MapReduce历史服务器的地址。
● mapreduce.jobhistory.webapp.address:MapReduce历史服务器Web UI地址。
编辑~/hadoop-2.7.2/etc/hadoop/slaves文件,添加如下内容。
192.168.56.102 192.168.56.103 192.168.56.104
说明:在etc/hadoop/slaves文件中写出所有slave的主机名或者IP地址,每个一行。Hadoop辅助脚本使用etc/hadoop/slaves文件一次在多个主机上运行命令。这些脚本并不使用任何基于Java的Hadoop配置。为了正常使用,运行Hadoop的用户各在服务器之间需要ssh信任(即安装前配置的ssh免密码)。
编辑~/hadoop-2.7.2/etc/hadoop/hadoop-env.sh文件,修改如下内容。
export JAVA_HOME=/home/grid/jdk1.7.0_75
说明:使用etc/hadoop/hadoop-env.sh脚本设置Hadoop HDFS后台进程的站点特定环境变量,至少需要指定JAVA_HOME,以保证在每一个远程节点上正确定义。
编辑~/hadoop-2.7.2/etc/hadoop/yarn-env.sh文件,修改如下内容。
export JAVA_HOME=/home/grid/jdk1.7.0_75
说明:使用etc/hadoop/yarn-env.sh脚本设置HadoopYARN后台进程的站点特定环境变量,至少需要指定JAVA_HOME,以保证在每一个远程节点上正确定义。
4.将hadoop主目录复制到各个从服务器上
scp -r ./hadoop-2.7.2192.168.56.102:/home/grid/ scp -r ./hadoop-2.7.2192.168.56.103:/home/grid/ scp -r ./hadoop-2.7.2192.168.56.104:/home/grid/
4.2.4 安装后配置
使用root用户分别在四台机器上的/etc/profile文件中添加如下环境变量。
export JAVA_HOME=/home/grid/jdk1.7.0_75 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export HADOOP_HOME=/home/grid/hadoop-2.7.2 export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_YARN_HOME=$HADOOP_HOME export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib" export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
使环境变量生效。
source /etc/profile
4.2.5 初始化及运行
以下的操作均使用grid用户在master主机上执行。
# 格式化HDFS hdfs namenode -format
看到输出中出现“INFO common.Storage: Storage directory/home/grid/hadoop-2.7.2/hdfs/name has been successfully formatted.”信息,则表明格式化成功。
# 启动HDFS start-dfs.sh # 启动YARN start-yarn.sh
执行成功后,使用jps命令查看主节点Java进程,可以看到主节点上启动了NameNode、SecondaryNameNode、ResourceManager守护进程,如下所示。
[grid@master hadoop]$ jps 7194 Jps 6916 ResourceManager 6757 SecondaryNameNode 6546 NameNode
查看从节点Java进程,可以看到从节点上启动了DataNode、NodeManager守护进程,如下所示。
[grid@slave1~]$ jps 1385 DataNode 1506 Jps 1470 NodeManager
通过Web接口查看NameNode,如图4-1所示。
图4-1 Hadoop Web界面
至此,Apache Hadoop已经安装完成,这个安装只有HDFS、YARN、MapReduce等基本组件,不包含任何其他的Hadoop组件。如果需要使用Hive、HBase、Spark等其他工具,需要在此基础上手工安装。在4.4节安装CDH时会看到,它已经包含了大部分Hadoop生态圈提供的服务(5.7.0包含21个服务),安装时可以配置所需的服务,安装后也可以使用图形化的控制台添加或删除服务,为用户提供了极大的方便。