栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

06hadoop1

06hadoop1

一.zookeeper

1.zookeeper watcher(监听机制)
watch机制是zookeeper自动监控某一个znode节点的生死和状态变化(节点创建,节点删除,节点改变,子节点改变);如果监控的事件发生了会触发执行行为;
提供了分布式数据发布和订阅功能,一对多的订阅关系
watch机制有三个过程:客户端向服务器注册watcher;服务端事件发生触发watcher;客户端回调watcher得到触发事件情况
2.watcher机制的特点:
a:一次性触发(命令行)

事件发生触发监听,一个watcher event就会被发送到设置监听的客户端,这种效果是一次性的,后续再次发生同样的事件,不会再次触发。
b.事件封装
ZooKeeper使用WatchedEvent对象来封装服务端事件并传递。
WatchedEvent包含了每一个事件的三个基本属性:
通知状态(keeperState),事件类型(EventType)和节点路径(path)
c:event异步发送
watcher的通知事件从服务端发送到客户端是异步的。
d:先注册再触发
Zookeeper中的watch机制,必须客户端先去服务端注册监听,这样事件发送才会触发监听,通知给客户端。
4.zookeeper JavaAPI操作
a:原生的
b:curator框架:curator-framework:对底层zookeeper的api的封装
curator-reclipes:封装了一些高级特性:擦车事件监听选举分布式锁,分布式计数器
引入maven依赖

