springboot redis简单结合

参考:
https://www.cnblogs.com/ityouknow/p/5748830.html
http://blog.csdn.net/i\_vic/article/details/53081241
https://www.cnblogs.com/gdpuzxs/p/7222309.html
http://www.runoob.com/redis/redis-keys.html #redis命令

1.Hadoop集群能够运营的二个格局?

springboot和redis结合,那里只是单机版的安排,假如急需配备集群,能够在上头多少个博客中看一下。附录中是有的redis常用命令,也足以在参考[3]中看。

单机(本地)模式
伪分布式情势
全分布式格局

springboot的选取,包路径一定要合格(全数的代码,都在运行类所在得包的下属目录中),幸免不要求的分神。

2.  单机(本地)格局中的注意点?

开始:

在单机情势(standalone)中不会设有医生和医护人员进度,全部东西都运转在2个JVM上。那里同样没有DFS,使用的是当麻芋果件系统。单机形式适用于付出进度中运转MapReduce程序,那也是起码使用的二个情势。

1. pom中添加
     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>        

3.  伪分布情势中的注意点?

2.  启动类
添加  @EnableCaching

伪分布式(Pseudo)适用于付出和测试环境,在这一个情势中,全部医生和医护人员进度都在同样台机械上运维。

3. 配置

配置文件:

# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=192.168.72.133
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0

配置类:

@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport{

    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.timeout}")
    private int timeout;
    @Value("${redis.cacheExpirationTime}")
    private long cacheExpirationTime;

    //自定义缓存key生成策略
    @Bean
    public KeyGenerator keyGenerator() {
        return new KeyGenerator(){
            @Override
            public Object generate(Object target, Method method, Object... params) {
                StringBuffer sb = new StringBuffer();
                sb.append(target.getClass().getName());
                sb.append(method.getName());
                for(Object obj:params){
                    sb.append(obj.toString());
                }
                return sb.toString();
            }
        };
    }

    //缓存管理器
    @Bean 
    public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        //设置缓存过期时间 
        cacheManager.setDefaultExpiration(10);
        return cacheManager;
    }
    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory){
        StringRedisTemplate template = new StringRedisTemplate(factory);
        setSerializer(template);//设置序列化工具
        template.afterPropertiesSet();
        return template;
    }

    private void setSerializer(StringRedisTemplate template){
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setValueSerializer(jackson2JsonRedisSerializer);
    }
}

内部的应用的是com.fasterxml.jackson。

4.  VM是还是不是足以称呼Pseudo?

4. redis操作接口和贯彻类(使用接口达成类的花样,能够使你在单机和集群格局火速切换,而且在任啥地点方接纳的应用能够自行注入)

interface:

public interface JedisServer {

    public boolean set(String key, String value);  

    public String get(String key);  

    public boolean expire(String key,long expire);  

    public <T> boolean setList(String key ,List<T> list);  

    public <T> List<T> getList(String key,Class<T> clz);  

    public long lpush(String key,Object obj);  

    public long rpush(String key,Object obj);  

    public String lpop(String key);  

}

implements single:

@Service
public class JedisServerImpl implements JedisServer {

    @Resource  
    private RedisTemplate<String, ?> redisTemplate;  

    @Override  
    public boolean set(final String key, final String value) {  
        boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  
            @Override  
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                connection.set(serializer.serialize(key), serializer.serialize(value));  
                return true;  
            }  
        });  
        return result;  
    }  

    public String get(final String key){  
        String result = redisTemplate.execute(new RedisCallback<String>() {  
            @Override  
            public String doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                byte[] value =  connection.get(serializer.serialize(key));  
                return serializer.deserialize(value);  
            }  
        });  
        return result;  
    }  

    /**
     * 设置缓存剩余时间(s)
     */
    @Override  
    public boolean expire(final String key, long expire) {  
        return redisTemplate.expire(key, expire, TimeUnit.SECONDS);  
    }  

    @Override  
    public <T> boolean setList(String key, List<T> list) {  
        String value = JsonUtilFood.object2Json(list);  
        return set(key,value);  
    }  

    @Override  
    public <T> List<T> getList(String key,Class<T> clz) {  
        String json = get(key);  
        if(json!=null){  
            @SuppressWarnings("unchecked")
            List<T> list = (List<T>) JsonUtilFood.json2Object(json, clz);
            return list;  
        }  
        return null;  
    }  

    @Override  
    public long lpush(final String key, Object obj) {  
        final String value = JsonUtilFood.object2Json(obj);  
        long result = redisTemplate.execute(new RedisCallback<Long>() {  
            @Override  
            public Long doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                long count = connection.lPush(serializer.serialize(key), serializer.serialize(value));  
                return count;  
            }  
        });  
        return result;  
    }  

    @Override  
    public long rpush(final String key, Object obj) {  
        final String value = JsonUtilFood.object2Json(obj);  
        long result = redisTemplate.execute(new RedisCallback<Long>() {  
            @Override  
            public Long doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                long count = connection.rPush(serializer.serialize(key), serializer.serialize(value));  
                return count;  
            }  
        });  
        return result;  
    }  

    @Override  
    public String lpop(final String key) {  
        String result = redisTemplate.execute(new RedisCallback<String>() {  
            @Override  
            public String doInRedis(RedisConnection connection) throws DataAccessException {  
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();  
                byte[] res =  connection.lPop(serializer.serialize(key));  
                return serializer.deserialize(res);  
            }  
        });  
        return result;  
    }  

}

