设为首页 收藏本站
查看: 912|回复: 0

[经验分享] 用 Hadoop 进行分布式数据处理(入门)

[复制链接]

尚未签到

发表于 2016-12-10 11:20:37 | 显示全部楼层 |阅读模式
摘要: 尽管 Hadoop 是一些大型搜索引擎数据缩减功能的核心部分,但是它实际上是一个分布式数据处理框架。搜索引擎需要收集数据,而且是数量极大的数据。
尽管 Hadoop 是一些大型搜索引擎数据缩减功能的核心部分,但是它实际上是一个分布式数据处理框架。搜索引擎需要收集数据,而且是数量极大的数据。作为分布式框架,Hadoop 让许多应用程序能够受益于并行数据处理。  初始设置
  对于本文中的示例,我们使用 Cloudera Hadoop 发行版。Cloudera 提供对各种 Linux 发行版的支持,所以很适合初学者。(本文假设您的系统上已经安装了 Java(至少是 1.6 版)和 cURL。)
  因为我运行 Ubuntu(Intrepid 版),所以使用 apt 实用程序获取 Hadoop 发行版。这个过程非常简单,我可以获取二进制包,而不需要下载并构建源代码。首先,告诉 apt Cloudera 站点的信息。然后,在 /etc/apt/sources.list.d/cloudera.list 中创建一个新文件并添加以下文本:
deb http://archive.cloudera.com/debian intrepid-cdh3 contrib  deb-src http://archive.cloudera.com/debian intrepid-cdh3 contrib
  如果您运行 Jaunty 或其他版本,只需把 intrepid 替换为您的版本名(当前支持 Hardy、Intrepid、Jaunty、Karmic 和 Lenny)。
  接下来,从 Cloudera 获取 apt-key 以检查下载的包:
$ curl -s http://archive.cloudera.com/debian/archive.key | \  sudo apt-key add - sudo apt-get update
  然后,安装采用伪分布式配置的 Hadoop(所有 Hadoop 守护进程在同一个主机上运行):
  $ sudo apt-get install Hadoop-0.20-conf-pseudo
  $
  注意,这个配置大约 23MB(不包括 apt 可能下载的其他包)。这个配置非常适合体验 Hadoop 以及了解它的元素和界面。
  最后,我设置了不需要密码的 SSH。如果打算使用 ssh localhost 并请求密码,就需要执行以下步骤。我假设这是专用的 Hadoop 机器,因为这个步骤对安全性有影响(见清单 1)。
  清单 1. 设置不需要密码的 SSH
  $ sudo su -
  # ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  # cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  最后,需要确保主机上有供 datanode使用的足够存储空间(缓存)。存储空间不足会导致系统表现异常(比如出现无法把数据复制到节点的错误)。
  启动 Hadoop
  现在可以启动 Hadoop 了,这实际上要启动每个 Hadoop 守护进程。但是,首先使用 Hadoop 命令对Hadoop File System (HDFS) 进行格式化。Hadoop 命令有许多用途,稍后讨论其中一部分。
  首先,请求 namenode 对 DFS 文件系统进行格式化。在安装过程中完成了这个步骤,但是了解是否需要生成干净的文件系统是有用的。
Hadoop-0.20 namenode -format
  在确认请求之后,文件系统进行格式化并返回一些信息。接下来,启动 Hadoop 守护进程。Hadoop 在这个伪分布式配置中启动 5 个守护进程:namenode、secondarynamenode、datanode、jobtracker 和 tasktracker。在启动每个守护进程时,会看到一些相关信息(指出存储日志的位置)。每个守护进程都在后台运行。图 1 说明完成启动之后伪分布式配置的架构。
   DSC0000.gif
  "Cache 2
  "Control 1
  "Examples 1
  "Has 7
  "Inter-CPU 1
  "LOAD 1
  "LOCK" 1
  "Locking 1
  "Locks 1
  "MMIO 1
  "Pending 5
  #
