构建Hadoop伪分布式环境

  这篇文章介绍Hadoop伪分布式环境的搭建过程与原理,是个人的学习总结,以纪念在各个步骤中遇到的麻烦、踩过的坑!

  这篇笔记包含这样几个内容:

  • 配置伪分布式环境

  • 运行一个简单的作业

  • 可能遇到的问题及解决办法

配置伪分布式环境

  本文中的内容基于Hadoop2,即MapReduce作业运行在Yarn平台之上。

  • 打通SSH,实现无密码登陆
      由于Hadoop控制脚本需要登陆到集群中的Slave节点执行操作(比如,启动守护进程),如果每一次登录都输入密码,显然不是个好办法。集群中的做法是设定一对秘钥,集群中的节点都能共享。在伪分布式环境下,采用更简单的做法,设定一个空的密码就行了。
      需要执行下面的Shell命令:
$ cd ~/.ssh/
$ ssh-keygen -t rsa  # 空口令
$ cat id_rsa.pub >> authorized_keys  # 加入授权
  • Hadoop配置文件
      我们会在 /hadoop/ect/hadoop 目录下看到一大堆xml配置文件,我们需要关注和修改的有下面这么几个 :
      1. etc/hadoop/core-site.xml
      这个是Hadoop的核心配置文件,默认是空的,是Hadoop集群的全局配置,我们在配置伪分布式环境的时候需要这样简单的设置 :
<configuration><property><name>hadoop.tmp.dir</name><value>file:/usr/local/hadoop/tmp</value></property><property><name>fs.defaultFS</name><value>hdfs://localhost:8020</value></property>
</configuration>

  2. etc/hadoop/hdfs-site.xml
  根据名字,我们知道它是用来配置分布式操作系统的,包含了副本的个数,namenode和datanode的位置,由于,伪分布式环境仍然只是一台机器,所以,我们需要把副本的个数限制为1,配置如下:

<configuration><property><name>dfs.replication</name><value>1</value></property><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/tmp/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/tmp/dfs/data</value></property>
</configuration>

  3. etc/hadoop/mapred-site.xml
  虽然在Yarn平台上,不再有JobTracker和TaskTracker了,但是,我们仍然需要配置mapred-site,当然,不再是指定原先的那两个守护进程的host了,而是设定MapReduce的运行平台,我们使用的是Yarn平台,那么,按照下面这样设置:

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>

  4. etc/hadoop/yarn-site.xml
  Yarn平台上设计了资源管理器和节点管理器,我们在这个配置文件中就需要去配置,另外,由于没有了TaskTracker,那么map的输出传递到reduce就需要一个辅助的service – mapreduce_shuffle, 配置如下:

<configuration><!-- 指定ResourceManager节点的主机名 --><property><name>yarn.resourcemanager.hostname</name><value>localhost</value></property><!-- reducer获取数据的方式 --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
</configuration>
  • 开启守护进程
      我们需要这个几个守护进程 :
      NameNode
      DataNode
      SecondaryNameNode
      NodeManager
      ResourceManager

NameNode需要我们自己手动的进行格式化操作,DataNode则不需要,在初始化阶段会自动创建,我们需要执行

/hadoop/bin/hdfs namenode -format

接下来,启动分布式文件系统HDFS:

/hadoop/sbin/start-dfs.sh

然后,开启Yarn管理平台:

/hadoop/sbin/start-yarn.sh

  到这里,我们的伪分布式环境就搭建好了,下面,我们运行一个简单的作业,这里只是叙述执行方法,并不对作业本身进行描述。

运行一个简单的作业

  最好使用一个自己比较熟悉的IDE,并安装合适的构建工具插件,我这里使用的IDE是Intellij,构建工具是Maven。之后,我们编写Map和Reduce程序,并写好作业驱动程序,然后,利用构建工具打包,比如,Maven的方式:

mvn -U clean package

  之后,执行hadoop命令运行作业:

hadoop jar {your_job}.jar {your_package}.ClassName {target}/input {target}/output

  执行了这条语句之后,我们应该能看到类似下面的进度和计数器输出:

15/10/13 15:15:01 INFO mapreduce.Job: Running job: job_1444655578016_0003
15/10/13 15:15:07 INFO mapreduce.Job: Job job_1444655578016_0003 running in uber mode : false
15/10/13 15:15:07 INFO mapreduce.Job:  map 0% reduce 0%
15/10/13 15:15:13 INFO mapreduce.Job:  map 100% reduce 0%
15/10/13 15:15:18 INFO mapreduce.Job:  map 100% reduce 50%
15/10/13 15:15:19 INFO mapreduce.Job:  map 100% reduce 100%
15/10/13 15:15:19 INFO mapreduce.Job: Job job_1444655578016_0003 completed successfully
15/10/13 15:15:19 INFO mapreduce.Job: Counters: 49File System CountersFILE: Number of bytes read=667FILE: Number of bytes written=347181FILE: Number of read operations=0FILE: Number of large read operations=0FILE: Number of write operations=0HDFS: Number of bytes read=524HDFS: Number of bytes written=1071HDFS: Number of read operations=9HDFS: Number of large read operations=0HDFS: Number of write operations=4Job Counters Launched map tasks=1Launched reduce tasks=2Data-local map tasks=1Total time spent by all maps in occupied slots (ms)=3229Total time spent by all reduces in occupied slots (ms)=5230Total time spent by all map tasks (ms)=3229Total time spent by all reduce tasks (ms)=5230Total vcore-seconds taken by all map tasks=3229Total vcore-seconds taken by all reduce tasks=5230Total megabyte-seconds taken by all map tasks=3306496Total megabyte-seconds taken by all reduce tasks=5355520Map-Reduce FrameworkMap input records=41Map output records=41Map output bytes=573Map output materialized bytes=667Input split bytes=116Combine input records=0Combine output records=0Reduce input groups=36Reduce shuffle bytes=667Reduce input records=41Reduce output records=41Spilled Records=82Shuffled Maps =2Failed Shuffles=0Merged Map outputs=2GC time elapsed (ms)=66CPU time spent (ms)=1950Physical memory (bytes) snapshot=598843392Virtual memory (bytes) snapshot=2589491200Total committed heap usage (bytes)=603979776Shuffle ErrorsBAD_ID=0CONNECTION=0IO_ERROR=0WRONG_LENGTH=0WRONG_MAP=0WRONG_REDUCE=0File Input Format Counters Bytes Read=408File Output Format Counters Bytes Written=1071

可能遇到的问题及解决办法

  • 执行编译好的 class 文件报错
      这中执行作业的方式,在local环境下是可以的,但是在集群环境下(伪分布式),我们需要把作业打成 jar 包,之后才能运行 hadoop 命令,hadoop 会把你的 jar 包等资源上传到分布式文件系统之中(这些对客户端而言都是透明的),作业才能够“分布式”的执行。

  • 连接不到yarn平台之类的错误
      这种错误一般是配置mapred-site.xml的运行框架为yarn之后,没有start-yarn.sh,即没有在执行环境中开启Yarn资源管理平台,只需要运行下控制脚本就可以了。

  • 输出目录已经存在
      这个在运行任务的最开始阶段就会报错,因为,默认的MapReduce框架是不会覆盖之前的输出目录的,简单的做法是在作业中判断这个目录是否存在,如果存在直接删除,如下所示:

Path outputPath = new Path(output);
outputPath.getFileSystem(conf).delete(outputPath, true);

附:
  有些时候为了方便调试,我们会在本地运行MapReduce作业,那么,来回的修改配置文件肯定不是什么好事,我们这里采用《Hadoop权威指南》中的多配置文件方法:
  我们在etc/hadoop/目录下新建配置文件 : hadoop-local.xml,填写如下的内容 :

<?xml version="1.0"?>
<configuration><property><name>fs.default.name</name><value>file:///</value></property><property><name>mapreduce.framework.name</name><!-- 包含三种配置 : local, classical, yarn --><value>local</value></property>
</configuration>

  之后,想在本地运行作业的时候就可以使用如下的shell命令:

hadoop ${class_name} -conf ${conf_name} ${input_file} ${out_file}

  鉴于本人水平有限,可能会在写作过程中出现错误,感谢指正!
 