记得加上@Service注释

implements cluster: 没写,百度挺多的。

能够在微型总括机安装虚拟机,安装linux,然后安装redis,在地方参报考博士学士客中有,然后关门防火墙,运转redis服务端,之后运维客户端测试,可以的时候再利用代码测试。

配备中的缓存存在时间安排目前测试,不明白为何没用,所以先在代码中安装了,今后找到了再立异吧。。

再贴一份调用的代码:

    @Resource
    private JedisServer jedisServer;

    @Override
    public String noodlesList() {
        //其中的key暂时先写的是固定的,之后可以根据表名+主键保存,防止重复,记得再次查询的时候,重新设置超时时间,修改和删除的时候删除/更新redis中的缓存
        try{
            String string = jedisServer.get("foodcom");
            if(null != string) {
                return string;
            }else{
                jedisServer.expire("foodcom", 10);
            }
        }catch(Exception e) {
            log.info("查询缓存异常(key=foodcom).");
        }

        FoodInfo food = foodInfoMapper.selectByPrimaryKey(1);
        jedisServer.set("foodcom", JsonUtilFood.object2Json(food));
        jedisServer.expire("foodcom", 10);
        return JsonUtilFood.object2Json(food);
    }

希望得以帮到你,借使是业余测试,获取有标题作者能够帮到你,假如是合营社大使用,小编也。。不会,今后大概就会了,哈哈哈

不是,五个东西,同时Pseudo只针对Hadoop。

附:

redis常用:

防火墙,需要用root用户。

从配置菜单关闭防火墙是不起作用的,索性在安装的时候就不要装防火墙
查看防火墙状态:
/etc/init.d/iptables status
暂时关闭防火墙:
/etc/init.d/iptables stop
禁止防火墙在系统启动时启动
/sbin/chkconfig --level 2345 iptables off
重启iptables:
/etc/init.d/iptables restart
题外话:
BT或者骡子速度慢用不着关防火墙,只要把相应端口开放就可以了
在文件
/etc/sysconfig/iptables
在系统原始配置的:RH-Firewall-1-INPUT规则链增加类似这样的行:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 39764 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 39764 -j ACCEPT
如果发现原有-j REJECT一类的语句,上面两句要放在它的前面

重启后生效 
开启: chkconfig iptables on 
关闭: chkconfig iptables off 或者 /sbin/chkconfig --level 2345 iptables off

2) 即时生效,重启后失效
service 方式
开启: service iptables start 
关闭: service iptables stop
iptables方式
查看防火墙状态:
/etc/init.d/iptables status
暂时关闭防火墙:
/etc/init.d/iptables stop
重启iptables:
/etc/init.d/iptables restart

1.    SET key value  设置指定 key 的值
2    GET key  获取指定 key 的值。
3    GETRANGE key start end  返回 key 中字符串值的子字符
4    GETSET key value  将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
5    GETBIT key offset  对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
6    MGET key1 [key2..]  获取所有(一个或多个)给定 key 的值。
7    SETBIT key offset value  对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
8    SETEX key seconds value  将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
9    SETNX key value  只有在 key 不存在时设置 key 的值。
10    SETRANGE key offset value  用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
11    STRLEN key  返回 key 所储存的字符串值的长度。
12    MSET key value [key value ...]  同时设置一个或多个 key-value 对。
13    MSETNX key value [key value ...]  同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
14    PSETEX key milliseconds value  这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
15    INCR key  将 key 中储存的数字值增一。
16    INCRBY key increment  将 key 所储存的值加上给定的增量值(increment) 。
17    INCRBYFLOAT key increment  将 key 所储存的值加上给定的浮点增量值(increment) 。
18    DECR key  将 key 中储存的数字值减一。
19    DECRBY key decrement  key 所储存的值减去给定的减量值(decrement) 。
20    APPEND key value  如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。 

