楼主: aongao
1383 2

[Hadoop] Hadoop运行原理分析免费分享 [推广有奖]

  • 5关注
  • 31粉丝

VIP

已卖:8份资源

教授

52%

还不是VIP/贵宾

-

TA的文库  其他...

新能源&可持續發展

農業&经济

威望
1
论坛币
33743 个
通用积分
5634.9830
学术水平
153 点
热心指数
194 点
信用等级
114 点
经验
95489 点
帖子
622
精华
2
在线时间
1101 小时
注册时间
2014-1-20
最后登录
2022-4-13

楼主
aongao 发表于 2015-2-27 22:00:27 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币


运行原理+编写的程序 +运行HADOOP程序+ hadoop运行效率

Hadoop运行原理分析



      Hadoop 是Google MapReduce的一个Java实现。 MapReduce是一种简化的分布式编程模式, 让程序自动分布到一个由普通机器组成的超大集群上并发执行。就如同java程序员可以 不考虑内存泄露一样, MapReduce的run-time系统会解决输入数据的分布细节,跨越机器集群的程序执行调度,处理机器的失效,并且管理机器之间的通讯请求。这样的 模式允许程序员可以不需要有什么并发处理或者分布式系统的经验,就可以处理超大的分布式系统得资源



程序员编写的代码



      我们做一个简单的分布式的 Grep,简单对输入文件进行逐行的正则匹配,如果符合就将该行打印到输出文件。因为是简单的全部输出,所以我们只要写 Mapper 函数,不用写Reducer 函数,也不用定Input/Output Format。

  1. package demo.hadoop
  2. public class HadoopGrep{
  3. public static class RegMapper extends MapReduceBase implements Mapper {
  4. private Pattern pattern;
  5. public void configure(JobConf job){
  6. pattern = Pattern.compile(job.get( " mapred.mapper.regex " ));
  7. }
  8. public void map(WritableComparable key, Writable value, OutputCollector output, Reporter reporter) throws
  9. IOException {
  10. String text = ((Text) value).toString();
  11. Matcher matcher = pattern.matcher(text);
  12. if(matcher.find()) {
  13. output.collect(key, value);
  14. }
  15. }
  16. }
  17. private HadoopGrep () {
  18. } // singleton
  19. public static void main(String[] args) throws Exception {
  20. JobConf grepJob = new JobConf(HadoopGrep. class );
  21. grepJob.setJobName( " grep-search " );
  22. grepJob.set( " mapred.mapper.regex " , args[ 2 ]);
  23. grepJob.setInputPath( new Path(args[ 0 ]));
  24. grepJob.setOutputPath( new Path(args[ 1 ]));
  25. grepJob.setMapperClass(RegMapper. class );
  26. grepJob.setReducerClass(IdentityReducer. class );
  27. JobClient.runJob(grepJob);
  28. }
  29. }
复制代码

      RegMapper 类的 configure() 函数接受由 main 函数传入的查找字符串, map() 函数进行正则匹配, key 是行数,value 是文件行的内容,符合的文件行放入中间结果。
main() 函数定义由命令行参数传入的输入输出目录和匹配字符串, Mapper 函数为RegMapper 类 , Reduce 函 数 是什 么 都 不 做 , 直 接 把 中 间 结 果 输 出 到 最 终 结 果 的 的IdentityReducer 类,运行 Job。
整个代码非常简单,丝毫没有分布式编程的任何细节。



运行 Hadoop 程序






      Hadoop 这方面的文档写得不全面,综合参考 GettingStartedWithHadoop与 Nutch Hadoop Tutorial 两篇后,再碰了很多钉子才终于完整的跑起来了,记录如下:

3.1 local 运行模式

      完全不进行任何分布式计算,不动用任何namenode,datanode的做法,适合一开始做调试代码。解压hadoop,其中conf目录是配置目录, hadoop的配置文件在hadoop-default.xml,如果要修改配置,不是直接修改该文件,而是修改hadoop-site.xml,将该属性在hadoop-site.xml里重新赋值。
hadoop-default.xml的默认配置已经是local运行,不用任何修改,配置目录里唯一必须修改的是hadoop-env.sh 里JAVA_HOME 的位置。
将编译好的 HadoopGrep 与 RegMapper.class 放入 hadoop/build/classes/demo/hadoop/目录 找一个比较大的log 文件放入一个目录,然后运行
hadoop / bin / hadoop demo.hadoop.HadoopGrep log 文件所在目录任意的输出目录 grep 的字符串
查看输出目录的结果,查看 hadoop/logs/里的运行日志。
在重新运行前,先删掉输出目录。





