Hadoop安装及使用
Hadoop安装及使用
hadoop简介
单机模式
直接解压,无需任何配置。主要用于测试代码。没有分布式文件系统。
伪分布式
完全分布式的一种形式,只是所有的进程都配置要一个节点上。有分布式文件系统,只不过是这个文件系统只有一个节点。
完全分布式
包含主节点和从节点,主节点namenode只有一个(一般来说,真实生产环境中namenode只会单独作为一个节点)namenode主要负责存储元数据,即datanode存储数据的描述,如数据存储在datanode的哪一个节点上,数据是谁上传的。datanode负责真正干活的,负责数据存储的。完全分布式中,如果namenode宕机了会造成整个集群无法使用,这也是完全分布式的一大缺点,存在单点故障问题。所以在一般生产环境中不太使用这种模式。
高可用集群
集群可以持续对外提供服务,做到7*24小时不间断,依赖于zookeeper。完全分布式的架构模式为一主多从,高可用集群架构为多主多从,也就是说高可用集群至少有两个namenode,但是同一时间只有一个是活跃的。我们把这个活跃的namenode称为active,其它的属于热备份状态,这们把这个namenode称之为standby,并且存储的元数据与active是一模一样的,当active宕机的时候,standby会立马切换为active。如果刚才宕机的namenode又恢复正常了,但是这个namenode只能是standby。但是这个集群也存在一个缺陷,就是在同一时间内只能有一个活跃的namenode。如果节点非常多(即元数据过多),这个活跃的namenode很容易崩溃。
联邦机制
同一个集群中可以有多个namenode,并且同一时间可以有多个活跃的namenode,这些namenode 共同使用集群中所有的datanode,每个namenode只负责管理集群中datanode上的一部分数据。但是联邦机制也会存在单点故障问题,如某一个活跃的namenode宕机了,会造成存在此namenode的数据无法访问,因此,一般的来说实际应用使用“联邦+高可用”模式搭建集群。
centos换源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#清除缓存
yum clean all
#生成缓存
yum makecache
#更新yum源,等待更新完毕即可。
yum -y update
解决centos安装好后没有网络
cd /etc/sysconfig/network-scripts/
sudo vim ifcfg-ens33
#修改ONBOOT=no 为 ONBOOT=yes
systemctl restart network #centos6 service network restart
ip addr
创建用户
如果账户名不是hadoop的话,需要创建一个用户名为hadoop的用户
su root
useradd -m hadoop -s /bin/bash # 创建新用户hadoop
passwd hadoop #修改密码
vim /etc/sudoers #为hadoop增加sudo权限
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
thy ALL=(ALL) ALL
配置时间同步
crontab -e
01***/usr/sbin/ntpdate us.pool.ntp.org
关闭防火墙
systemctl stop firewalld.service # 关闭firewall
systemctl disable firewalld.service # 禁止firewall开机启动
修改hostname 及 hosts
vim /etc/hostname
HOSTNAME=Master
vim /etc/hosts
192.168.25.146 Master
192.168.25.147 Slave1
安装ssh、配置SSH无密码登陆
一般情况下,CentOS 默认已安装了 SSH client、SSH server,可打开终端执行如下命令进行检验:
rpm -qa | grep ssh
如果需要安装,则可以通过 yum 这个包管理器进行安装。(安装过程中会让你输入 [y/N],输入 y 即可)
yum install openssh-clients
yum install openssh-server
配置无密码登录
cd ~/.ssh/
ssh-keygen -t rsa # 会有提示,都按回车即可
cat id_rsa.pub >> authorized_keys # 加入授权
chmod 600 ./authorized_keys # 修改文件权限
ssh localhost #测试,此时就无需密码即可登录
exit
完成后可执行 ssh Master
验证一下(可能需要输入 yes,成功后执行 exit
返回原来的终端)。接着在 Master 节点将上公匙传输到 Slave1 节点:
scp ~/.ssh/id_rsa.pub root@Slave1:/home/
接着在 Slave1 节点上,将 ssh 公匙加入授权
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在则忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub # 用完就可以删掉了
如果有其他 Slave 节点,也要执行将 Master 公匙传输到 Slave 节点、在 Slave 节点上加入授权这两步。
这样,在 Master 节点上就可以无密码 SSH 到各个 Slave 节点了,可在 Master 节点上执行如下命令进行检验:
ssh Slave1
安装 Java 环境
Java 环境可选择 Oracle 的 JDK,或是 OpenJDK(可看作 JDK 的开源版本),现在一般 Linux 系统默认安装的基本是 OpenJDK,这里安装的是 OpenJDK1.8.0版本的。
有的 CentOS 默认安装了 OpenJDK ,这里我们可以使用命令检查一下
java -version # 查看 java 的版本
javac -version # 查看编译命令 Javac 的版本
echo $JAVA_HOME # 查看 $JAVA_HOME 这个环境变量的值
安装
wget https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gz
tar -zxf jdk-8u201-linux-x64.tar.gz -C /usr/lib/jvm
然后配置环境变量
vim /etc/profile
#在文件最后面添加如下单独一行(指向 JDK 的安装位置),并保存 。
#java enviroment
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_201
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
source /etc/profile # 使变量设置生效
#测试
echo $JAVA_HOME # 检验变量值
java -version
javac -version
安装 Hadoop
从官网下载hadoop压缩包,下载完成后,我们将 Hadoop 解压到 /usr/local/ 中。
tar -zxf ~/下载/hadoop-2.6.5.tar.gz -C /usr/local # 解压到/usr/local目录中
cd /usr/local/ # 切换当前目录为 /usr/local 目录
mv ./hadoop-2.6.5/ ./hadoop # 将文件夹名改为hadoop
chown -R root:root ./hadoop # 修改文件权限,root 是当前用户名
Hadoop 解压后即可使用,输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息。
cd /usr/local/hadoop # 切换当前目录为 /usr/local/hadoop 目录
./bin/hadoop version # 查看 Hadoop 的版本信息
配置path
vim /etc/profile
#export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
source /etc/profile
hadoop version # 查看 Hadoop 的版本信息
配置集群/分布式环境
集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
1, 文件hadoop-env.sh,添加JAVA_HOME的路径
2, 文件 core-site.xml 改为下面的配置:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
3, 文件 hdfs-site.xml,dfs.replication 一般设为 3,但我们只有一个 Slave 节点,所以 dfs.replication 的值还是设为 1:
<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/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
4, 文件 mapred-site.xml (可能需要先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:
<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>
5, 文件 yarn-site.xml:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
#复制到从节点
scp -r hadoop slave1:~/
#格式化文件系统
hdfs namenode -format
#开启hadoop服务
#先执行hdfs-config.sh脚本加载环境变量,然后通过hadoop-daemons.sh脚本又调用bin/hdfs指令来分别开启namenode、datanode以及secondarynamenode等守护进程。
start-dfs.sh
##执行此脚本可以启动YARN相关线程
start-yarn.sh
#记录下已运行完的MapReduce作业信息并存放在指定的HDFS目录下
mr-jobhistory-daemon.sh start historyserver
jps
#过命令 jps 可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程。
#在 Slave 节点可以看到 DataNode 和 NodeManager 进程,如下图所示:
#Master 访问http://Master:9870
hdfs dfsadmin -report #查看 DataNode 是否正常启