1.    DEL key  该命令用于在 key 存在时删除 key。
2    DUMP key  序列化给定 key ,并返回被序列化的值。
3    EXISTS key  检查给定 key 是否存在。
4    EXPIRE key seconds  为给定 key 设置过期时间。
5    EXPIREAT key timestamp  EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
6    PEXPIRE key milliseconds  设置 key 的过期时间以毫秒计。
7    PEXPIREAT key milliseconds-timestamp  设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
8    KEYS pattern  查找所有符合给定模式( pattern)的 key 。
9    MOVE key db  将当前数据库的 key 移动到给定的数据库 db 当中。
10    PERSIST key  移除 key 的过期时间,key 将持久保持。
11    PTTL key  以毫秒为单位返回 key 的剩余的过期时间。
12    TTL key  以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
13    RANDOMKEY  从当前数据库中随机返回一个 key 。
14    RENAME key newkey  修改 key 的名称
15    RENAMENX key newkey  仅当 newkey 不存在时,将 key 改名为 newkey 。
16    TYPE key  返回 key 所储存的值的类型。

 

 

5.  全分布格局又有何注意点?

 

 

全分布格局日常被用于生产条件,这里大家采纳N台主机组成多少个Hadoop集群,Hadoop守护进度运营在每台主机之上。那里会设有Namenode运维的主机,Datanode运转的主机,以及task
tracker运营的主机。在分布式环境下,主节点和从节点会分手。

6.  Hadoop是不是遵从UNIX方式?

是的,在UNIX用例下,Hadoop还拥有“conf”目录。

7.  Hadoop安装在如何目录下?

Cloudera和Apache使用相同的目录结构,Hadoop棉被服装置在cd/usr/lib/hadoop-0.20/。

8.  Namenode、Job tracker和task tracker的端口号是?

Namenode,70;Job tracker,30;Task tracker,60。

9.  Hadoop的为主配置是怎样?

Hadoop的焦点配置通过七个xml文件来成功:1,hadoop-default.xml;2,hadoop-site.xml。那一个文件都利用xml格式,因而各样xml中都有局部质量,包蕴名称和值,可是及时这几个文件都已不复存在。

10.  那当下又该怎样陈设?

Hadoop今后抱有贰个布局文件:1,core-site.xml;2,hdfs-site.xml;3,mapred-site.xml。那一个文件都保存在conf/子目录下。

11.  RAM的溢出因子是?

溢出因子(Spill
factor)是一时半刻文件中贮存文件的轻重缓急,也正是Hadoop-temp目录。

12.  fs.mapr.working.dir只是纯净的目录?

fs.mapr.working.dir只是1个索引。

13.  hdfs-site.xml的二个重庆大学品质?

dfs.name.dir决定的是元数据存储的途径以及DFS的积存格局(磁盘或是远端)
dfs.data.dir决定的是数据存款和储蓄的门路
fs.checkpoint.dir用于第壹Namenode

14.  如何退出输入形式?

剥离输入的章程有:1,按ESC;2,键入:q(假使你未曾输入任何当下)也许键入:wq(假如您曾经输入当下),并且按下Enter。

15.  当你输入hadoopfsck /造成“connection refused java
exception’”时,系统究竟产生了什么样?

那表示Namenode没有运营在你的VM之上。

16. 
我们采纳Ubuntu及Cloudera,那么我们该去哪儿下载Hadoop,也许是暗中同意就与Ubuntu一起安装?

其一属于Hadoop的暗中同意配置,你必须从Cloudera或许艾德ureka的dropbox下载,然后在您的类别上运营。当然,你也能够协调布署,可是你需求3个Linux
box,Ubuntu恐怕是Red
Hat
。在Cloudera网站也许是艾德ureka的Dropbox中有安装步骤。

17.  “jps”命令的用途?

其一命令能够检查Namenode、Datanode、Task Tracker、 Job
Tracker是或不是健康办事。

