从零开始的Hadoop学习之旅

来源:互联网 发布:知乎 唯一视觉怎么样 编辑:程序博客网 时间:2024/05/01 17:07

问题1:hadoop 安装时要注意哪些?

答案:对所有的电脑进行(1)安装大环境,linux系统,java安装(2)linux语法上;建立专门的用户;修改/etc/hosts的IP地址与名字对应;然后在集群进行ssh的免密码登录,生成公钥,然后把所有的公钥,分发到集群的authorized_keys.(3)hadoop的配置文件夹;下载解压hadoop的版本,配置hadoop的5个文件。(4)打开。对namenode -format;start_all.sh;(5)测试;jsp下是有namenode,datanode,secendary namenode,jobtracker,tasktracker5个进程,然后在打开网页管理,查看。最后运行一个简单的例子,wordcount。


问题2:在权威指南中,气象数据的例子中,出现了大量的文件,对于这些文件hadoop是怎么进行split,并分布式的存储到不同的datanode,在mapreduce的时候又是怎么处理的?

最佳答案:

————————————————————————————————

如果block设置为64M,那么每个block就是64M,除了最后一个block可能不满64M, 
block是不会考虑一行几行的,行或session概念是业务层面,hdfs是不会涉及的。 
那么怎么在map阶段怎么处理行或session的边界问题,实际上由reader来处理的。 
代码参考: 
org.apache.hadoop.mapred.LineRecordReader.LineReader 

简要来说,如果一行跨越了block,比如一行10个字节,前4个字节在第N个block,后6个在N+1个block里面,reader来处理,怎么处理? 
因为reader是per block,就是一个block一个(准确的说是一个split一个), 
第N个reader会留下最后4个字节不读,第N+1个reader会网络读取第N个block末尾一部分数据,足以包含那4个字节就行了。 
到底是前面不读后面读, 还是前面读,后面不读,其实都行,在reader里面实现一种就行了。 
本人有hadoop应用和hadoop本身开发不少经验,不会有错的。
——————————————————————————————————————
除此之外,hadoop的mapreduce如何自定义分割文件【改变默认按行分割】也值得一读。

update:2016/06/24 23:31 Friday

问题3:Hbase数据库的典型使用场景?
   如电商的用户浏览痕迹。其用户多,因此请求多。其Hbase优点是天生的面向时间戳的查询,基于行键的查询异常的快速,特别是最近的数据被放在内存的memstore,完全没有IO开销。分布式的化解负荷。因此可以以userid作为行键,以book:bookid作为列族和列。为了充分利用分布式可以用reverse key,hash等技巧改造行键。
   如帖子推荐:为了增加网站浏览,当用户(userid)点击一个帖子(threadid),推荐点击这个threadId的其他用户浏览的帖子。若使用mysql ,一千万,9s。Hbase设计模式:建立两个表:一个是u-t,一个是t-u。u-t的结构是行键为userid,列族和列卫thread:threadid,t-u的结构为行键为threadid,列族和列为user:userid。查询:从t-u表中进行key-value查询(hbase擅长)threadid-》userid,再从u-t表从userid-》threadid。然后读入java去重,统计功能。


0 0
原创粉丝点击