Hadoop(一)阿里云hadoop集群配置

集群配置

三台ECS云服务器

配置步骤

1.准备工作

1.1 创建/bigdata目录

mkdir /bigdata
cd /bigdata
mkdir /app

1.2修改主机名为node01、node02、node03

1.3修改hosts文件

vim /etc/hosts

添加node01~node03内网IP映射

127.0.0.1       localhost       localhost.localdomain   localhost4      localhost4.localdomain4
::1     localhost       localhost.localdomain   localhost6      localhost6.localdomain6

172.16.237.91 node01
172.16.237.90 node02
172.16.221.55 node03

1.4安装jdk

1.5配置SSH免密登陆

1.6安装zookeeper,

2.开始配置

2.1 配置前的准备

将hadoop安装包上传解压到/bigdata/app路径下

tar -zxvf hadoop-2.8.4.tar.gz -C /bigdata/app

创建软链接

ln -s /bigdata/app/hadoop-2.8.4 /usr/local/hadoop

将hadoop配置信息添加到环境变量中
注意:Hadoop配置文件路径是/usr/local/hadoop/etc/hadoop

vim /etc/profile

添加内容如下:

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_HOME=$HADOOP_HOME
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

重新编译环境变量使配置生效

source /etc/profile

2.2 配置HDFS
2.2.1进入到Hadoop配置文件路径
cd /usr/local/hadoop/etc/hadoop
2.2.2修改hadoo-env.sh
修改JDK路径

export JAVA_HOME=/usr/local/jdk

2.2.3 配置core-site.xml
2.2.4 配置hdfs-site.xml

 配置文件在下面

2.3 配置YARN
2.3.1 修改yarn-site.xml
2.3.2 修改mapred-site.xml

配置文件在下面
2.3.3 在/usr/local/hadoop路径下创建hdpdata文件夹

cd /usr/local/hadoop
mkdir hdpdata

2.4 修改/usr/local/hadoop/etc/hadoop下的slaves文件

设置datanode和nodemanager启动节点主机名称

在slaves文件中添加节点的主机名称

node02
node03

2.5将配置好的hadoop拷贝
scp -r hadoop-2.8.4 root@node02:/bigdata/app
scp -r hadoop-2.8.4 root@node03:/bigdata/app

在每个节点分别执行如下三步操作
第一步:使用root用户创建软链接
ln -s /bigdata/app/hadoop-2.8.4 /usr/local/hadoop
第二步:设置环境变量

vim /etc/profile

添加内容:

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_HOME=$HADOOP_HOME
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

第三步:重新编译环境变量使配置生效

source /etc/profile

3.集群启动(注意严格按照顺序启动)

3.1 启动journalnode(分别在node01、node02、node03上执行启动)

/usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode

运行jps命令检验,node01、node02、node03上多了JournalNode进程


3.2 格式化HDFS
在node01上执行命令:

hdfs namenode -format

格式化成功之后会在core-site.xml中的hadoop.tmp.dir指定的路径下生成dfs文件夹,将该文件夹拷贝到node02的相同路径下

scp -r hdpdata root@node02:/usr/local/hadoop

3.3 在node01上执行格式化ZKFC操作

hdfs zkfc -formatZK

执行成功,日志输出如下信息
INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns in ZK

3.4 在node01上启动HDFS

sbin/start-dfs.sh

3.5在node02上启动YARN

sbin/start-yarn.sh

在node01单独启动一个ResourceManger作为备份节点

sbin/yarn-daemon.sh start resourcemanager

3.6在node02上启动JobHistoryServer

sbin/mr-jobhistory-daemon.sh start historyserver

启动完成node02会增加一个JobHistoryServer进程

3.7hadoop安装启动完成
HDFS HTTP访问地址
NameNode (active):http://node01:50070
NameNode (standby):http://node02:50070
ResourceManager HTTP访问地址
ResourceManager :http://node02:8088
历史日志HTTP访问地址
JobHistoryServer:http:/node02:19888