18.  怎么样重启Namenode?

点击stop-all.sh,再点击start-all.sh。
键入sudo hdfs(Enter),su-hdfs
(Enter),/etc/init.d/ha(Enter),及/etc/init.d/hadoop-0.20-namenode
start(Enter)。

19.  Fsck的全名?

全名是:File System Check。

20.  如何检查Namenode是或不是平常运行?

澳门美高梅手机网站,假使要反省Namenode是不是正常工作,使用命令/etc/init.d/hadoop-0.20-namenode
status可能就算简单的jps。

21.  mapred.job.tracker命令的功效?

能够让您精晓哪些节点是Job Tracker。

22.  /etc /init.d命令的功用是?

/etc
/init.d表明了护理进度(服务)的位置或气象,其实是LINUX天性,和Hadoop关系一点都不大。

23.  什么在浏览器中寻找Namenode?

借使您真的必要在浏览器中摸索Namenode,你不再供给localhost:8021,Namenode的端口号是50070。

24.  如何从SU转到Cloudera?

从SU转到Cloudera只须要键入exit。

25.  运营和关闭命令会用到哪边文件?

Slaves及Masters。

26.  Slaves由什么组成?

Slaves由主机的列表组成,每台1行,用于表明数据节点。

27.  Masters由哪些组成?

Masters同样是主机的列表组成,每台一行,用于注解第三Namenode服务器。

28.  hadoop-env.sh是用来做什么样的?

hadoop-env.sh提供了Hadoop中. JAVA_HOME的运维条件。

  1. 上面哪个程序负担 HDFS 数据存款和储蓄。答案C datanode

a)NameNode
b)Jobtracker
c)Datanode 
d)secondaryNameNode
e)tasktracker

  1. HDfS 中的 block 暗中认可保存几份? 答案A暗中认可3分

a)3 份
b)2 份
c)1 份
d)不确定

  1. 下列哪个程序平常与 NameNode 在3个节点运转?答案D

a)SecondaryNameNode
b)DataNode
c)TaskTracker
d)Jobtracker

此题分析:

hadoop的集群是基于master/slave形式,namenode和jobtracker属于master,datanode和tasktracker属于slave,master唯有2个,而slave有八个SecondaryNameNode内部存储器须求和NameNode在三个数目级上,所以平日secondary
NameNode(运转在单身的情理机械上)和NameNode运转在不一致的机械上。

JobTracker和TaskTracker

JobTracker 对应于 NameNode

TaskTracker 对应于 DataNode

DataNode 和NameNode 是本着数据存放来而言的

JobTracker和TaskTracker是对此MapReduce执行而言的

mapreduce中多少个第壹概念,mapreduce全体上得以分为这么几条实施线索:obclient,JobTracker与TaskTracker。

① 、JobClient会在用户端通过JobClient类将选拔已经布署参数打包成jar文件存款和储蓄到hdfs,并把路子提交到Jobtracker,然后由JobTracker创制每三个Task(即MapTask和ReduceTask)并将它们分发到种种TaskTracker服务中去实施。

贰 、JobTracker是四个master服务,软件运维以往JobTracker接收Job,负责调度Job的每一种子职责task运营于TaskTracker上,并监察和控制它们,即便发现有战败的task就重国民党的新生活运动行它。一般意况应当把JobTracker计划在独立的机械上。

叁 、TaskTracker是运营在多少个节点上的slaver服务。TaskTracker主动与JobTracker通讯,接收作业,并负担直接执行每一个任务。TaskTracker都急需周转在HDFS的DataNode上。

  1. Hadoop 作者 答案C Doug cutting

a)Martin Fowler
b)Kent Beck
c)Doug cutting

  1. HDFS 默认 Block Size 答案:B

a)32MB
b)64MB 
c)128MB

(因为版本更换较快,这里答案只供参考)

  1. 下列哪项普通是集群的最根本瓶颈:答案:C磁盘

a)CPU
b)网络
c)磁盘IO 
d)内存

该题解析:

率先集群的目标是为着节省费用,用廉价的pc机,取代小型计算机及大型机。小型总计机和重型机有何特色?

1.cpu处理能力强

2.内部存款和储蓄器够大

因而集群的瓶颈不大概是a和d

3.网络是一种稀缺能源,然则并不是瓶颈。

4.由于大数量面临海量数据,读写多少都亟需io,然后还要冗余数据,hadoop一般备3份数据,所以IO就会优惠扣。

  1. 至于 SecondaryNameNode 哪项是毋庸置疑的?答案C

