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.xmlhdfs-site.xmlmapred-site.xmlyarn-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 是否正常启
原文地址:https://www.cnblogs.com/tomyyyyy/p/14110512.html