构建Hadoop伪分布式环境相关推荐

  1. 搭建 Hadoop 伪分布式环境

    软硬件环境 CentOS 7.2 64 位 OpenJDK- 1.8 Hadoop- 2.7 关于本教程的说明 云实验室云主机自动使用 root 账户登录系统,因此本教程中所有的操作都是以 root ...

  2. Windows 7 64位系统上搭建Hadoop伪分布式环境(很详细)

    在开始配置前,我们先了解Hadoop的三种运行模式. Hadoop的三种运行模式 独立(或本地)模式:无需运行任何守护进程,所有程序都在同一个JVM上执行.在独立模式下测试和调试MapReduce程序 ...

  3. 本地搭建Hadoop伪分布式环境之一:虚拟机的安装

    作者:GISer_Leo 好久没有写技术文档了,最近都在做项目:今日抽空搭建下Hadoop伪分布式环境: 个人笔记本:win8.1系统,内存32G,i7,硬盘1.5T: 准备软件:1.VMware-w ...

  4. Hadoop学习总结(3)——Hadoop伪分布式环境搭建

    一.Hadoop运行模式 Local (Standalone) Mode 本地模式 适用于开发人员测试Debug 使用本地文件系统 Pseudo-Distributed Mode 伪分布式模式 适用于 ...

  5. hadoop伪分布式环境的搭建配置整理

    本篇是整理了搭建hadoop环境需要的一些配置和步骤,其中有些配置是完全分布式的时候才用的,这里注意需要注意. linux系统设置 1,配置或者搭建集群过程中,全部用root账户登入 2,修改主机名方 ...

  6. 本地搭建Hadoop伪分布式环境之四:开启搭建Hadoop2.4.0之旅

    1.准备软件  64位下载包下载:     hadoop-2.4.0-64bit.tar.gz 百度网盘: 链接: http://pan.baidu.com/s/1hqEDe2S password: ...

  7. Hadoop伪分布式环境搭建

    前期准备 必须得准备好jdk,且配置好环境变量(点击查看jdk的安装与配置). 设置sshd免密钥登录 1.执行命令,生成密钥: [root@node1 .ssh]# ssh-keygen -t ds ...

  8. Hadoop入门基础教程 Hadoop之伪分布式环境搭建

    伪分布式模式即单节点集群模式,所有的守护进程都运行在同一台机器上.这种模式下增加了代码调试功能,可以查看内存.HDFS文件系统的输入/输出,以及与其他守护进程交互.以Hadoop用户远程登录K-Mas ...

  9. “化鲲为鹏,我有话说”如何用鲲鹏弹性云服务器部署《Hadoop伪分布式》

    1.安装环境和说明 CentOS 7.6 64 OpenJDK- 1.8 Hadoop- 3.0 2.安装 SSH 客户端 yum install openssh-clients openssh-se ...

最新文章

  1. jQuery-Ajax
  2. 人工智能实践:TensorFlow笔记学习(一)—— 人工智能概述
  3. mysql保留2位小数字段如何设置 浮点数
  4. 转:什么是即时编译(JIT)!?OpenJDK HotSpot VM剖析
  5. 图解使用PowerTool对Windows内核做初步研究探索
  6. 智慧树python答案内蒙古科技大学_2020年_知到_打开企业形象设计之门(内蒙古科技大学)_答案护理人文修养_智慧树_期末答案...
  7. 如何通过自学找到一份开发的工作?
  8. 《西线无战事》:合上书的那一刻:只想痛哭
  9. 如何通过Graph+AI的方法打造高精度风控模型
  10. MySQL 删除数据
  11. CSS 处理溢出 overflow属性
  12. 允许保存文件 html5,html5 保存文件
  13. 互联网之道,看电商的数据化管理方案
  14. 理解[].forEach.call()
  15. 《java 程序设计教程》:毕
  16. TypeError: Cannot set property ‘styles‘ of undefined
  17. ipa包安装到苹果手机中的几种方式——Qt for IOS
  18. c++报错:表达式必须含有常量值
  19. ES:java.nio.file.AccessDeniedException: /opt/shan/es/config/elasticsearch.keystore
  20. IIS URL 重写

热门文章

  1. Centos Ftp
  2. Lucene in action 笔记 analysis篇
  3. storm集群和单点安装
  4. [转]SQL SERVER – Find Most Expensive Queries Using DMV
  5. .NET(C#):使用Win32Exception类型处理Win32错误代码
  6. 我的博客今天2岁104天了,我领取了…
  7. JS调用PageMethods(转)
  8. 企业网络项目PT模拟
  9. DeepFake疑遭审查
  10. Session 存储方式