各机器及角色信息:

共10台机器,hostname与ip地址映射在此不做赘述。此为模拟开发环境安装,所以不考虑将NameNode和SecondaryNameNode安装在同一台机器。

节点

角色

namenode01 namenode
namenode02 secondarynamenode
datanode01 datanode
datanode02 datanode
datanode03 datanode
datanode04 datanode
datanode05 datanode
datanode06 datanode
datanode07 datanode
datanode08 datanode

步骤:

因为hadoop依赖JDK环境,必须先进行JDK安装,步骤另行参考资料。此处默认已经安装过JDK环境,并做过环境变量配置。

一、设置各节点ssh免密码登录

1.进入到当前用户的.ssh目录下

cd ~/.ssh

2.执行ssh公钥生成命令,出现确认选项直接回车即可

ssh-keygen –t rsa

3.生成:id-rsa、id-rsa.pub两个文件,执行命令将.pub文件放入到认证文件中

cat id-rsa.pub >> authorized_keys

自此本机的ssh免密码登录已经设置完成,可以执行命令:ssh localhost 进行验证,不需密码直接登入即为成功。

4.剩下9台机器如法炮制。都完成本机ssh-免密码登录之后,将各节点的authorized_keys拷贝汇总到一台机器,分别追加到authorized_keys中。此处是将nn02以及dn0*全部拷贝到nn01上,执行:

cat authorized_keys_* >> authorized_keys

5.此时所有节点都可对nn01进行免密码登录,然后将nn01的authorized_keys拷贝到其余节点,覆盖原来的authorized_keys即可。

避免一台一台复制,可以写一个简单的脚本,实现群体复制,代码如下供参考:(脚本名称:scpFile 使用方法:脚本第一个参数表示源文件,第二个参数是要拷贝到其余节点的位置路径,ex: ./scpFile ~/.ssh/authorized_keys ~/.ssh/ )

#/bin/bash

# HostName which is copying files to.
ipNum="namenode02 datanode01 datanode02 datanode03 datanode04 datanode05 datanode06 datanode07 datanode08" # Path of source file
#src="/home/sys/hadoop-2.6.1/etc/hadoop/hadoop-env.sh"
src=$ # Destination of the file moved
#dest="/home/sys/hadoop-2.6.1/etc/hadoop/"
dest=$ # Execute copying operation
for next in ${ipNum}
do
# echo ${next}
scp -r ${src} root@$next:${dest}
echo "Copy file to root@${next}:${dest} is done!~"
done

二、关闭防火墙

1.暂时性关闭防火墙

service iptables stop

2.设置开机不启动防火墙

chkconfig iptables off

3.查看防火墙状态

service iptables status

三、解压hadoop包,并修改配置

1.解压hadoop压缩包,指定到 /home/sys/ 目录

tar –zxvf hadoop-2.6..tar.gz –C /home/sys/

2.增加hadoop的环境变量到 /etc/profile 中:

export HADOOP_HOME=/home/sys/hadoop-2.6.
export PATH=.:$HADOOP_HOME/bin:$PATH

3.修改配置文件,共8个(hadoop-env.sh、yarn-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、masters、slaves)

cd $HADOOP_HOME/etc/hadoop/

在hadoop-env.sh和yarn-env.sh中指定 JAVA_HOME:

export JAVA_HOME=/home/sys/jdk1..0_65

编辑core-site.xml,增加如下内容:

         <!-- hdfs的访问名称及端口 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode01:9000</value>
<description>The name of the default file system.</description>
</property> <!-- 临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/tmp</value>
<description>A base for other temporary directories.</description>
</property>

编辑hdfs-site.xml,增加如下内容:

        <property>
<name>dfs.namenode.name.dir</name>
<value>/home/dfs/name</value>
<description>
Directory where HDFS name node store the name table(fsimage).
</description>
</property> <property>
<name>dfs.datanode.data.dir</name>
<value>/home/dfs/data</value>
<description>
Directory where HDFS data node store blocks.
</description>
</property>
<!-- NameNode和SecondaryNameNode分离的情况下,此项配置不可少,会影响SecondaryNameNode从NameNode拷贝镜像文件的存储,
               不配置的话,NameNode宕机,Secondary找不着备份的镜像文件   -->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/home/dfs/namesecondary</value>
