大数据运维初探之Hadoop搭建(入门)

0.大数据技术分类

    1.批处理框架:Mapreduce 批处理历史数据
    2.流处理框架:storm 一直处理源源不断的数据
    3.混合处理框架:spark

1.生态圈核心项目

    1.HDFS分布式文件系统
    2.yarn调度与管理
    3.mapreduce数据并行处理

2.生态圈相关项目

    1.hive数据仓库基础架构
    2.hbase分布式数据库
    3.ambari监控与管理
    4.spark快速计算
    5.zookeeper协调服务
    等等

3.HDFS定义与特点

    定义:hadoop分布式文件系统
    特点:高容错,廉价机,高吞吐,大文件,分块存

关键词

    1.block:128m/块
    2.集群架构:
        Namenode:接受请求,纂写目录,管理文件》块》Datanode的关系
        Datanode:分块存储,多副本

5.HDFS写数据过程

    1.请求上船
    2.Namenode检查路径
    3.返回可以上船
    4.上传一个block,指明副本数量
    5.查询Datanode信息
    6.返回写入Dn地址和策略
    7.请求Dn传数据和副本数量
    8.Dn之间建立副本通道
    9.通道建立应答
    10.Dn回应客户准备就绪
    11.传输block
    12.副本生成
    13.通知Nn接受到了新数据,建立影射
    14.返回客户成功

6.HDFS写过程

    1.请求读取
    2.Nn获取文件块信息
    3.信息传回客户端
    4.分别请求Dn
    5.分别从Dn读取

7.MapReduce编程模型

    1.Map 拆分任务 分配给Dn执行
    2.Reduce 汇总Dn数据输出结果

8.Yarn 资源协调

    1.ResourceManager 资源管理 yarn主节点 执行在Nn或单独机器
    2.Nodeanager 节点管理 yarn从节点 执行在Dn中

过程

        1.客户端发起MapReduce程序
        2.主节点应用管理(ApplicationManager)选择一台从节点,开启一个容器(Container)作为应用管理主机(ApplicationMaster)
        3.应用管理主机计算MR程序所需从节点资源,返回主节点应用管理,传给资源调度(ResourceSchedule)
        4.资源调度各个从节点分配容器,进行Map任务
        5.Reduce任务从应用管理主机获取Map任务结果
        6.Reduce任务汇总结果回传应用管理主机
        7.应用管理主机汇报结果给客户

9.Hadoop部署(单机)

    1.下载Jdk并安装
        略
    2.下载Hadoop 300MB+ 解压之
        资源:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common
    3.修改环境变量

# cd /software
# wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz
# tar xf hadoop-2.8.5.tar.gz -C /usr/local
# mv /usr/local/hadoop-2.8.5 /usr/local/hadoop

# vim /etc/profile 
           
export JAVA_HOME=/usr/local/jdk1.8.0_191
export HADOOP_HOME=/usr/local/hadoop
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

# source /etc/profile

测试之
# hadoop
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
......

10.高可用Hadoop集群部署

理论:Hadoop核心模块一共三部分。

1.hdfs文件系统,由NameNode+DataNode构成,NameNode是其中核心,它需要作高可用

2.yarn调度系统,由ResourceManager+NodeManager构成,ResourceManager是核心,它需要作高可用

3.mapreduce计算系统,它在节点中进行,本身就是高可用

4.NodeManager和DataNode逻辑上应该是在成对出现在一台机其中,它们本身就是高可用。

5.NameNode和ResourceManager高可用由Zookeeper来实现

6.Zookeeper是分布式的程序协调工具,简单来说,将它安装成集群,集群中推举出一个leader,其他人负责投票。再在需要作高可用的机器上安转ZKFC,监控NameNode和ResourceManager是否正常,是否需要发起投票。

 

则我们的实验环境如下

机器:角色

HD1:NameNode1

HD2:NameNode2

HD3:ResourceManager1

HD4:ResourceManager2

HD5:DataNode+NodeManager

HD6:DataNode+NodeManager2