4.集群验证

4.1 验证HDFS 是否正常工作及HA高可用首先向hdfs上传一个文件

hadoop fs -put /usr/local/hadoop/README.txt /

在active节点手动关闭active的namenode

sbin/hadoop-daemon.sh stop namenode

通过HTTP 50070端口查看standby namenode的状态是否转换为active
手动启动上一步关闭的namenode

sbin/hadoop-daemon.sh start namenode

4.2验证ResourceManager HA高可用
手动关闭node02的ResourceManager

sbin/yarn-daemon.sh stop resourcemanager

通过HTTP 8088端口访问node01的ResourceManager查看状态
手动启动node02 的ResourceManager

sbin/yarn-daemon.sh start resourcemanager

启动脚本

配置文件

core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <!-- 指定hdfs的nameservice名称空间为ns -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns</value>
    </property>
    <!-- 指定hadoop临时目录,默认在/tmp/{$user}目录下,不安全,每次开机都会被清空-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/hdpdata/</value>
        <description>需要手动创建hdpdata目录</description>
    </property>
    <!-- 指定zookeeper地址 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>node01:2181,node02:2181,node03:2181</value>
        <description>zookeeper地址,多个用逗号隔开</description>
    </property>
</configuration>

hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <!-- NameNode HA配置 -->
    <property>
        <name>dfs.nameservices</name>
        <value>ns</value>
        <description>指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致</description>
    </property>
    <property>
        <name>dfs.ha.namenodes.ns</name>
        <value>nn1,nn2</value>
        <description>ns命名空间下有两个NameNode,逻辑代号,随便起名字,分别是nn1,nn2</description>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.ns.nn1</name>
        <value>node01:9000</value>
        <description>nn1的RPC通信地址</description>
    </property>
    <property>
        <name>dfs.namenode.http-address.ns.nn1</name>
        <value>node01:50070</value>
        <description>nn1的http通信地址</description>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.ns.nn2</name>
        <value>node02:9000</value>
        <description>nn2的RPC通信地址</description>
    </property>
    <property>
        <name>dfs.namenode.http-address.ns.nn2</name>
        <value>node02:50070</value>
        <description>nn2的http通信地址</description>
    </property>
    <!--JournalNode配置 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node01:8485;node02:8485;node03:8485/ns</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/hadoop/journaldata</value>
        <description>指定JournalNode在本地磁盘存放数据的位置</description>
    </property>
    <!--namenode高可用主备切换配置 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
        <description>开启NameNode失败自动切换</description>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.ns</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        <description>配置失败自动切换实现方式,使用内置的zkfc</description>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>
            sshfence
            shell(/bin/true)
        </value>
        <description>配置隔离机制,多个机制用换行分割,先执行sshfence,执行失败后执行shell(/bin/true),/bin/true会直接返回0表示成功</description>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
        <description>使用sshfence隔离机制时需要ssh免登陆</description>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
        <description>配置sshfence隔离机制超时时间</description>
    </property>
    <!--dfs文件属性设置-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
        <description>默认block副本数为3,测试环境这里设置为1,注意生产环境一定要设置3个副本以上</description>
    </property>

    <property>
        <name>dfs.block.size</name>
        <value>134217728</value>
        <description>设置block大小是128M</description>
    </property>

    <!-- 如果是通过公网IP访问阿里云上内网搭建的集群 -->
<property>
    <name>dfs.client.use.datanode.hostname</name>
    <value>true</value>
    <description>only cofig in clients</description>
</property>

</configuration>

mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description>指定mr框架为yarn方式 </description>
    </property>
    <!-- 历史日志服务jobhistory相关配置 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node02:10020</value>
        <description>历史服务器端口号</description>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node02:19888</value>
        <description>历史服务器的WEB UI端口号</description>
    </property>
</configuration>

问题

namenode连接不上,查看日志发现

java.io.IOException: There appears to be a gap in the edit log.  We expected txid 1, but got txid 2.