[/td][/tr][/table]  还可以使用 Hadoop-0.20 实用程序从 HDFS 中提取文件(见清单 8)。只需使用 get 实用程序(它与前面在 HDFS 中写文件所用的 put 相似)。对于 get 操作,指定 HDFS 中要提取的文件(来自 output 子目录)和在本地文件系统中要写的文件 (output.txt)。
  清单 8. 从 HDFS 提取输出
  # Hadoop-0.20 fs -get output/part-r-00000
  output.txt
  # cat output.txt | head -5
  != 1
  "Atomic 2
  "Cache 2
  "Control 1
  "Examples 1
  #
  我们再来看一个示例,它使用相同的 JAR,但是目的不同(在这里要试验并行的 grep)。对于这个测试,仍然使用现有的输入文件,但是要删除 output 子目录以便在测试时重新创建它:
  # Hadoop-0.20 fs -rmr output
  Deleted hdfs://localhost/user/root/output
  接下来,请求用于执行 grep 的 MapReduce 作业。在这种情况下,并行执行 grep(映射),然后组合 grep 的结果(缩减)。清单 9 给出这个使用模型的输出(为了简短,这里删除了一些输出)。注意,这里的命令请求是一个 grep,它从 input 子目录获取输入,把结果放在 output 子目录中。最后一个参数是要搜索的字符串(在这里是 'kernel')。
  清单 9. 执行单词搜索计数的 MapReduce 作业 (grep)
  # Hadoop-0.20 jar /usr/lib/Hadoop/
  Hadoop-0.20.2+228-examples.jar \
  grep input output 'kernel'
  10/04/30 09:22:29 INFO mapred.FileInputFormat: Total input paths to process : 2
  10/04/30 09:22:30 INFO mapred.JobClient: Running job: job_201004291628_0010
  10/04/30 09:22:31 INFO mapred.JobClient: map 0% reduce 0%
  10/04/30 09:22:42 INFO mapred.JobClient: map 66% reduce 0%
  10/04/30 09:22:45 INFO mapred.JobClient: map 100% reduce 0%
  10/04/30 09:22:54 INFO mapred.JobClient: map 100% reduce 100%
  10/04/30 09:22:56 INFO mapred.JobClient: Job complete: job_201004291628_0010
  10/04/30 09:22:56 INFO mapred.JobClient: Counters: 18
  10/04/30 09:22:56 INFO mapred.JobClient: Job Counters
  10/04/30 09:22:56 INFO mapred.JobClient: Launched reduce tasks=1
  10/04/30 09:22:56 INFO mapred.JobClient: Launched map tasks=3
  10/04/30 09:22:56 INFO mapred.JobClient: Data-local map tasks=3
  10/04/30 09:22:56 INFO mapred.JobClient: FileSystemCounters
  10/04/30 09:22:56 INFO mapred.JobClient: FILE_BYTES_READ=57
  10/04/30 09:22:56 INFO mapred.JobClient: HDFS_BYTES_READ=113144
  10/04/30 09:22:56 INFO mapred.JobClient: FILE_BYTES_WRITTEN=222
  10/04/30 09:22:56 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=109
  ...
  10/04/30 09:23:14 INFO mapred.JobClient: Map output bytes=15
  10/04/30 09:23:14 INFO mapred.JobClient: Map input bytes=23
  10/04/30 09:23:14 INFO mapred.JobClient: Combine input records=0
  10/04/30 09:23:14 INFO mapred.JobClient: Map output records=1
  10/04/30 09:23:14 INFO mapred.JobClient: Reduce input records=1
  #
  作业完成之后,检查 output 目录,找到结果文件,然后通过执行文件系统 cat 操作查看其内容(见清单 10)。
  清单 10. 检查 MapReduce 作业的输出
  # Hadoop-0.20 fs -ls output
  Found 2 items
  drwxr-xr-x - root supergroup 0 2010-04-30 09:22 /user/root/output/_logs
  -rw-r--r-- 1 root supergroup 10 2010-04-30 09:23 /user/root/output/part-00000
  # Hadoop-0.20 fs -cat output/part-00000
  17 kernel
  #
  基于 Web 的界面
  您已经知道如何检查 HDFS 了,但是如果要寻找 Hadoop 的操作的相关信息,会发现 Web 界面很有用。位于 Hadoop 集群最上层的是 namenode,它管理 HDFS。可以通过 http://localhost:50070 查看文件系统的高层信息(比如可用空间、已用空间和可用的 datanode)以及正在运行的作业。可以通过 http://localhost:50030 深入检查 jobtracker(作业状态)。注意,在这两种情况下都引用 localhost,因为所有守护进程都在同一个主机上运行。
  更进一步
  本文讨论了一个简单的(伪分布式)Hadoop 集群的安装和初始配置。在这里,我选用 Cloudera 的Hadoop 发行版是因为它简化了 Hadoop 的安装和初始配置。可以在 apache.org 找到许多 Hadoop 发行版(包括源代码)。更多信息见 参考资料。
  但是,如果缺少硬件资源,无法扩展 Hadoop 集群以满足自己的需要,那么应该怎么办?由于 Hadoop非常流行,可以很方便地在云计算基础设施中使用预构建的 Hadoop VM 和租用的服务器运行它。Amazon 在 Amazon Elastic Compute Cloud (Amazon EC2) 中提供 Amazon Machine Image (AMI) 和计算资源。另外,Microsoft 最近宣布将在它的 Windows® Azure Services Platform 中支持 Hadoop
  
更多信息请查看
 java进阶网
 
http://www.javady.com

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312344-1-1.html 上篇帖子: hadoop-1.2.1源代码编译及生成eclipse插件 下篇帖子: Hadoop报错“could only be replicated to 0 nodes, instead of 1” .
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表