3.2 单机集群运行模式

      现在来搞一下只有单机的集群. 假设以完成3.1中的设置,本机名为 hadoopserver第1步. 然后修改
hadoop-site.xml ,加入如下内容:


  1. < property >
  2. < name > fs.default.name </ name >
  3. < value > hadoopserver:9000 </ value >
  4. </ property >
  5. < property >
  6. < name > mapred.job.tracker </ name >
  7. < value > hadoopserver:9001 </ value >
  8. </ property >
  9. < property >
  10. < name >
  11. </ property >
复制代码

从此就将运行从 local 文件系统转向了 hadoop 的 hdfs 系统, mapreduce 的 jobtracker 也从 local 的进程内
操作变成了分布式的任务系统, 9000, 9001两个端口号是随便选择的两个空余端口号。
另外,如果你的/tmp 目录不够大,可能还要修改 hadoop.tmp.dir 属性。


第2步. 增加 ssh 不输入密码即可登陆。
因为Hadoop 需要不用输入密码的 ssh 来进行调度,在不 su 的状态下,在自己的 home目 录 运 行 ssh-keygen -t
rsa , 然后一路回车生成密钥 , 再进入 .ssh目 录,cp id_rsa.pub authorized_keys
详细可以 man 一下 ssh, 此时执行 ssh hadoopserver,不需要输入任何密码就能进入了。

3. 格式化 namenode,执行 bin/hadoop namenode -format

4. 启动 Hadoop执行 hadoop/bin/start-all.sh,

在本机启动 namenode,datanode,jobtracker,tasktracker



5. 现在将待查找的 log 文件放入 hdfs, 。


执行 hadoop/bin/hadoop dfs 可以看到它所支持的文件操作指令。
执行 hadoop/bin/hadoop dfs put log 文件所在目录 in , 则 log 文件目录已放入 hdfs 的 /user/user-name/in
目录中

6. 现在来执行Grep 操作
hadoop/bin/hadoop demo.hadoop.HadoopGrep in out查看 hadoop/logs/里的运行日志,重新执行前。运行
hadoop/bin/hadoop dfs rmr out 删除 out 目录。

7. 运行 hadoop/bin/stop-all.sh 结束


3.3 集群运行模式

假设已执行完3.2的配置,假设第2台机器名是hadoopserver2
1. 创建与hadoopserver同样的执行用户,将hadoop解压到相同的目录。
2. 同样的修改haoop-env.sh中的JAVA_HOME 及修改与3.2同样的hadoop-site.xml
3. 将 hadoopserver 中的 /home/username/.ssh/authorized_keys 复制到 hadoopserver2, 保证hadoopserver可
以无需密码登陆hadoopserver2
scp
/home/username/.ssh/authorized_keys
username@hadoopserver2:/home/username/.ssh/authorized_keys
4. 修改hadoop-server的hadoop/conf/slaves文件, 增加集群的节点,将localhost改为hadoop-server
hadoop-server2
5. 在hadoop-server执行hadoop/bin/start-all.sh
将会在hadoop-server启动namenode,datanode,jobtracker,tasktracker
在hadoop-server2启动datanode 和tasktracker
6. 现在来执行Grep操作
hadoop/bin/hadoop demo.hadoop.HadoopGrep in out
重新执行前, 运行hadoop/bin/hadoop dfs rmr out 删除out目录
7. 运行hadoop/bin/stop-all.sh 结束。






四、hadoop运行效率





(大数据中国整理)
      经测试, Hadoop 并不是万用灵丹,很取决于文件的大小和数量,处理的复杂度以及群集机器的数量,相连的带宽



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:运行原理分析 Hadoop 免费分享 Had Comparable Hadoop 运行原理分析

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
niuniuyiwan + 60 + 60 + 5 + 5 + 5 精彩帖子
xddlovejiao1314 + 60 + 60 + 5 + 5 + 5 感谢分享

总评分: 经验 + 120  论坛币 + 120  学术水平 + 10  热心指数 + 10  信用等级 + 10   查看全部评分

本帖被以下文库推荐

沙发
sakura1019zdx 发表于 2015-5-14 08:24:18
刚开始学,感觉有点难度
已有 1 人评分论坛币 收起 理由
niuniuyiwan + 5 鼓励积极发帖讨论

总评分: 论坛币 + 5   查看全部评分

藤椅
xddlovejiao1314 学生认证  发表于 2015-5-14 09:08:07
谢谢分享。
已有 1 人评分论坛币 收起 理由
niuniuyiwan + 5 鼓励积极发帖讨论

总评分: 论坛币 + 5   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-25 23:21