构建Hadoop伪分布式环境

构建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: 49
    File System Counters
        FILE: Number of bytes read=667
        FILE: Number of bytes written=347181
        FILE: Number of read operations=0
        FILE: Number of large read operations=0
        FILE: Number of write operations=0
        HDFS: Number of bytes read=524
        HDFS: Number of bytes written=1071
        HDFS: Number of read operations=9
        HDFS: Number of large read operations=0
        HDFS: Number of write operations=4
    Job Counters
        Launched map tasks=1
        Launched reduce tasks=2
        Data-local map tasks=1
        Total time spent by all maps in occupied slots (ms)=3229
        Total time spent by all reduces in occupied slots (ms)=5230
        Total time spent by all map tasks (ms)=3229
        Total time spent by all reduce tasks (ms)=5230
        Total vcore-seconds taken by all map tasks=3229
        Total vcore-seconds taken by all reduce tasks=5230
        Total megabyte-seconds taken by all map tasks=3306496
        Total megabyte-seconds taken by all reduce tasks=5355520
    Map-Reduce Framework
        Map input records=41
        Map output records=41
        Map output bytes=573
        Map output materialized bytes=667
        Input split bytes=116
        Combine input records=0
        Combine output records=0
        Reduce input groups=36
        Reduce shuffle bytes=667
        Reduce input records=41
        Reduce output records=41
        Spilled Records=82
        Shuffled Maps =2
        Failed Shuffles=0
        Merged Map outputs=2
        GC time elapsed (ms)=66
        CPU time spent (ms)=1950
        Physical memory (bytes) snapshot=598843392
        Virtual memory (bytes) snapshot=2589491200
        Total committed heap usage (bytes)=603979776
    Shuffle Errors
        BAD_ID=0
        CONNECTION=0
        IO_ERROR=0
        WRONG_LENGTH=0
        WRONG_MAP=0
        WRONG_REDUCE=0
    File Input Format Counters
        Bytes Read=408
    File 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}


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

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-07 21:19:36

构建Hadoop伪分布式环境的相关文章

Hadoop伪分布式环境配置

Step1:关闭防火墙   service iptables stop[status]  service iptables status  chkconfig --list |grep iptables  chkconfig iptables offStep2:修改IP   (重启网卡:service network restart)Step3:修改hostname  /etc/hostsStep4:SSH免密码登陆  产生密钥(~/.ssh中)ssh-keygen -t rsa   cd ~/

Hadoop初体验:快速搭建Hadoop伪分布式环境

0.前言 本文旨在使用一个全新安装好的Linux系统从0开始进行Hadoop伪分布式环境的搭建,以达到快速搭建的目的,从而体验Hadoop的魅力所在,为后面的继续学习提供基础环境. 对使用的系统环境作如下说明: 操作系统:CentOS 6.5 64位 主机IP地址:10.0.0.131/24 主机名:leaf 用户名:root hadoop版本:2.6.5 jdk版本:1.7 可以看到,这里直接使用root用户,而不是按照大多数的教程创建一个hadoop用户来进行操作,就是为了达到快速搭建Had

阿里云服务器centos7.3下搭建hadoop伪分布式环境

一.软硬件环境 CentOS 7.2 64位 OpenJDK-1.8.0 Hadoop-2.7 二.安装SSH客户端 安装ssh: yum install openssh-clients openssh-server 安装完成后,使用以下命令测试: ssh localhost输入 root 账户的密码,如果可以正常登录,则说明SSH安装没有问题. 配置SSH免key登陆 hadoop是一个分布式系统,节点间通过ssh通信,为了避免在连接过程中人工输入密码,需要进行ssh免key登陆的配置,由于本

一、Hadoop伪分布式环境搭建

Hadoop 2.x伪分布式环境搭建步骤: 1.修改hadoop-env.sh.yarn-env.sh.mapred-env.sh 方法:使用notepad++(beifeng用户)代开这三个文件 添加代码:export JAVA_HOME=/opt/modules/jdk1.7.0_67 2.修改core-site.xml.hdfs-site.xml.yarn-site.xml.mapred-site.xml配置文件 1)修改core-site.xml <configuration> <

《OD大数据实战》hadoop伪分布式环境搭建

一.安装并配置Linux 8. 使用当前root用户创建文件夹,并给/opt/下的所有文件夹及文件赋予775权限,修改用户组为当前用户 mkdir -p /opt/modules mkdir -p /opt/software mkdir -p /opt/datas mkdir -p /opt/tools chmod 775 /opt/* chown beifeng:beifeng /opt/* 最终效果如下: [[email protected]02 opt]$ pwd /opt [[email

[转]搭建Hadoop伪分布式环境

https://my.oschina.net/MyHeaven1987/blog/1821509 http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html#Pseudo-Distributed_Operation hadoop下载 Hadoop官方下载地址: Hadoop下载地址,目前最新的稳定版本为2.9.1. hadoop配置 java安装路径指定,在hadoop解压路

Hadoop学习笔记之Hadoop伪分布式环境搭建

搭建为伪分布式Hadoop环境 1.宿主机(Windows)与客户机(安装在虚拟机中的Linux)网络连接. a) Host-only 宿主机与客户机单独组网: 好处:网络隔离: 坏处:虚拟机和其他服务器之间不能通讯: b) Bridge 桥接 宿主机与客户机在同一个局域网中. 好处:窦在同一个局域网,可以互相访问: 坏处:不完全. 2.Hadoop的为分布式安装步骤 a) 设置静态IP 在centos下左面上右上角图标右键修改: 重启网卡service network restart; 验证:

搭建hadoop伪分布式环境

伪分布式就是只有一台机器,既是namenode又是datanode.一台阿里云服务器(centos)即可完成. Java环境 首先需要安装Java环境,下载jdk的安装包,解压到/usr/java/,然后配置环境变量. vim /etc/profile #set java environment export JAVA_HOME=/usr/java/jdk1.8.0_151 export PATH=$JAVA_HOEM/bin:$PATH export CLASSPATH=.:$JAVA_HOM

hadoop伪分布式环境搭建

1.准备Linux环境 1.0点击VMware快捷方式,右键打开文件所在位置 -> 双击vmnetcfg.exe -> VMnet1 host-only ->修改subnet ip 设置网段:192.168.1.0 子网掩码:255.255.255.0 -> apply -> ok 回到windows --> 打开网络和共享中心 -> 更改适配器设置 -> 右键VMnet1 -> 属性 -> 双击IPv4 -> 设置windows的IP:1