```java

        
            org.apache.curator
            curator-framework
            2.12.0
        

        
            org.apache.curator
            curator-recipes
            2.12.0
        

        
            com.google.collections
            google-collections
            1.0
        
        
            junit
            junit
            RELEASE
        
        
            org.slf4j
            slf4j-simple
            1.7.25
        
    

    
        
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.2
                
                    1.8
                    1.8
                    UTF-8
                
            
        
   

节点操作代码:

```java
```java
package com.hlzq.zookeeper;
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.Curatorframework;
import org.apache.curator.framework.CuratorframeworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.CreateMode;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.nio.charset.StandardCharsets;
import java.util.List;

public class Demo1Zooke {

    private Curatorframework client=null;

    @Before //单元测试前先执行before里的代码
    public  void init(){
        //1.定制重试
        ExponentialBackoffRetry retry = new ExponentialBackoffRetry(1000, 3);
        //2.获取客户
        String cli="node1:2181,node2:2181,node3:2181";
         client = CuratorframeworkFactory.newClient(cli, retry);
        //3.启动客户端
        client.start();
    }
    @After
    public  void clos(){
        //5.关闭连接
        client.close();
    }
    //1.创建znode节点
    @Test
    public void test1CreatZnode() throws Exception {
        //1.定制重试策略
        RetryPolicy backoffRetry = new ExponentialBackoffRetry(1000, 3);//多态
        //2.获取客户端对象
        String server_list="node1:2181,node2:2181,node3:2181";//192.168.88.161:2181,192.168.88.162:2181,192.168.88.163:2181可以用
        Curatorframework client = CuratorframeworkFactory.newClient(server_list, backoffRetry);
        //3.启动客户端
        client.start();
        //4.创建节点
//       4.1 client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT)//创建永久节点
//              .forPath("/aaa/bbb/cccc","null".getBytes());//withmode什么类型节点,forpath路径
//       4.2 client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT_SEQUENTIAL)//创建永久序列化节点
//                .forPath("/app1/bbb/cccc");//withmode什么类型节点,forpath路径
//       4.3 client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL)//创建临时节点;client.close()关闭后临时节点消失
//                .forPath("/appale");//withmode什么类型节点,forpath路径
        client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL_SEQUENTIAL)//创建临时序列化节点;client.close()关闭后临时节点消失
                .forPath("/appale");//withmode什么类型节点,forpath路径
        //CreateMode.PERSISTENT
        //GetACLBuilder acl = client.getACL();
        //System.out.println(acl);
        //5.关闭连接
        //client.close();
    }
    @Test
    //删除节点
    public void test2Delter() throws Exception {
        //4.删除节点
        client.delete().deletingChildrenIfNeeded().forPath("/app1");//递归删除deletingChildrenIfNeeded()
    }
    @Test
    //修改值
    public  void test3change() throws Exception {
        client.setData().forPath("/as","{pory:3602}".getBytes());
    }
    @Test
    //获取值
    public void test4getZnode() throws Exception {
        byte[] bytes = client.getData().forPath("/as");
        System.out.println(new String(bytes));
        List strings = client.getChildren().forPath("/as");
        System.out.println(strings);
    }
}

当你get获取没有数据的节点时,会得到一个IP地址
watch机制Java代码实现:

5.zookeeper选举机制:
5.1zookeeper集群的角色:follower leader observer(观察者)
5.2 zookeeper监听机制:通过向某一节点注册提供监听能力,当节点发生某些改变(添加,删除,修改)触发watcher,得到触发事件。
5.3zookeeper的选举机制:
第一种:第一次启动,第二种lead挂了
zookeeper默认的算法:fastleaderelection,采用投票数大于半数则胜出
服务器id:myid服务器编号越大权重越大。
选举状态:looking竞选状态;follower 随从同步leader;observer观察者不参与投票 ;leading领导者;
数据id:version越大数据越新权重越大;
逻辑时钟:投票次数
第一次和myid还有启动顺序有关;

非全新选举(leader宕机):剩余主机不过半,否则挂掉不能正常工作;
数据的新旧:mzxid相同


mzxid不相等时:

二.大数据导论和Hadoop

2.1大数据:海量数据的存储和计算
2.2特点:大 ,种类多, 价值密度低,快,信(数据质量)
2.3大数据的分析步骤:需求分析 --》数据收集–》数据处理–》数据分析–》数据展现–》报告撰写
2.4Hadoop介绍:Java开源框架包含hdfs(分布式文件系统)mapreduce(分布式运算)yarn(作业调度和集群资源管理)

扩展能力强,成本低 ,高效,可靠

1.0只有MapReduce和hdfs;2.0

2.5Hadoop架构

高可用集群

最完美

2.5Hadoop安装搭建
1.
2.环境准备:
重新编译hadoop
上传,安装,更改配置文件:

vim core-site.xml
在该文件中的标签中添加以下配置,

在这里添加配置

cd /export/server/hadoop-2.7.5/etc/hadoop
vim core-site.xml
配置内容如下:


	 
		    fs.defaultFS
		    hdfs://node1:8020
	 

	 
		   hadoop.tmp.dir
		   /export/server/hadoop-2.7.5/hadoopDatas/tempDatas
	

	
	 
		   io.file.buffer.size
		   4096
	 

	
	 
		   fs.trash.interval
		   10080
	 

配置 hdfs-site.xml

配置一下内容



		dfs.namenode.secondary.http-address
		node2:50090



	dfs.namenode.http-address
	node1:50070



	dfs.namenode.name.dir
	file:///export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas



	dfs.datanode.data.dir
	file:///export/server/hadoop-2.7.5/hadoopDatas/datanodeDatas
	


	dfs.namenode.edits.dir
	file:///export/server/hadoop-2.7.5/hadoopDatas/nn/edits




	dfs.namenode.checkpoint.dir
	file:///export/server/hadoop-2.7.5/hadoopDatas/snn/name



	dfs.namenode.checkpoint.edits.dir
	file:///export/server/hadoop-2.7.5/hadoopDatas/dfs/snn/edits



	dfs.replication
	3




	dfs.permissions
	false



	dfs.blocksize
	134217728

配置 mapred-site.xml


  在这里添加配置

vim  mapred-site.xml
配置一下内容:
	
	
			mapreduce.framework.name
			yarn
	

	
	
		mapreduce.job.ubertask.enable
		true
	
	
	
	
		mapreduce.jobhistory.address
		node1:10020
	

	
	
		mapreduce.jobhistory.webapp.address
		node1:19888
	

配置mapred-env.sh

vim  mapred-env.sh

export JAVA_HOME=/export/server/jdk1.8.0_241

配置 yarn-site.xml

vim yarn-site.xml
添加以下配置:


	
		yarn.resourcemanager.hostname
		node1
	

	
		yarn.nodemanager.aux-services
		mapreduce_shuffle
	
	
	
	
		yarn.log-aggregation-enable
		true
	
	
	
		yarn.log-aggregation.retain-seconds
		604800
	
	
	    
		yarn.nodemanager.resource.memory-mb    
		2048
	
	  
        	 yarn.scheduler.minimum-allocation-mb
         	2048
	
	
		yarn.nodemanager.vmem-pmem-ratio
		2.1
	

配置 slaves

vim slaves
删除slaves中的localhost,然后添加以下内容:

node1
node2
node3

5.目录创建
创建Hadoop所需目录

mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/tempDatas
mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas
mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/datanodeDatas
mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/nn/edits
mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/snn/name
mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/dfs/snn/edits

6.文件分发
将配置好的Hadoop目录分发到node2和node3主机。

scp -r /export/server/hadoop-2.7.5/ node2:/export/server/
 scp -r /export/server/hadoop-2.7.5/ node3:/export/server/
  1. 配置Hadoop的环境变量

注意,三台机器都需要执行以下命令

vim /etc/profile

添加以下内容:

export HADOOP_HOME=/export/server/hadoop-2.7.5
export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

配置完成之后生效
source /etc/profile

  1. 启动集群

8.1 启动方式
要启动Hadoop集群,需要启动HDFS和YARN两个集群。
注意:首次启动HDFS时,必须对其进行格式化操作。本质上是一些清理和准备工作,因为此时的HDFS在物理上还是不存在的。
在node1上执行格式化指令
hadoop namenode -format
方式1-单节点逐个启动
在node1主机上使用以下命令启动HDFS NameNode:
hadoop-daemon.sh start namenode

在node1、node2、node3三台主机上,分别使用以下命令启动HDFS DataNode:
hadoop-daemon.sh start datanode
在node1主机上使用以下命令启动YARN ResourceManager:
yarn-daemon.sh start resourcemanager
在node1、node2、node3三台主机上使用以下命令启动YARN nodemanager:
yarn-daemon.sh start nodemanager

以上脚本位于/export/server/hadoop-2.7.5/sbin目录下。如果想要停止某个节点上某个角色,只需要把命令中的start改为stop即可。
8.2 方式2-脚本一键启动
启动HDFS
start-dfs.sh

启动Yarn
start-yarn.sh

启动历史任务服务进程
mr-jobhistory-daemon.sh start historyserver

8.3 方式3-全部一键启动
启动HDFS和Yarn
start-all.sh
9.停止集群:stop-dfs.sh、stop-yarn.sh、mr-jobhistory-daemon.sh stophistoryserver
10. 集群的页面访问
10.1IP访问
一旦Hadoop集群启动并运行,可以通过web-ui进行集群查看,如下所述:
查看NameNode页面地址:
http://192.168.88.161:50070/

查看Yarn集群页面地址:
http://192.168.88.161:8088/cluster

查看MapReduce历史任务页面地址:
http://192.168.88.161:19888/jobhistory

10.2主机名访问
请注意,以上的访问地址只能使用IP地址,如果想要使用主机名,则对Windows进行配置。
配置方式:
1、打开Windows的C:WindowsSystem32driversetc目录下hosts文件
2、在hosts文件中添加以下域名映射
192.168.88.161 node1 node1.itcast.cn
192.168.88.162 node2 node2.itcast.cn
192.168.88.163 node3 node3.itcast.cn

配置完之后,可以将以上地址中的IP替换为主机名即可访问,如果还不能访问,则需要重启Windows电脑,比如访问NameNode,可以使用http://node1:50070/ 。
11.hadoop上传文件
命令 hadoop fs -put 文件名 /

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/676737.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号