伪分布式hadoop集群搭建

本文详细介绍了Hadoop的配置过程,包括hadoop-env.sh、core-site.xml、hdfs-site.xml等关键文件的设置,以及如何配置YARN的yarn-site.xml和mapred-site.xml。同时,文中还提供了启动和管理Hadoop与YARN服务的命令,深入解析了Namenode的启动流程和常见错误处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hdfs的配置

  • hadoop-env.sh文件
    export JAVA_HOME=/opt/modules/jdk1.7.0_67
  • core-site.xml文件
    <!--HDFS集群访问入口地址,写上namenode的主机名-->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://namenode的主机名:8020</value>
        </property>
    <!--声明存放数据的目录-->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/opt/modules/hadoop-2.5.0-cdh5.3.6/data</value>
        </property>
  • hdfs-site.xml文件


    dfs.replication
    1

    数据块的副本数不能大于 datanode的节点数量
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
  • slaves文件
    • 每行一个写上datanode的主机名
      ** 声明哪些服务器是datanode
      ** 每行一个主机名

格式化文件系统:
bin/hdfsnamenodeformatbin/hdfsnamenode−format启动服务: sbin/hadoop-daemon.sh start namenode
$ sbin/hadoop-daemon.sh start datanode

hdfs命令
  • 查看hdfs帮助:bin/hdfs dfs
  • 列出hdfs文件:bin/hdfs dfs -ls
  • 查看文件:bin/hdfs dfs -cat 文件url

yarn配置

  • yarn-env.sh mapred-env.sh文件:
    export JAVA_HOME=/opt/modules/jdk1.7.0_67

  • yarn-site.xml文件


    yarn.nodemanager.aux-services
    mapreduce_shuffle


    yarn.resourcemanager.hostname
    主机名

  • mapred-site.xml文件


    mapreduce.framework.name
    yarn

  • 启动yarn
    sbin/yarndaemon.shstartresourcemanagersbin/yarn−daemon.shstartresourcemanager sbin/yarn-daemon.sh start nodemanager

yarn命令
  • 查看yarn帮助:bin/yarn
  • 运行jar包:bin/yarn jar jar包位置 自定义工程名(最好写wordcount不然可能会报错,不知道为什么) 数据输入url 数据输出url

日志服务器的配置

  • 配置日志服务器:
    • yarn-site.xml文件
    <!--启用日志聚合功能-->
    <property>
            <name>yarn.log-aggregation-enable</name>
            <value>true</value>
        </property>
    <!--日志保存时间-->
    <property>
            <name>yarn.log-aggregation.retain-seconds</name>
            <value>86400</value>
        </property>
  • mapred-site.xml文件
    <!--进程通信-->
    <property>
            <name>mapreduce.jobhistory.address</name>
            <value>bigdata1.com:10020</value>
        </property>

    <!--客户端访问入口-->
    <property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>bigdata1.com:19888</value>
        </property>
启动historyserver服务

$ sbin/mr-jobhistory-daemon.sh start historyserver

namenode的启动过程
  • 启动namenode
    *读取fsimage生成内存中元数据镜像,加载到内存中
    读取editlog日志文件,加载到内存上使当前内存中元数据信息与上次关闭系统是保持一致(每次重新启动fsimage都会与editlog进行自动合并,并不需要Secondary NameNode),然后在磁盘上生成一份同内存中元数据镜像相同的fsimage文件,
    同时生成一个新的null的editlog文件用来记录以后的hdfs文件系统的更改

启动成功后:clinent对hdfs进行操作,在没有SecondaryNmaeNode守护进程的情况下,所有对hdfs的操作都将记录到editlog文件,这样会造成巨大的editlog文件,危害时下次启动namenode会非常的漫长;在启动SecondaryNameNode守护进程后,没当满足一定的触发条件,SecondaryNameNode都会拷贝namenode的fsimage和editlog文件到自己的目录下,首先将fsimage加载到内存中,然后加载editlog文件到内存中合并fsimage和editlog文件为一个新的fsimage文件,然后将新的fsimage文件拷贝会namenode目录下,并且声称新的editlog文件用于dfs的更改*

相关错误汇总