<description>
Determines where on the local filesystem the DFS secondary
name node should store the temporary images to merge.
</description>
</property> <property>
<name>dfs.replication</name>
<value>2</value>
<description>
HDFS block replication.
</description>
</property> <property>
<name>dfs.blocksize</name>
<value>134217728</value>
<description>
HDFS storage blocksize.
</description>
</property> <!-- 将NameNode和SecondaryNameNode分离开的配置分别指定namenode和secondarynamenode的启动节点 -->
<property>
<name>dfs.namenode.http-address</name>
<value>namenode01:50070</value>
<description>
The address and the base port where the dfs namenode web ui will listen on.
</description>
</property> <property>
<name>dfs.namenode.secondary.http-address</name>
<value>namenode02:50090</value>
<description>
The secondary namenode http server address and port.
</description>
</property> <property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
<description>
The number of seconds between two periodic checkpoints.
</description>
</property>

编辑mapred-site.xml,增加如下内容:

        <property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>
The runtime framework for executing MapReduce jobs.
Can be one of local, classic or yarn.
</description>
</property>

编辑yarn-site.xml,增加如下内容:

        <property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>
the valid service name should only contain a-zA-Z0-9_ and can not start with numbers
</description>
</property>
        <!--  指定resourcemanager的节点,若无此段配置,将会出现DataNode节点上的nodemanager进程启动一段时间之后自动消失的问题  -->
<property>
<description>The hostname of the RM.</description>
<name>yarn.resourcemanager.hostname</name>
<value>namenode01</value>
</property>

创建文件 masters,增加如下内容:(实现namenode和secondarynamenode分离)

namenode02

修改文件 slaves,增加如下内容:

datanode01
datanode02
datanode03
datanode04
datanode05
datanode06
datanode07
datanode08

将hadoop文件夹拷贝到其他节点,使用上面的脚本scpFile

scpFile /home/sys/hadoop-2.6. /home/sys/

二、集群启动

格式化操作,进入到namenode01的hadoop根目录下,执行:

bin/hadoop namenode –format

出现Successfully字样的时候,即为格式化成功

注意:如果需要再次及多次格式化namenode,一定把hdfs-site.xml中dfs.datanode.data.dir目录清空一下,否则会造成重新格式化后DataNode启动不起来的问题。

因为该目录下有一个版本号,多次格式化可能导致DataNode和NameNode的版本号不一致。

启动dfs文件系统

sbin/start-dfs.sh

验证,jps命令查看:

namenode01上出现NameNode进程

namenode02上出现SecondaryNameNode进程

datanode0*上出现DataNode进程

即为启动dfs成功

启动yarn

sbin/start-yarn.sh

验证,jps命令查看:

namenode01上出现ResourceManager进程

datanode0*上出现NodeManager进程

即为启动yarn成功

三、修改hadoop启动日志目录

修改namenode、datanode节点默认日志目录

编辑hadoop-env.sh,修改HADOOP_LOG_DIR

export HADOOP_LOG_DIR=your path

修改resourcemanager、nodemanager日志目录

编辑yarn-env.sh,修改YARN_LOG_DIR

if [ "$YARN_LOG_DIR" = "" ]; then
YARN_LOG_DIR="your path"

不可在hadoop-env.sh中看到‘# Where log files are stored.  $HADOOP_HOME/logs by default.’就省略,默认的配置是/logs/,显然是

$HADOOP_HOME未生效,原因待查找,暂用绝对路径处理。

四、去除本地库加载失败的警告信息

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

原因:Apache提供的hadoop本地库是32位的,而在64位的服务器上就会有问题

修改加载本地库的日志级别

编辑 $HADOOP_HOME/etc/hadoop/log4j.properties,增加如下内容:

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

