What is Apache Hadoop?
The Apache Hadoop project develops open-source software for reliable, scalable, disttributed couputing .
本地模式: 即在本地下载hadoop包,进行安装,以单节点方式即可使用;
伪分布式:一般供学习.了解使用,通过虚拟机或者docker之类方式,搭建hadoop集群,详细步骤如下:
集群模式: 步骤基本如同伪分布式搭建;
切换到root权限 编辑network配置文件
# vim /etc/sysconfig/network
在文件中输入以下代码
NETWORKING=yes
HOSTNAME=用户名
输入‘hostname 用户名', 确认修改
# hostname 用户名
将瞬态修改(开机重启则恢复),改成静态修改
# vi /etc/hostname
在编辑器中将默认的localhost.localdomain主机名改成要修改主机名
查看防火墙状态 (括号中为旧版操作命令,下同)
# systemctl status iptables.service (service iptables status)
关闭防火墙
# systemctl stop firewalld.service (service iptables stop)
关闭开机启动 (如果只是简单的关闭防火墙,则机器重启时会开启防火墙)
# systemctl disable firewalld.service (chkconfig iptables off)
网络地址修改
VM上的linux主机采用bridge,NET,或者Host-only都行,只要保证集群里面的所有虚拟机在同一网段内,并且相互任意之间均可ping通,
修改方式可通过命令行进行修改,也可通过图形化界面进行修改.若担心下次网络重新连接时,原有的ip地址被改变,可设置静态ip地址
修改主机名和ip的映射关系, 主要是为了方便通过主机名进行网路访问
# vi /etc/hosts
输入以下代码(注意,保留原有代码,在后面添加新代码), 如
192.168.169.129 P-01
192.168.169.130 P-02
192.168.169.131 P-03
192.168.169.128 H-01
注意:上述操作,需要在集群的所有主机上进行.
在任意主机终端,通过 ping <主机名> 测试连通性
Hadoop平台是基于Java环境的,因此我们必须在linxu主机上安装JDK
由于在新建linux虚拟机的时候,已经安装了jdk环境,所以这次安装JDK步骤就省去了
步骤就两步:
在合适的地方解压缩JDK安装压缩包;
配置java环境变量
# vi /home/dlyw/.bash_profile
在已有的代码尾部,加上如下代码(原有代码,不能改动)
# 以下是新加的代码
export JAVA_HOME=JDK 的安装路径
export PATH=$JAVA_HOME/bin:$PATH
假设JDK的安装路径为/usr/java/jdk1.9.0_31/ , 则"JDK的安装路径"几个字就用 /usr/java/jdk1.9.0_31/代替
修改完之后,执行source /home/dlyw/.bash_profile 命令,使修改生效;
最后执行 java -version 命令,测试是否配置成功!
生成ssh免登陆密钥(首先在Maste节点进行配置)
$ ssh-keygen -t rsa
出现一系列提示,简单回车即可.
ssh-keygen是用来生成私钥(id_rsa文件),公钥(id_rsa.pub文件)密钥对的命令, 将本机的公钥文件拷贝到远程的主机上, 则本机就可以使用ssh登陆远程主机而不用输入密码.
通过参数 ‘-t’ 指定加密算法, RSA加密算法是一种典型的非对称加密算法
生成的密钥在.ssh目录下 如 /home/dlyw/.ssh/ 下, 可通过 ls -l 查看
接下来将公钥文件复制到.ssh目录下
$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized.keys
// 然后将authorized.keys文件复制到所有的Slave节点上, 本次搭建的有三个从属节点,需要执行三次命令
$ scp ~/.ssh/authorized_keys dlyw@P-01:~/
$ scp ~/.ssh/authorized_keys dlyw@P-02:~/
$ scp ~/.ssh/authorized_keys dlyw@P-03:~/ //P-01, P-02, P-03是三个从属节点的主机名, dlyw是用户名
这样就完成了Master结点的配置,然后进行Slave结点的配置
首先还是用ssh-keygen命令生成密钥,一路回车即可
接着将authorized_keys(该文件是从 Master主机上拷贝过来的)文件,移动到.ssh目录下
$ mv authorized_keys ~/.ssh
然后将此Slave配置在其他的从属节点上也操作一遍
验证是否配置成功,
$ ssh P-02
执行上述命令,用ssh命令连接任意一台从属节点,若登陆成功,且无需输入密码,则配置成功!
(使用exit命令,从远程节点退回到本地计算机)
注意: 每个结点的安装和配置是相同的,在实际工作中,通常在Master节点上完成安装和配置,然后将安装目录复制到其他的节点即可.(这里的所有操作是root权限)
推荐在 archive.apache.org中下载 新手下载稳定版本使用.
# wget https://archive.apache.org/dist/hadoop/core/stable/hadoop-2.9.1.tar.gz
// 这里我们把它解压到用户目录下面
# tar -zxvf hadoop-2.9.1.tar.gz -C ~/
// 解压成功后,系统则在用户目录下面自动创建Hadoop-2.9.1子目录,此为Hadoop的安装目录
Hadoop 的环境变量文件是 hadoop-env.sh, 它在hadoop安装目录的子目录中,我们只需要修改该文件的JDK路径即可
# vi /home/dlyw/hadoop-2.9.1/etc/hadoop/hadoop-env.sh
在文件的前面找到" export JAVA_HOME=${JAVA_HOME} " ,该行代码;
将 ${JAVA_HOME} 用**实际的jdk路径**替换,保存,退出即可
Yarn 的环境变量文件是 Yarn-env.sh, 它也在hadoop安装目录的子目录中,我们只需要修改该文件的JDK路径即可
# vi /home/dlyw/hadoop-2.9.1/etc/hadoop/yarn-env.sh
// 在文件的前面找到" export JAVA_HOME=/home/y/libexec/jdk1.6.0/ " ,该行代码;
// 将 /home/y/libexec/jdk1.6.0/ 用**实际的jdk路径**替换,保存,退出即可
Hadoop的核心组件文件是 core-site.xml,也位于hadoop安装目录的子目录中,编辑该文件
# vi /home/dlyw/hadoop-2.9.1/etc/hadoop/core-site.xml
//需要将下面的配置代码放在文件的和\ 之间
<property>
<name>fs.defaultFS</name>
<value>hdfs://H-01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/dlyw/hadoopdata</value>
</property>
编辑完毕,保存退出
Hadoop的文件系统配置文件是 hdfs-site.xml,也位于hadoop安装目录的子目录中,编辑该文件
# vi /home/dlyw/hadoop-2.9.1/etc/hadoop/hdfs-site.xml
// 需要将下面的配置代码放在文件的和 之间
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
编辑完毕,保存退出
Yarn的站点配置文件是 yarn-site.xml,也位于hadoop安装目录的子目录中,编辑该文件
# vi /home/dlyw/hadoop-2.9.1/etc/hadoop/yarn-site.xml
// 需要将下面的配置代码放在文件的和 之间
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>H-01:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>H-01:18030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>H-01:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>H-01:18141</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>H-01:18088</value>
</property>
编辑完毕,保存退出
在~/hadoop-2.9.1/etc/hadoop子目录下,系统已有一个mapred-site.xml.template文件,我们需要将其复制并改名,位置不变
$ cp /home/dlyw/hadoop-2.9.1/etc/hadoop/mapred-site.xml.template /home/hadoop-2.9.1/etc/hadoop/mapred-site.xml
// 然后编辑mapred-site.xml文件
$ vi /home//hadoop-2.9.1/etc/hadoop/mapred-site.xml
// 需要将下面的代码填充到文件的和 中
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
编辑完成,保存退出.
slaves 文件给出Hadoop集群的slavae节点列表.该文件十分重要,启动时系统总是根据当前slaves文件中的slave节点列表启动集群,不在列表中的slave节点便不会视为计算节点
编辑 slaves 文件
$ vi /home/dlyw/hadoop-2.9.1/etc/hadoop/slaves
// 删除文件中原来有的缺省的localhost,然后添加计划投入使用的集群主机,如输入以下代码
P-01
P-02
P-03
编辑完成,保存退出.
通过负责 Master 节点上的 Hadoop,能大大提高系统部署效率,使用如下命令
$ scp -r /home/dlyw/hadoop-2.9.1 dlyw@P-01:~/
$ scp -r /home/dlyw/hadoop-2.9.1 dlyw@P-02:~/
$ scp -r /home/dlyw/hadoop-2.9.1 dlyw@P-03:~/
注意: 由于我们前面已经配置了免密钥登陆,因此这里不会有密码输入认证,回车后就开始复制
这样,我们就完成了 Hadoop 集群的安装和配置!
在首次启动hadoop之前,还需要做一些配置
由于我们是在Linux集群上安装的 Hadoop 集群,自然需要配置 Linux 系统平台的环境变量.(需要在集群的所有计算机上进行,以普通用户身份)
进入用户目录,编辑 .bash_profile 文件
$ vi ~/.bash_profile
// 将下述代码追加到文件的尾部
# hadoop
export HADOOP_HOME=/home/dlyw/hadoop-2.9.1
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
保存退出,执行 ’ source ~/.bash_profile’ 命令,使上述配置生效
其他节点,也需进行上述配置.
可在用户主目录下,创建数据目录
$ mkdir /home/dlyw/hadoopdata
这里的数据目录名 ‘hadoopdata’ 需要和前面 Hadoop 核心组件文件 core-site.xml中的配置中的数据目录名保持一致.
其他所有节点也需进行上述配置
该操作只需要 Master 节点上进行,命令如下
$ hdfs namenode -format
进入 Hadoop 安装主目录, 然后执行 sbin/start-all.sh 命令推荐使用 start-dfs.sh 和 start-yarn.sh开启hadoop集群
按照提示输入,即可启动Hadoop.
要关闭 Hadoop 集群, 可以使用 stop-all.sh 命令
下次启动 Hadoop 时, 无需 Nameode的初始化, 只需要 使用 start-dfs.sh,然后使用 start-yarn.sh 启动 yarn 即可.
用户在 终端 执行 jps 命令查看Hadoop是否启动成功
在Master节点, 如果显示 SecondaryNameNode, ResourceManager, Jps 和 NameNode ,则说明启动成功
在Slave节点, 如果显示 NodeManager, Jps 和 DateNode 三个进程,则说明从节点启动成功.
也可使用Web界面查看系统状况,在 Master 节点的浏览器中输入 http://H-01:9000 ,查看.
或输入 http://H-01:18088 查看yarn的运行状况
(主机名和端口号都以配置时的数值为准)