格式化报错处理
  • 1.修改元数据,使其统一
    查看datanode的 cd /opt/modules/hadoop-2.5.0-cdh5.3.6/data/dfs/data/current/BP-1120641359-192.168.65.119-1532430810525/current
    下的VARSION文件中的
    [hadoop@master01 current]vi VERSION  
        namespaceID=1638354450   #元数据ID  
    查看namenode元数据ID  
        cd /opt/modules/hadoop-2.5.0-cdh5.3.6/data/dfs/name/current  
        [hadoop@master01 current]
    vi VERSION      namespaceID=1638354450   #元数据ID  查看namenode元数据ID      cd /opt/modules/hadoop-2.5.0-cdh5.3.6/data/dfs/name/current      [hadoop@master01 current]
    vi VERSION
    namespaceID=1638354450 #元数据ID
    把namenode与datanode的元数据ID修改一致

  • 2.直接删除hadoop下的data文件夹重新格式化
    $bin/hdfs namenode -format

错误IOException
  • 错误信息
java.io.IOException: Failed on local exception: java.net.SocketException: Unresolved address; Host Details : local host is: "node-1"; destination host is: (unknown):0;
  • 解决办法:将hosts中ip地址放在前面, 然后删除data重新格式化

MapReduce

任务流程分析
  • 逻辑切片:逐步遍历待处理的数据目录下的文件
    • 1.txt 150M 2.txt 80M
    • split1–>1.txt 0-128M split2–>1.txt 128M-150M split3–>2.txt-80M
  • 切片的个数决定了本次mr程序启动多少个maptask
  • 然后TextInputFormat组件进行对maptask进行读取,以行为单位,读取结果为K,V对K:起始偏移量V:这一行内容
  • 把k,v,context传给map方法
  • context.write(k1,v1)写到内存缓冲区(快)
  • 内存溢出到磁盘
  • 根据reducetask个数进行分区,默认按照hashcode进行分区(分区个数job.setNumReduceTask)
  • 在每个分区内根据键值对进行排序
  • 选(局部聚合combiner处理,对键相同的会调用一次reduce方法)
  • reduce拉去属于自己分区的数据 ,按照key是否相同作为一组来调用我们重写的reduce方法
  • context.write(k2,v2)
  • 使用TestOutputFormat组件输出到指定路径(hdfs上)
### 在 CentOS 7 上搭建 Hadoop 伪分布式集群 #### 准备工作 在开始配置之前,需确保已安装 Java 开发环境 (JDK),并设置好 JAVA_HOME 环境变量。可以通过命令 `java -version` 和 `echo $JAVA_HOME` 来验证 JDK 是否正确安装以及环境变量是否生效。 #### 下载与解压 Hadoop 下载最新版本的 Hadoop 并将其解压缩至指定目录。例如: ```bash wget https://downloads.apache.org/hadoop/common/stable/hadoop-3.3.0.tar.gz tar -xzvf hadoop-3.3.0.tar.gz -C /usr/local/ ln -s /usr/local/hadoop-3.3.0 /usr/local/hadoop ``` #### 配置环境变量 编辑 `/etc/profile` 文件,在其中添加如下内容以使系统能够识别 Hadoop 命令: ```bash export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin ``` 执行 `source /etc/profile` 更新当前会话中的环境变量[^1]。 #### 编辑核心配置文件 进入 Hadoop 的配置目录,并修改必要的配置文件: ##### 修改 `hadoop-env.sh` 打开 `hadoop-env.sh` 文件,找到 `export JAVA_HOME=` 行并将它指向实际的 JDK 安装路径。例如: ```bash export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 ``` ##### 修改 `core-site.xml` 此文件用于定义 HDFS 中的核心属性。以下是典型的配置示例: ```xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> ``` ##### 修改 `hdfs-site.xml` 在此文件中设定 NameNode 和 DataNode 的存储位置以及其他参数。常见的配置项包括副本数量等: ```xml <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.name.dir</name> <value>/home/user/hadoop/data/namenode</value> </property> <property> <name>dfs.data.dir</name> <value>/home/user/hadoop/data/datanode</value> </property> </configuration> ``` ##### 修改 `mapred-site.xml` 如果默认不存在,则复制模板文件后进行调整。主要目的是指明 MapReduce 使用 YARN 而不是本地模式运行作业。 ```xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> ``` ##### 修改 `yarn-site.xml` YARN 是资源管理器组件,其配置决定了节点间通信方式及调度策略。 ```xml <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>localhost</value> </property> </configuration> ``` #### 启动服务 完成上述所有更改之后,可以依次启动各个子模块的服务进程。具体操作如下所示: ```bash # 格式化 namenode hdfs namenode -format # 启动 hdfs start-dfs.sh # 启动 yarn start-yarn.sh ``` 通过浏览器访问 http://localhost:9870 可查看 HDFS Web UI;而 http://localhost:8088 则展示 ResourceManager 页面状态信息。 #### 测试集群功能 上传测试数据集到 HDFS 上面并通过简单的 WordCount 实验来检验整个流程是否正常运作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值