a)它是 NameNode 的热备
b)它对内部存款和储蓄器没有供给
c)它的目标是帮忙 NameNode
合并编辑日志,减弱 NameNode 运行时间

d)SecondaryNameNode 应与 NameNode 安顿到贰个节点。

多选题:

  1. 下列哪项能够视作集群的田管?答案:ABD

a)Puppet 
b)Pdsh 
c)Cloudera Manager
d)Zookeeper

  1. 配备机架感知的上边哪项科学:答案ABC

a)假如多个机架出难点,不会影响多少读写
b)写入数据的时候会写到区别机架的
DataNode 中

c)MapReduce
会依据机架获取离本人相比近的互连网数据

  1. Client 端上传文件的时候下列哪项科学?答案B

a)数据经过 NameNode 传递给 DataNode

b)Client 端将文件切分为
Block,依次上传

c)Client 只上传数据到一台 DataNode,然后由 NameNode 负责 Block 复制工作

该题分析:
Client向NameNode发起文件写入的呼吁。

NameNode依据文件大小和文件块配置意况,重临给Client它所管理一些DataNode的音信。

Client将文件划分为多少个Block,依据DataNode的地址音讯,按顺序写入到每3个DataNode块中。

  1. 下列哪个是 Hadoop 运营的情势:答案ABC

a)单机版 
b)伪分布式 
c)分布式

  1. Cloudera 提供哪三种安装 CDH 的办法?答案:ABCD

a)Cloudera manager 
b)Tarball 
c)Yum 
d)Rpm

判断题:

  1. Ganglia 不仅能够展开监督,也能够展开报告警方。( 正确)

浅析:此题的指标是考Ganglia的摸底。严刻意义上来讲是不错。ganglia作为一款最常用的Linux环境中的监察和控制软件,它擅长的的是从节点中遵从用户的要求以较低的代价采集数据。然而ganglia在预先警告以及产惹祸变后通报用户上并不善于。最新的ganglia已经有了部分那方面的成效。但是更擅长做警告的还有Nagios。Nagios,就是一款精于预先警告、布告的软件。通过将Ganglia和Nagios组合起来,把Ganglia采集的多寡作为Nagios的数据源,然后使用Nagios来发送预先警告通报,能够健全的兑现一整套监督管理的系统。

  1. Block Size 是不得以修改的。(错误 )

分析:它是能够被修改的Hadoop的底子配置文件是hadoop-default.xml,暗许建立一个Job的时候会树立Job的Config,Config首先读入hadoop-default.xml的布署,然后再读入hadoop-site.xml的配置(那么些文件初阶的时候配置为空),hadoop-site.xml中主要性布局供给覆盖的hadoop-default.xml的系统级配置。

  1. Nagios 不可能监督 Hadoop 集群,因为它不提供 Hadoop 援救。(错误 )

分析:Nagios是集群监控工具,而且是云总计三大利器之一

  1. 若果 NameNode 意外终止,SecondaryNameNode
    会接替它使集群继续做事。(错误

解析:SecondaryNameNode是援救恢复生机,而不是代表,如何苏醒,能够查看

  1. Cloudera CDH 是内需付费使用的。(错误 )

解析:第三套付费产品是Cloudera Enterpris,Cloudera
Enterprise在美利坚合营国加州举行的 Hadoop 大会 (Hadoop Summit)
上公然,以多少私有管理、监控、运作工具增强 Hadoop
的成效。收费采取合约订购情势,价格随用的 Hadoop 叢集大小变动。

  1. Hadoop 是 Java 开发的,所以 MapReduce 只协助 Java 语言编写。(错误 )

分析:rhadoop是用Highlander语言开发的,MapReduce是多少个框架,能够知道是一种考虑,能够动用此外语言开发。

  1. Hadoop 帮助数据的任性读写。(错

解析:lucene是援助随机读写的,而hdfs只补助随机读。不过HBase能够来挽救。HBase提供随机读写,来缓解Hadoop不可能处理的题材。HBase自底层设计开端即聚焦于各类可伸缩性难点:表能够很“高”,有数十亿个数据行;也足以很“宽”,有数百万个列;水平分区并在上千个常备商用机节点上活动复制。表的方式是物理存款和储蓄的第壹手反映,使系统有可能拉长快速的数据结构的连串化、存款和储蓄和寻找。

  1. NameNode 负责管理 metadata,client
    端每一回读写请求,它都会从磁盘中读取或则会写入 metadata 消息并反馈 client
    端。(错误)

此题分析:

NameNode 不需求从磁盘读取
metadata,全数数据都在内部存款和储蓄器中,硬盘上的只是体系化的结果,只有每回namenode 运行的时候才会读取。
1)文件写入
Client向NameNode发起文件写入的请求。
NameNode依照文件大小和文书块配置情况,再次回到给Client它所管理有个别DataNode的新闻。
Client将文件划分为多个Block,依据DataNode的地点新闻,按梯次写入到每一个DataNode块中。

2)文件读取
Client向NameNode发起文件读取的呼吁。

  1. NameNode 本地球磁性盘保存了 Block 的岗位信息。( 个人觉着正确,欢迎提议任何意见)