注:NameNode与ResourceManager是调度,控制,管理,接受访问的设备,本身他们不进行计算。所有它俩的数量自定义的情况下,也建议不要数量过多,DataNode是计算和分片存储的节点,越多越好,本文以两台为例。

再注:Zookeeper集群与hadoop无关 ,它安装在上述6台机器中都行,但是数量最好保证是单数。

11.准备软件

1.openjdk,安装略

2.zookeeper :镜像指路 https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

3.hadoop:镜像指路https://archive.apache.org/dist/hadoop/common/

先仅操作一台机器,进行所有机器都要进行的操作,待会再克隆,或者自行重复操作。

所有节点关闭防火墙及Selinux

所有节点时间同步

# vim /etc/hosts
192.168.122.11 hd1   
192.168.122.12 hd2
192.168.122.13 hd3
192.168.122.14 hd4
192.168.122.15 hd5
192.168.122.16 hd6

等会各机器IP自行修改。

软件部分

# cd /software
# wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
# wget https://archive.apache.org/dist/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz

jdk文章以jdk-8u192-linux-x64.tar.gz为例

# cd /software
# tar xvf jdk-8u192-linux-x64.tar.gz
# mkdir /usr/local/java
# mv /software/jdk1.8.0_192 /usr/local/java/



安装zookeeper

# tar xf zookeeper-3.4.14.tar.gz -C /usr/local
# mv /usr/local/zookeeper-3.4.14 /usr/local/zookeeper
# cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
# mkdir /opt/data
# vim /usr/local/zookeeper/conf/zoo.cfg

修改
dataDir=/opt/data									  
添加
server.1=hd1:2888:3888
server.2=hd2:2888:3888
server.3=hd3:2888:3888	
server.4=hd4:2888:3888	
server.5=hd5:2888:3888	
server.6=hd6:2888:3888	
咱们就每一台机器都投票,也可以仅仅在某几台上面安装。



安装hadoop

# tar xf /software/hadoop-2.8.5.tar.gz -C /usr/local/;
# mv /usr/local/hadoop-2.8.5 /usr/local/hadoop;

修改环境变量

# vim /etc/profile.d/hadoop.sh

export JAVA_HOME=/usr/local/java/jdk1.8.0_192
export ZOOKEEPER_HOME=/usr/local/zookeeper
export HADOOP_HOME=/usr/local/hadoop
export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

# source /etc/profile

修改hadoop配置文件

修改hadoop,mapreduce,yarn的java路径
# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME=你的Java安装路径
或
export JAVA_HOME=${JAVA_HOME}

# vim /usr/local/hadoop/etc/hadoop/mapred-env.sh
export JAVA_HOME=${JAVA_HOME}

# vim /usr/local/hadoop/etc/hadoop/yarn-env.sh
export JAVA_HOME=${JAVA_HOME}



以下在<configuration>与</configuration>中间加上配置

# vim /usr/local/hadoop/etc/hadoop/core-site.xml

<!-- ns1就是个名字,后面对上就行,可以自定义 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://ns1</value>
</property>

<!-- 指定hadoop临时目录,前面我们创建的那个/opt/data/tmp,可以自定义 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/data/tmp</value>
</property>

<!-- 指定zookeeper地址,把所有zookeeper成员填上-->
<property>
    <name>ha.zookeeper.quorum</name>
    <value>hd1:2181,hd2:2181,hd3:2181,hd4:2181,hd5:2181,hd6:2181</value>
</property>



# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml


<!-- ns1跟前面对上就行 -->
<property>
    <name>dfs.nameservices</name>
    <value>ns1</value>
 </property>

<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
    <name>dfs.ha.namenodes.ns1</name>
    <value>nn1,nn2</value>
</property>

<!-- nn1的RPC通信地址,nn1与nn2通信用 -->
<property>
    <name>dfs.namenode.rpc-address.ns1.nn1</name>
    <value>hd1:9000</value>
</property>

<!-- nn1的http通信地址,给管理人员访问用 -->
<property>
    <name>dfs.namenode.http-address.ns1.nn1</name>
    <value>hd1:50070</value>
</property>


