hadoop学习笔记(笔记比较乱,随性…


map的输出数就是分区数,同时也是reduce的输入。

大的集合变成小的集合就是归约算法


map reduce八个步骤:
1 将输入文件按照一定的规则(这个跟你使用的输入格式化器有关系)
  输入文件格式化类,对你的输入文件做一定的处理。进而分解为
  map函数的输入键值对,即(key,value),每一个键值对都调用一次map函数

2 定义自己的map函数逻辑。生成新的key,value对

3 对map的输出做分区(具体分区怎么定,怎么玩,谁决定)
4 对不同分区的数据,按照key进行排序分组,相同的key的value放到一个集合当中。
  形成一个新的key,value.即 <k1,{v1,v2}> <k2,{v3,v4}>
 
5 分组后的数据进行归约(将大的集合分成小的集合。)
  combine类。(可以替换reduce的功能)

6 按照多个map任务,根据不同的分区copy到不同的reduce节点。
  有多少个分区,就有多少个reduce。

7 对多个map任务的输出,进行合并排序。写reduce函数自己的逻辑,对输入的key,value
    处理,转换成新的key,value输出。

8 把reduce的输出保存到文件中


map,reduce   RPC机制


RPC通信机制



java基本类型与Hadoop常见基本类型的对照
   
Long   LongWritable
Integer IntWritable
Boolean BooleanWritable
String   Text
其实就是对象的序列化和反序列化的过程而已。



性能调优的一些基础知识。垃圾回收机制与hadoop的

comparable接口,具有可比性。


统计每个加盟商结算金额的总数。

map函数: k1,v1 一行表示加盟商的一条记录
          k2,v2 :k2就是加盟商的pk,v2就是每个加盟商的结算情况,这个可以用一个自定义的hadoop对象来整合。代表不同的字段。

           
reduce函数:
          k3,v3就是上面的k2,v2不做说明
          k4,v4:累积加盟商的每个账户的结算情况,然后打包后放到context中


hadoop的acl access control list


默认的blocksize大小为64M      

hadoop jar fmAccount.jar   FmAccountSettltCount &

要点1 :
  job.setJarByClass(FmAccountSettltCount.class);
要点2 :
    导出jar时候需要指定MainClass为上述FmAccountSettltCount

--如果改了ip地址就比较麻烦了
update user set host='master' where user='root';


update user set host='192.168.80.147' where user='root';

部署hive出现几次问题。
1 密码没改
2 hive-site.xml xml文件中文问题
3 mysql驱动jar包copy错了。


  hive --service metastore &
--可能是同时启动多个进程导致的。
  in thread "main" org.apache.thrift.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083.

hive --service hiveserver &


hadoop fs -chmod -R 777 /tmp


hive -h master -p 10000

看计数器的输出可以看你的mapreduce 的运行状态

归约combine操作: 

舆情监督

context获取自定义计数器

如果combine可以有用的话,可以减少
reduce的输入,那么也就可以减少copy
数据(map的输出都得通过网络传输到reduce节点上,如果有多少个分区就有多少个reduce)
数据量变小了,传送到reduce端的数据量变小了,
传输时间变短,作业的整体时间变少。

为什么combiner不做为MR运行的标配,而是可选步骤?
因为不是所有的算法都适合使用


Combiner这个阶段已经处理完成了reduce操作,
为什么reduce还要执行reduce操作。
这是因为combine发生在map端,
处理一个任务所接收的文件中的数据,
不能跨map任务执行。
而reduce可以接收多个map的输出。


partioner :分区怎么整。

自定义分区。
是对map的输出进行分区操作。

分区文件不同的。

分区的作用:
1 根据业务需求,产生多个输出文件
2 多个reduce任务在运行,可以提搞job运行的效率,
  多个job并行执行,任务拆分开了(相对而言,不是越多越好)。



任务: 1 自己写个分区的mapreduce
        2 FileSystem操作hdfs
        3 自定义排序。我们可以将key进行打包。
          可以将key,value打包下。hadoop排序是按照key进行排序的。
          我们只要将key定义可比性(compareTo 方法)
           
             

可以设置reduce的tasksize为0表示不经过reduce步骤。

我们可以指定新的map任务输入格式化器。

按照key进行排序,分组:将相同key的value放到同一组中。除了这个之外
我们可以自定义分组。


(byte[]first,int firstStart,int firstPos,
byte[]second,int secondStart,int secondPos)



自定义了partion分区类,可以定义

reduceTasks由谁决定?

我怎么知道我需要有几个reduce?

分区之后再排序:
分成多个区之后,每个分区中进行sort操作。

  如果是排完序之后再分区就会比较慢了。

  网络传输:map的输出需要传输给reduce节点。可以在
  写map,reduce的时候指定压缩和对应的压缩算法类。
  conf.setBoolean();//或者在mapred-site.xml文件中进行指定。
  默认是不压缩,默认的压缩算法类是DefaultCodec.

  copy and merge equals shuffle


 
  map reduce 常见算法:

  单词计数
  数据去重功能:
  排序 Top K,取最值问题。
      分组进行排序就可以了。
      将100W个数据分组成
      1000组。每个组一千个,然后我们就取这组的一千个最大值
      所有map函数执行完成后都会执行一个
      clean up方法
      map reduce 会不会有线程安全问题。这个肯定会有
       
  setNumberReduceTasks():

  投影


1 hash表中存储的值都是不一样的,也就是不允许重复
   
  比如长度为n
  你当前的key 为“xxx" 通过hash函数去得一个整数k,然后拿整数
  k对n进行取模操作,结果肯定为0到n-1;对应的结果就当做当前value在hash表中的下标




Zookeeper :
zk可以保证数据在集群之间的数据的事务性一致性。
ACID

如何搭建Zookeeper集群。
    结构: 服务器集群不小于三个节点,要求各服务器
    之间系统时间保持一致。
    选举产生的leader
   
  purge:净化

  zkServer.sh start
  zkServer.sh status
  myid
   


hadoop运行机制
namenode单点故障
hadoop HA
hadoop性能调优。
mapreduce执行流程。
RPC 原理

MapReduce+Hive


集群的瓶颈是啥?
1 磁盘IO,指令和数据都得经过集群中的master。
  hadoop数据放在slave中,将计算任务也分配给slave,就近,磁盘IO就分给了各个低配小PC。

read  
netstat -an

<script type="text/javascript" id="wumiiRelatedItems"> </script>
 
阅读(19) | 评论(0)
推荐 转载
历史上的今天
最近读者
热度
在LOFTER的更多文章
评论

map的输出数就是分区数,同时也是reduce的输入。

大的集合变成小的集合就是归约算法


map reduce八个步骤:
1 将输入文件按照一定的规则(这个跟你使用的输入格式化器有关系)
  输入文件格式化类,对你的输入文件做一定的处理。进而分解为
  map函数的输入键值对,即(key,value),每一个键值对都调用一次map函数

2 定义自己的map函数逻辑。生成新的key,value对

3 对map的输出做分区(具体分区怎么定,怎么玩,谁决定)
', blogTag:'', blogUrl:'blog/static/21727620920151111238378', isPublished:1, istop:false, type:0, modifyTime:0, publishTime:1422767558378, permalink:'blog/static/21727620920151111238378', commentCount:0, mainCommentCount:0, recommendCount:0, bsrk:-100, publisherId:0, recomBlogHome:false, currentRecomBlog:false, attachmentsFileIds:[], vote:{}, groupInfo:{}, friendstatus:'none', followstatus:'unFollow', pubSucc:'', visitorProvince:'', visitorCity:'', visitorNewUser:false, postAddInfo:{}, mset:'000', mcon:'', srk:-100, remindgoodnightblog:false, isBlackVisitor:false, isShowYodaoAd:false, hostIntro:'JAVA软件工程师,有扎实的Java基础,熟悉JavaEE技术,对框架的底层原理熟悉,学习能力强。', hmcon:'0', selfRecomBlogCount:'0', lofter_single:'' }
{if x.visitorName==visitor.userName} ${x.visitorNickname|escape} {else} ${x.visitorNickname|escape} {/if}
{if x.moveFrom=='wap'}   {elseif x.moveFrom=='iphone'}   {elseif x.moveFrom=='android'}   {elseif x.moveFrom=='mobile'}   {/if} ${fn(x.visitorNickname,8)|escape}
{/if} {/list}
${a.selfIntro|escape}{if great260}${suplement}{/if}
 
{/if}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值