hadoop分布式安装及其集群配置笔记的更多相关文章

  1. rocketMq安装及集群配置

    网上关于rocketMq安装.集群配置的文章有很多,作为一个初学者,跟着网上的各种教程安装遇到了各种坑,可谓是一路坎坷.本文记录下rocketMq安装的完整过程.希望对你有一点帮助 安装rocketM ...

  2. Hadoop入门 完全分布式运行模式-集群配置

    目录 集群配置 集群部署规划 配置文件说明 配置集群 群起集群 1 配置workers 2 启动集群 总结 3 集群基本测试 上传文件到集群 查看数据真实存储路径 下载 执行wordcount程序 配 ...

  3. Hadoop(25)-高可用集群配置,HDFS-HA和YARN-HA

    一. HA概述 1. 所谓HA(High Available),即高可用(7*24小时不中断服务). 2. 实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA机制:HDFS的HA ...

  4. rabibtMQ安装及集群配置-linux

    安装RabbitMQ RabbitMQ是流行的开源消息队列系统,用erlang语言开发,故首先需要安装erlang依赖及erlang. 安装erlang依赖的基本环境,通过yum方式进行安装: yum ...

  5. Zookeeper 安装及集群配置注意点

    Zookeeper在ubuntu下安装及集群搭建,关于集群搭建,网上很多文章 可以参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-z ...

  6. zookeeper的安装及集群配置

    1.解压 2.修改配置文件 cp zoo_sample.cfg zoo.cfg vim zoo.cfg dataDir=/usr/local/zookeeperData 其余采用默认 参数说明: ti ...

  7. Hadoop环境安装和集群创建

    虚拟机使用vmware,vmware可以直接百度下载安装 秘钥也能百度到 安装很简单 CentOS 7下载: 进入官网 https://www.centos.org/download/ 这里有三种 第 ...

  8. hadoop(四): 本地 hbase 集群配置 Azure Blob Storage

    基于 HDP2.4安装(五):集群及组件安装 创建的hadoop集群,修改默认配置,将hbase 存储配置为 Azure Blob Storage 目录: 简述 配置 验证 FAQ 简述: hadoo ...

  9. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-8CDH5安装和集群配置

    Cloudera Manager Server和Agent都启动以后,就可以进行CDH5的安装配置了.      准备文件 从 http://archive.cloudera.com/cdh5/par ...

随机推荐

  1. WebAPI应用问题整理

    这两天在实现一个WebAPI的服务过程中遇到了下面的一些问题 1, 一个Controller中添加多个Action 基于模板创建WebAPI项目后,项目中会自动生成一个ValueController的 ...

  2. linux系统服务器可能被攻击的几种攻击方式

    linux系统随着Linux企业应用的扩展,有大量的网络服务器使用Linux操作系统.Linux服务器的安全性能受到越来越多的关注,这里根据Linux服务器受到攻击的深度以级别形式列出,并提出不同的解 ...

  3. SQL查询语句执行的逻辑顺序

    一.简介 大家都知道SELECT语句是用来查询数据表中的数据的,构成SELECT语句的还有各种元素(where.from.group by等),不同元素又代表了不同的处理逻辑,那么这些元素在执行查询时 ...

  4. 安装系统+数据库+Sharepoint全套教程 (摘抄自https://www.cnblogs.com/jianyus/p/5482075.html)

    前言 SharePoint 2016如约而至,之前也装过预览版,但是这次是正式版,还是分享一个完整的安装过程给大家,希望能给有需要的人有所帮助. 1.首先安装操作系统,我这里是Windows Serv ...

  5. 用POP动画模拟真实秒钟摆动效果

    用POP动画模拟真实秒钟摆动效果 静态图: 动画图: 此处用到了POP中的Spring系列动画,现提供源码如下: SecondClockView.h 与 SecondClockView.m // // ...

  6. java抽象类,接口与异常

    1.抽象类: 定义;包含一个抽象方法的类称称为抽象类,抽象类在class前使用adstract关键词修饰. 抽象方法;只声明未实现的方法称为抽象方法,使用adstract关键字声明该方法. 抽象类定义 ...

  7. ZT自老罗的博客 Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析

    Android系统的智能指针(轻量级指针.强指针和弱指针)的实现原理分析 分类: Android 2011-09-23 00:59 31568人阅读 评论(42) 收藏 举报 androidclass ...

  8. [EffectiveC++]item22:Declare data members private

    将成员变量隐藏在函数接口的背后,可以为“所有可能的实现”提供弹性, 假设我们有一个public成员变量,而我们最终取消了它,多少代码可能会被破坏呢?那是一个不可知的大量. protected成员变量就 ...

  9. oracle-记录

    同時查新多个条件的数量 select sum(DECODE(trim(t.ASSESSED_RESULT),'维持',1,0)) maintainNum, sum(DECODE(trim(t.ASSE ...

  10. Session not active, could not store state 的解决方法

    1.开口加上session_start() http://metah.ch/blog/2014/05/facebook-sdk-4-0-0-for-php-a-working-sample-to-ge ...