<!-- nn2的RPC通信地址,nn1与nn2通信用 -->
<property>
    <name>dfs.namenode.rpc-address.ns1.nn2</name>
    <value>hd2:9000</value>
</property>

<!-- nn2的http通信地址,给管理人员访问用 -->
<property>
    <name>dfs.namenode.http-address.ns1.nn2</name>
    <value>hd2:50070</value>
</property>


<!-- 指定NameNode的元数据在JournalNode上的存放位置,就是DataNode -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hd5:8485;hd6:8485/ns1</value>
</property>

<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/data/journal</value>
</property>

<!-- 开启NameNode失败自动切换 -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>

<!-- 配置失败自动切换实现方式,调用了一个java的功能(就是value里名字很长的那个) -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!-- 配置隔离机制,sshfence简单来说就是当一台namenode有问题,ssh连上去将其fence掉 -->
<property>
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence</value>
</property>

<!-- 使用隔离机制时需要ssh免登陆 -->
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
</property>


# cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml
# vim /usr/local/hadoop/etc/hadoop/mapred-site.xml

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>


# vim /usr/local/hadoop/etc/hadoop/yarn-site.xml

<property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
</property>

<!-- 设置resourcemanager的集群名 -->
<property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yarncluster</value>
</property>

<!-- 设置resourcemanager集群由rm1和rm2组成 -->
<property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
</property>

<!-- 设置rm1主机名为hd3 -->
<property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hd3</value>
</property>

<!-- 设置rm2主机名为hd4 -->
<property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hd4</value>
</property>

<!-- 设置rm1的web访问地址 -->
<property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>hd3:8088</value>
</property>

<!-- 设置rm2的web访问地址 -->
<property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>hd4:8088</value>
</property>

<!-- 设置管理rm集群的zk地址 -->
<property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hd1:2181,hd2:2181,hd3:2181,hd4:2181,hd5:2181,hd6:2181</value>
</property>

<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>


# vim /usr/local/hadoop/etc/hadoop/slaves
去掉原来的localhost,写上datanode的主机名

hd5
hd6

现在克隆(过程略),然后进行分别操作。

每台克隆机修改IP并重启网络,过程略

现在进行所有机器的两两免密

# ssh-keygen
# cd /root/.ssh
# cp id_rsa.pub authorized_keys
# for i in {1..6};do scp -r /root/.ssh hd$i:/root;done
# for i in {1..6};do scp -r /root/.ssh hd$i:/root/;done

设置zookeeper的ID

[root@hd1 ~]# echo 1 > /opt/data/myid
[root@hd2 ~]# echo 2 > /opt/data/myid
[root@hd3 ~]# echo 3 > /opt/data/myid
[root@hd4 ~]# echo 4 > /opt/data/myid
[root@hd5 ~]# echo 5 > /opt/data/myid
[root@hd6 ~]# echo 6 > /opt/data/myid

11.集群测试

1.所有安装zookeeper的机器开启zookeeper

# zkServer.sh start
# zkServer.sh status
# zkServer.sh stop


2.hd1上启动

# hadoop-daemons.sh start journalnode
# hdfs namenode -format
# hdfs zkfc -formatZK
# start-dfs.sh

3.hd3,hd4都启动
# start-yarn.sh

12.验证

# jps

hd1
2249 NameNode
2537 DFSZKFailoverController
1834 QuorumPeerMain
2602 Jps

hd2
1779 Jps
1705 DFSZKFailoverController
1503 QuorumPeerMain

hd3
1508 QuorumPeerMain
1926 Jps
1663 ResourceManager

hd4
1504 QuorumPeerMain
1752 Jps
1657 ResourceManager

hd5
1745 DataNode
1540 QuorumPeerMain
1673 JournalNode
2009 Jps
1869 NodeManager

hd6
1682 JournalNode
1507 QuorumPeerMain
2019 Jps
1878 NodeManager
1754 DataNode

QuorumPeerMain是投票
JournalNode是同步日志
ResourceManager,NodeManager是yarn进程
NameNode是hdfs主节点
DFSZKFailoverController是zkfs监视

该有的都有视为成功。

高可用测试:略

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值