在hadoop的bin目录下修复元数据

hadoop namenode -recover

先选y后选c

概念

守护进程是在后台运行不受终端控制的进程(如输入、输出等),一般的网络服务都是以守护进程的方式运行。守护进程脱离终端的主要原因有两点:(1)用来启动守护进程的终端在启动守护进程之后,需要执行其他任务。(2)(如其他用户登录该终端后,以前的守护进程的错误信息不应出现)由终端上的一些键所产生的信号(如中断信号),不应对以前从该终端上启动的任何守护进程造成影响。要注意守护进程与后台运行程序(即加&启动的程序)的区别。

守护进程和后台程序

(a)守护进程已经完全脱离终端控制台了,而后台程序并未完全脱离终端,在终端未关闭前还是会往终端输出结果
(b)守护进程在关闭终端控制台时不会受影响,而后台程序会随用户退出而停止,需要在以nohup command & 格式运行才能避免影响
(c)守护进程的会话组和当前目录,文件描述符都是独立的。后台运行只是终端进行了一次fork,让程序在后台执行,这些都没改变。

hadoop目录结构

1.$HADOOP_HOME/bin目录下文件及作用

文件名称 说明
hadoop 用于执行hadoop脚本命令,被hadoop-daemon.sh调用执行,也可以单独执行,一切命令的核心

2.$HADOOP_HOME/sbin目录下文件及作用

文件名称 说明
hadoop-daemon.sh

通过执行hadoop命令来启动/停止一个守护进程(daemon);该命令会被bin目录下面所有以start或stop开头的所有命令调用来执行命令,

hadoop-daemons.sh也是通过调用hadoop-daemon.sh来执行命令的,而hadoop-daemon.sh本身就是通过调用hadoop命令来执行任务。

start-all.sh 全部启动,它会调用start-dfs.sh及start-mapred.sh
start-dfs.sh 启动NameNode、DataNode以及SecondaryNameNode
start-mapred.sh 启动MapReduce
stop-all.sh 全部停止,它会调用stop-dfs.sh及stop-mapred.sh
stop-balancer.sh 停止balancer
stop-dfs.sh 停止NameNode、DataNode及SecondaryNameNode
stop-mapred.sh  停止MapReduce

3.$HADOOP_HOME/etc/hadoop目录下文件及作用

文件名称 说明
core-site.xml

Hadoop核心全局配置文件,可以其他配置文件中引用该文件中定义的属性,如在hdfs-site.xml及mapred-site.xml中会引用该文件的属性;

该文件的模板文件存在于$HADOOP_HOME/src/core/core-default.xml,可将模板文件复制到conf目录,再进行修改。

hadoop-env.sh Hadoop环境变量
hdfs-site.xml HDFS配置文件,该模板的属性继承于core-site.xml;该文件的模板文件存于$HADOOP_HOME/src/hdfs/hdfs-default.xml,可将模板文件复制到conf目录,再进行修改
mapred-site.xml

MapReduce的配置文件,该模板的属性继承于core-site.xml;该文件的模板文件存于$HADOOP_HOME/src/mapred/mapredd-default.xml,

可将模板文件复制到conf目录,再进行修改

slaves 用于设置所有的slave的名称或IP,每行存放一个。如果是名称,那么设置的slave名称必须在/etc/hosts有IP映射配置

4.$HADOOP_HOME/lib目录

该目录下存放的是Hadoop运行时依赖的jar包,Hadoop在执行时会把lib目录下面的jar全部加到classpath中。

5.$HADOOP_HOME/logs目录

该目录存放的是Hadoop运行的日志,查看日志对寻找Hadoop运行错误非常有帮助。

6.$HADOOP_HOME/include目录
对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序。
7.$HADOOP_HOME/libexec目录
各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。
8.$HADOOP_HOME/share目录
Hadoop各个模块编译后的jar包所在的目录。

猜你喜欢

转载自www.cnblogs.com/aidata/p/11706515.html