分析:DataNode是文本存款和储蓄的骨干单元,它将Block存储在本和姑件系统中,保存了Block的Meta-data,同时周期性地将持有存在的Block音讯发送给NameNode。NameNode重临文件存款和储蓄的DataNode的新闻。
Client读取文件新闻。

  1. DataNode 通过长连接与 NameNode 保持通讯。( )

本条有分化:具体正在找那方面包车型客车便宜资料。上边提供素材可参考。

先是肯定一下概念:

(1).长连接
Client方与Server方先建立通信连接,连接建立后持续开,然后再实行报文发送和选择。那种办法下是因为通信连接平素留存,此种格局常用于点对点通信。

(2).短连接
Client方与Server每实行一遍报文收发交易时才实行报导连接,交易实现后迅即断开连接。此种格局常用于一点对多点通信,比如八个Client连接3个Server.

  1. Hadoop 自己拥有从严的权力管理和安全措施保险集群平常运营。(错误 )

hadoop只可以阻止好人犯错,可是不能够拦截混蛋干坏事

  1. Slave 节点要存款和储蓄数据,所以它的磁盘越大越好。( 错误)

剖析:一旦Slave节点宕机,数据苏醒是二个难点

  1. hadoop dfsadmin –report 命令用于检查和测试 HDFS 损坏块。(错误 )

  2. Hadoop 默许调度器策略为 FIFO(正确 )

  3. 集群内每一个节点都应该配
    RAID,那样幸免单磁盘损坏,影响整个节点运营。(错误 )

分析:首先知道什么是RAID,能够参照百科磁盘阵列。那句话错误的地点在于太相对,具体意况具体分析。标题不是第1,知识才是最重庆大学的。因为hadoop自身就持有冗余能力,所以要是还是不是很严厉不供给都配置RAID。具体参考第贰题。

  1. 因为 HDFS 有几个副本,所以 NameNode 是不存在单点难点的。(错误 )

  2. 各样 map 槽正是3个线程。(错误

分析:首先大家领略怎么是map 槽,map 槽->map slotmap slot
只是2个逻辑值 (
org.apache.hadoop.mapred.TaskTracker.TaskLauncher.numFreeSlots
),而不是对应着二个线程恐怕经过

  1. Mapreduce 的 input split 就是一个 block。(错误 )

  2. NameNode 的 Web UI 端口是 50030,它通过 jetty 启动的 Web
    服务。(错误 )

  3. Hadoop 环境变量中的 HADOOP_HEAPSIZE 用于安装有着 Hadoop
    守护线程的内部存储器。它默许是 200 GB。( 错误)

hadoop为种种守护进度(namenode,secondarynamenode,jobtracker,datanode,tasktracker)统分的内部存款和储蓄器在hadoop-env.sh中设置,参数为HADOOP_HEAPSIZE,默认为1000M。

3三 、33. DataNode 第一次参加 cluster 的时候,假使 log
中告知不匹配文件版本,那需求 NameNode执行“Hadoop namenode
-format”操作格式化磁盘。(错误

分析:

率先知道介绍,什么ClusterID

ClusterID

添加了3个新的标识符ClusterID用于标识集群中全体的节点。当格式化一个Namenode,需求提供那么些标识符可能自动生成。那个ID能够被用来格式化参加集群的其余Namenode。

二次整理

某些同学难题的重要不是地点分析内容:内容如下:

这几个报错是表明 DataNode
所装的Hadoop版本和任何节点不雷同,应该检查DataNode的Hadoop版本

发表评论

电子邮件地址不会被公开。 必填项已用*标注