Hadoop分布式集群安装

Posted 毛个二蛋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop分布式集群安装相关的知识,希望对你有一定的参考价值。

一 整体介绍

1.1 硬件环境

  本文使用三台服务器搭建hadoop集群,使用Centos7.5系统,服务器均有独立ip

1.2 部署的软件

  部署服务:namenode(HA),resourcemanager(HA),zookeeper,hbase(HA),spark,kafka,geomesa

  版本:hadoop-2.7.4,zookeeper-3.4.14,hbase-1.3.6,kafka_2.11-1.0.1,scala-2.11.8,geomesa-hbase_2.11-2.1.3,spark-2.4.4-bin-hadoop2.7,jdk-8u221-linux-x64

  使用root用户安装

       

                              图1 集群部署情况

 

二 安装过程

2.1 安装前准备:配置ip,hostname,ntp,ssh免密登录,关闭防火墙和SELINUX,安装jdk

  2.1.1 配置ip

修改配置文件,目录:/etc/sysconfig/network-scripts/ifcfg_xxx(网卡名)

参数 作用详解

DEVICE=“eth1” 网卡名称

NM_CONTROLLED=“yes” network mamager的参数 ,是否可以由NNetwork Manager托管

HWADDR= MAC地址

TYPE=Ethernet 类型

PREFIX=24 子网掩码24位

DEFROUTE=yes 就是default route,是否把这个eth设置为默认路由

ONBOOT=yes 设置为yes,开机自动启用网络连接

IPADDR=0.0.0.0 IP地址

BOOTPROTO=none 设置为none禁止DHCP,设置为static启用静态IP地址,设置为dhcp开启DHCP服务

NETMASK=255.255.255.0 子网掩码

DNS1=8.8.8.8 第一个dns服务器

BROADCAST 广播

UUID= 唯一标识

TYPE=Ethernet 网络类型为:Ethernet

GATEWAY= 设置网关

DNS2=8.8.8.8 第二个dns服务器

IPV6INIT=no 禁止IPV6

USERCTL=no 是否允许非root用户控制该设备,设置为no,只能用root用户更改

NAME=“System eth1” 这个就是个网络连接的名字

MASTER=bond1 指定主的名称

SLAVE 指定了该接口是一个接合界面的组件。

NETWORK 网络地址

ARPCHECK=yes 检测

PEERDNS 是否允许DHCP获得的DNS覆盖本地的DNS

PEERROUTES 是否从DHCP服务器获取用于定义接口的默认网关的信息的路由表条目

IPV6INIT 是否启用IPv6的接口。

IPV4_FAILURE_FATAL=yes 如果ipv4配置失败禁用设备

IPV6_FAILURE_FATAL=yes 如果ipv6配置失败禁用设备

    修改完文件,重启网络服务:systemctl start network

  2.1.2 修改服务器hostname(Centos7)

查看:hostname

临时修改:hostname newname

永久修改:hostnamectl set-hostname xxxh;或者修改/etc/hostname和/etc/hosts  //三台服务器分别为node0,node1,node2

然后重启:reboot

   2.1.3 安装ntp(时间同步)

安装:

三个节点安装ntp:

安装ntp:yum install ntp

启动服务:systemctl start ntpd.service

设置开机自启动:systemctl enable ntpd.service

配置:

一个节点设置为server,配置:vim /etc/ntp.conf

  restrict 192.168.1.0 mask 255.255.255.0   #添加此行

另外两个设置client,配置:vim /etc/ntp.conf

server 192.168.1.190     #添加此行server的ip)

# server 0.centos.pool.ntp.org iburst           #以下四行注释掉

# server 1.centos.pool.ntp.org iburst

# server 2.centos.pool.ntp.org iburst

# server 3.centos.pool.ntp.org iburst

三台重启ntp.Server:systemctl restart ntpd

查看结果:ntpq -p(使用服务器状态)/ntpstat(是否同步)(server需要几秒生效,client需要十几分钟)

   2.1.4 ssh安装和免密登录

    安装

下载:yum -y install rmp;

yum -y install openssh;

启动:/etc/init.d/sshd start

修改配置文件:   vim /etc/ssh/sshd_config        进入文件修改

                 Port 22                          开启端口

     78行      PasswordAuthentication no|yes          开启或关闭ssh的默认认证方式

     48行      PermitRootLogin no|yes                 开启或关闭root用户的登陆

重启:systemctl start sshd

查看服务:ps -e|grep sshd

     配置免密登录(相互保存对方的公钥)

三台都配置节点名称:vim /etc/hosts添加

192.168.0.128 master

192.168.0.129 slave1

192.168.0.130 slave2

生成公私钥:cd  ~; ssh-keygen -t rsa(一路回车)

生成authorized_keys文件:将client~/.ssh目录中的 id_rsa.pub 这个文件拷贝到server 的~/.ssh目录中authorized_keys(自己创建)

scp ~/.ssh/id_rsa.pub 192.168.0.101:~/.ssh/

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

authorized_keys文件复制到其他节点~/.ssh,实现所有节点互联

# 另外要注意请务必要将服务器上 ~/.ssh权限设置为700

 ~/.ssh/authorized_keys的权限设置为600

chmod 700 ~/.ssh/

chmod 600 ~/.ssh/authorized_keys 

2.1.5 关闭防火墙和SELINUX

     关闭防火墙

查看:firewall-cmd --state

关闭:systemctl stop firewalld.service

禁止开机自启:systemctl disable firewalld.service

关闭SELINUX(SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源)

# vim /etc/selinux/config

-- 注释掉 #SELINUX=enforcing #SELINUXTYPE=targeted

 -- 添加 SELINUX=disabled

2.1.6 安装jdk

查看是否已安装jdk:rpm -qa | grep java 

删除所有显示的Java包:rpm -e –nodeps +包名 或者yum -y remove +包名

解压jdk包到安装目录:tar -xvf jdk-8u144-linux-x64.tar.gz  -C  /opt/java

改名:mv jdk1.8.0_144 jdk1.8

配置环境变量:vim /etc/profile

添加内容:export JAVA_HOME=/opt/java/jdk1.8

export JRE_HOME=/opt/java/jdk1.8/jre

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

export PATH=.:${JAVA_HOME}/bin:$PATH

环境变量生效:source /etc/profile

检查安装结果:java -version

 

2.2 安装zookeeper

1. 解压

tar -zxvf zookeeper-3.4.10.tar.gz -C /tools/zookeeper-3.4.10

mkdir /tools/zookeeper-3.4.10/data

2. 配置文件

-- 复制配置文件模板

  Cp /usr/zookeeper-3.4.10/conf/zoo-sample.cfg /usr/zookeeper-3.4.10/conf/zoo.cfg

-- 修改配置文件 # vim /usr/zookeeper-3.4.10/conf/zoo.cfg

-- 添加如下内容

dataLogDir=/var/hadoop/zookeeper

dataDir=/usr/zookeeper-3.4.10/data --提前创建data目录

server.1=node0:2888:3888

server.2=node1:2888:3888

server.3=node2:2888:3888

3. 复制到node1,node2

# scp -r /usr/zookeeper-3.4.10 node1:/usr 

# scp -r /usr/zookeeper-3.4.10 node2:/usr

4. 创建myid文件(三台 分别echo1,2,3 myid中的编号和zoo.cfg文件中的server.n一致

# touch /usr/zookeeper-3.4.10/data/myid

 # echo 1 > /usr/zookeeper-3.4.10/data/myid

5. 配置环境变量

export ZOOKEEPER_HOME=/tools/zookeeper-3.4.10

export PATH=$PATH:$ZOOKEEPER_HOME/bin

6. 格式化(namenode节点):hdfs zkfc -formatZK

7. 启动(三台)

/tools/zookeeper-3.4.14/bin/zkServer.sh start

查看zkServer.sh status/jps

结果一台leader两台follow即启动成功

 

2.3  安装hadoop(namenode和resourcemanager  HA安装)

  

                           图2 namenode HA 原理

  1.解压安装   tar -zxvf hadoop-2.7.4.tar.gz  -C /tools/

  2.修改配置文件:Core-site.xml,yarn-site.xml,Hdfs-site.xml,slaves

         Core-site.xml

<property>

    <name>fs.default.name</name>

    <value>hdfs://ns</value>

</property>

<property>

      <name>io.file.buffer.size</name>

      <value>4096</value>

 </property>

 <!--指定zookeeper地址-->

 <property>

      <name>ha.zookeeper.quorum</name>

      <value>node0:2181,node1:2181,node2:2181</value>

 </property>

 

   Hdfs-site.xml(HA)

<!-- 配置namenode和datanode的工作目录-数据存储目录 -->

      <!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 -->

    <property>

        <name>dfs.nameservices</name>

        <value>ns</value>

    </property>

    <!-- ns下面有两个NameNode,分别是nn1,nn2 -->

    <property>

       <name>dfs.ha.namenodes.ns</name>

       <value>nn1,nn2</value>

    </property>

    <!-- nn1的RPC通信地址 -->

    <property>

       <name>dfs.namenode.rpc-address.ns.nn1</name>

       <value>node0:9000</value>

    </property>

    <!-- nn1的http通信地址 -->

    <property>

        <name>dfs.namenode.http-address.ns.nn1</name>

        <value>node0:50070</value>

    </property>

    <!-- nn2的RPC通信地址 -->

    <property>

        <name>dfs.namenode.rpc-address.ns.nn2</name>

        <value>node1:9000</value>

    </property>

    <!-- nn2的http通信地址 -->

    <property>

        <name>dfs.namenode.http-address.ns.nn2</name>

        <value>node1:50070</value>

    </property>

    <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->

    <property>

         <name>dfs.namenode.shared.edits.dir</name>

         <value>qjournal://node0:8485;node1:8485;node2:8485/ns</value>

    </property>

    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->

    <property>

          <name>dfs.journalnode.edits.dir</name>

          <value>/data/hadoop/journaldata</value>

    </property>

    <!-- 开启NameNode故障时自动切换 -->

    <property>

          <name>dfs.ha.automatic-failover.enabled</name>

          <value>true</value>

    </property>

    <!-- 配置失败自动切换实现方式 -->

    <property>

            <name>dfs.client.failover.proxy.provider.ns</name>     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

    </property>

    <!-- 配置隔离机制,如果ssh是默认22端口,value直接写sshfence即可 -->

    <property>

             <name>dfs.ha.fencing.methods</name>

             <value>sshfence</value>

    </property>

    <!-- 使用隔离机制时需要ssh免登陆 -->

    <property>

            <name>dfs.ha.fencing.ssh.private-key-files</name>

            <value>/root/.ssh/id_rsa</value>

    </property>

     <!-- 配置sshfence隔离机制超时时间 -->

     <property>

         <name>dfs.ha.fencing.ssh.connect-timeout</name>

         <value>30000</value>

     </property>

     <property>

         <name>ha.failover-controller.cli-check.rpc-timeout.ms</name>

         <value>60000</value>

     </property>

     <!-- 配置namenode和datanode的工作目录-数据存储目录 -->

     <property>

         <name>dfs.namenode.name.dir</name>

         <value>/data/hadoop/dfs/name</value>

     </property>

     <property>

         <name>dfs.datanode.data.dir</name>

         <value>/data/hadoop/dfs/data</value>

     </property>

     <property>

        <name>dfs.namenode.secondary.http-address</name>

        <value>node0:9001</value>

    </property>

    <property>

        <name>dfs.webhdfs.enabled</name>

        <value>true</value>

    </property>

    <property>

        <name>dfs.namenode.datanode.registration.ip-hostname-check</name>

        <value>false</value>

    </property>

 

    yarn-site.xml(resourcemanager HA)

<!-- 开启RM高可用 -->

     <property>

         <name>yarn.resourcemanager.ha.enabled</name>

         <value>true</value>

     </property>

     <!-- 指定RM的cluster id -->

     <property>

         <name>yarn.resourcemanager.cluster-id</name>

         <value>yrc</value>

     </property>

    <!-- 指定RM的名字 -->

     <property>

         <name>yarn.resourcemanager.ha.rm-ids</name>

         <value>rm1,rm2</value>

     </property>

     <!-- 分别指定RM的地址 -->

     <property>

         <name>yarn.resourcemanager.hostname.rm1</name>

         <value>node0</value>

     </property>

     <property>

         <name>yarn.resourcemanager.hostname.rm2</name>

         <value>node1</value>

     </property>

     <!-- 指定zk集群地址 -->

     <property>

         <name>yarn.resourcemanager.zk-address</name>

         <value>node0:2181,node1:2181,node2:2181</value>

     </property>

     <property>

         <name>yarn.nodemanager.aux-services</name>

         <value>mapreduce_shuffle</value>

     </property>

     <property>

         <name>yarn.log-aggregation-enable</name>

         <value>true</value>

     </property>

     <property>

         <name>yarn.log-aggregation.retain-seconds</name>

         <value>86400</value>

     </property>

     <!-- 启用自动恢复 -->

     <property>

         <name>yarn.resourcemanager.recovery.enabled</name>

         <value>true</value>

     </property>

     <!-- 制定resourcemanager的状态信息存储在zookeeper集群上 -->

     <property>

         <name>yarn.resourcemanager.store.class</name>  

<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

     </property>  

   <property>

      <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

      <value>org.apache.mapred.ShuffleHandler</value>

   </property>

    <!--每个节点可用内存,单位MB-->

   <property> 

        <name>yarn.nodemanager.resource.memory-mb</name>

        <value>2048</value> 

    </property> 

    <!--每个节点可用cpu-->

    <property> 

        <name>yarn.nodemanager.resource.cpu-vcores</name> 

        <value>2</value> 

    </property>

    <property>

        <name>yarn.resourcemanager.webapp.address.rm1</name>

        <value>noed0:8088</value>

    </property>

    <property>

        <name>yarn.resourcemanager.webapp.address.rm2</name>

        <value>node1:8088</value>

    </property>

 

修改slaves:添加DataNode节点

Node0

Node1

Node2

3. 安装目录复制到node1和node2

# scp -r /usr/hadoop-2.7.3 slave1:/usr 

# scp -r /usr/hadoop-2.7.3 slave2:/usr

4. 配置环境变量

# vim /etc/profile --

添加如下内容#hadoop

export HADOOP_HOME=/tools/hadoop-2.7.4

export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

export HADOOP_LOG_DIR=/var/hadoop/hadoop/logs

export YARN_LOG_DIR=$HADOOP_LOG_DIR

-- 保存后执行 # source /etc/profile

5. 格式化 namenode

格式化步骤:(只要格式化一台,另一台同步,两台都格式化)

1)、格式化第一台:

$ bin/hdfs namenode -format

2)、启动刚格式化好的namenode:

$ sbin/hadoop-deamon.sh start namenode

3)、在第二台机器上同步namenode的数据:

$ bin/hdfs namenode -bootstrapStandby

4)、启动第二台的namenode:

$ sbin/hadoop-deamon.sh start namenode

6. 启动/关闭hadoop(node0)

sbin/start-all.sh

关闭 sbin/stop-all.sh

 

2.3 安装Hbase(HA)

                     图3  hbase原理

  1、解压缩hbase安装包

    # tar -zxvf hbase-1.2.5-bin.star.gz -C /usr# mkdir /usr/hbase-1.2.5-bin/logs

  2、修改Hbase启动时要使用的环境变量(hbase-env.sh)

-- 打开环境变量配置文件# vim /usr/hbase-1.2.5/conf/hbase-env.sh

-- 添加如下内容

设置java安装路径export JAVA_HOME=/usr/java/jdk1.8.0_131

设置hbase的日志地址export HBASE_LOG_DIR=${HBASE_HOME}/logs

设置是否使用hbase管理zookeeper(因使用zookeeper管理的方式,故此参数设置为false)export HBASE_MANAGES_ZK=false

设置hbase的pid文件存放路径export HBASE_PID_DIR=/var/hadoop/pids

  3、添加所有的region服务器到regionservers文件中

    # vim /usr/hbase-1.2.5/conf/regionserver

    -- 删除localhost,新增如下内容

      node0

      node1

      node2

  注:hbase在启动或关闭时会依次迭代访问每一行来启动或关闭所有的region服务器进程

  4、修改Hbase集群的基本配置信息(hbase-site.xml),该配置将会覆盖Hbase的默认配置

-- 打开配置文件

# vim /usr/hbase-1.2.5/conf/hbase-site.xml

-- 在configuration节点下添加如下内容

<!--和core.site.xml的fs.default.name一致-->

<property>

          <name>hbase.rootdir</name>

          <value>hdfs://ns/hbase</value>

    </property>

    <property>

        <name>hbase.cluster.distributed</name>

        <value>true</value>

    </property>

    <property>

        <name>hbase.zookeeper.quorum</name>

        <value>node0,node1,node2</value>

    </property>

    <property>

        <name>hbase.zookeeper.property.dataDir</name>

        <value>/tools/zookeeper-3.4.14/data</value>

</property>

<!--主节点-->

    <property>

        <name>hbase.master</name>

        <value>node0:60000</value>

    </property>

     <property>

          <name>hbase.zookeeper.property.clientPort</name>

          <value>2181</value>

    </property>

hadoop配置文件core.site.xml和hdfs.site.xml复制到conf下

创建文件backup-masters,添加副节点的hostname

5、复制hbase到slave中

# scp -r /usr/hbase-1.2.5 slave1:/usr

# scp -r /usr/hbase-1.2.5 slave2:/usr

6、启动hbase(在两个节点启动master,配置文件中指定active节点)

在master节点启动master:hbase-daemon.sh start  master

在regionserver节点启动regionserver:hbase-daemon.sh start  regionserver

 

2.4  安装Scala(spark和kafka依赖)

  下载地址:Scala地址:https://www.scala-lang.org/download/

  安装配置

解压scala安装包

   tar -xvf scala-2.12.6\\ .tgz    -C /usr/local/

修改配置文件:

 vi /etc/profile

#scala

export SCALA_HOME=/usr/local/scala-2.12.6

export PATH=$PATH:$SCALA_HOME/bin

Source /etc/profile

 

2.4 安装Spark(HA)

  Spark下载地址:http://spark.apache.org/downloads.html

  

解压安装

  tar -xvf /opt/spark/spark-2.3.1-bin-hadoop2.7.tgz -C /usr/local

配置

添加环境变量

#spark

export SPARK_HOME=/opt/spark/spark-2.3.1-bin-hadoop2.7

export PATH=$PATH:$SPARK_HOME/bin

export SPARK_EXAMPLES_JAR=$SPARK_HOME/examples/jars/spark-examples_3.11-2.3.1.jar

修改spark-env.sh

cp spark-env.sh.template  spark-env.sh

添加:export JAVA_HOME=/tools/java/jdk1.8

#export SCALA_HOME=/tools/scala-2.12.8

export HADOOP_HOME=/tools/hadoop-2.7.4

export HADOOP_CONF_DIR=/tools/hadoop-2.7.4/etc/hadoop

export SPARK_WORKER_MEMORY=500m

export SPARK_WORKER_CORES=1

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node0:2181,node1:2181,node2:2181 -Dspark.deploy.zookeeper.dir=/spark"

将安装目录复制到其他节点

启动

启动worker:sbin/start-all.sh

启动master:哪台用start-master.sh启动即为master

在高可用模式下启动spark集群,现需要在任意一台节点上启动start-all,然后在另外一台节点上单独启动  master。命令:start-master.sh

 

2.5  安装Kafka

1. 依赖Scala,下载解压

2. 在kafka路径下创建其日志文件夹

    mkdir logs

3. 进入config目录,进入server.properties文件修改配置信息

    broker.id=0
     delete.topic.enable=true
     log.dirs=/root/hd/kafka/logs
     zokeeper.connect=hd1-1:2181,hd1-2:2181,hd1-3:2181

 保存并退出;

 4. 将修改好的kafka文件夹发送到其他集群机器,并修改server.properties中的broker.id为1,2,3...

    scp -r  /root/hd/kafka  hd09-01:/root/hd/

 5. 启动zookeeper集群,再启动kafka集群

  窗口启动:bin/kafka-server-start.sh config/server/properties

后台运行:nohup bin/kafka-server-start.sh config/server.properties & >nohup.out

   jps查看有Kafka进程即启动成功

  常用操作:

创建topic:./kafka-topics.sh --create --zookeeper node0:2181,node1:2181,node2:2181 -topic topicname  -replication-factor 1 -partitions 6

查看topic:bin/kafka-topics.sh -zookeeper server221:2181   --list

启动生产者:./bin/kafka-console-producer.sh --broker-list  localhost:9092 --topic taxi

启动消费者:./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic taxi--from-beginning

 

 2.6 安装Geomesa

  1. 官网下载所需版本的geomesa,官网:https://www.geomesa.org/documentation/user/hbase/install.html

   本文使用geomesa-hbase,下载后解压缩

  2. 配置环境变量 

export HADOOP_HOME=/path/to/hadoopexport

HBASE_HOME=/path/to/hbaseexport

GEOMESA_HBASE_HOME=/opt/geomesaexport

PATH="${PATH}:${GEOMESA_HOME}/bin"
GeoMesa 推荐在geomesa-hbase_2.11-$VERSION/conf/geomesa-env.sh文件中设置以上环境变量,也可以在.bashrc或/etc/profile中设置。

3. 手动安装插件

bin/install-jai.sh

bin/install-jline.sh

4. 复制jar包

  GeoMesa for HBase需要使用本地过滤器来加速查询,因此需要将GeoMesa的runtime JAR包,复制到HBase的安装目录的lib文件夹中

 

    hadoop fs -put ${GEOMESA_HBASE_HOME}/dist/hbase/geomesa-hbase-distributed-runtime-$VERSION.jar ${hbase.dynamic.jars.dir}/

  5. 注册协处理器(Coprocessors)

注册的过程其实就是使HBase在运行时能够访问到geomesa-hbase-distributed-runtime的jar包。官网给出了几种方法实现这一目标,最方便的是在HBase的配置文件hbase-site.xml添加如下内容:

  <property>

    <name>hbase.coprocessor.user.region.classes</name>

    <value>org.locationtech.geomesa.hbase.coprocessor.GeoMesaCoprocessor</value>

  </property>

6. 设置命令行工具

在完成以上设置后,GeoMesa的主要部分就安装完成了。可以使用 bin/geomesa-hbase 命令调用GeoMesa的命令行工具,执行一系列的功能。

这里要额外设置的是使用如下命令,将HBase配置文件hbase-site.xml打包进geomesa-hbase-datastore_2.11-$VERSION.jar中:

zip -r lib/geomesa-hbase-datastore_2.11-$VERSION.jar hbase-site.xml

 

三  集群启动/停止方式

三种启动方式介绍

   方式一:逐一启动(实际生产环境中的启动方式)

     hadoop-daemon.sh   start|stop   namenode|datanode| journalnode|zkfc(DFSZKFailoverController)(依次顺序)

            yarn-daemon.sh         start |stop       resourcemanager|nodemanager

  方式二:分开启动

                start-dfs.sh

               start-yarn.sh

   方式三:一起启动

               start-all.sh

start-all.sh脚本:

     说明:start-all.sh实际上是调用sbin/start-dfs.sh脚本和sbin/start-yarn.sh脚本

                    图4 集群启动调用过程

 

 

                         图5  单独启动、停止命令

 

 

 四  安装过程遇到的问题

1. 配置好ssh免密登录还无法登录

   答:known_host文件中保存了未修改前的其他节点公钥,手动删除known_hosts中内容

2. 配置好JAVA_HOME,启动hadoop报Error: JAVA_HOME is not set and could not be found.

  答:修改/etc/hadoop/hadoop-env.sh和hadoop-env.sh中设JAVA_HOME。

        应当使用绝对路径。

        export JAVA_HOME=$JAVA_HOME                  //错误,不能这么改

        export JAVA_HOME=/usr/java/jdk1.6.0_45        //正确,应该这么改

3. hadoop启动后无法用浏览器打开yarn管理8088

   

 答:8088端口挂载到127.0.0.1下,

外网无法访问,修改yarn-site.xml文件

添加 <property>

      <name>yarn.nodemanager.aux-services</name>

     <value>mapreduce_shuffle</value>

  </property>

  <property>

      <name>yarn.resourcemanager.hostname</name>

      <value>node0</value>

  </property>

4. zookeeper启动查看状态报Error contacting service. It is probably not running.

 答:查看输出日志:/bin/zookeeper.out

 解决:将zoo.cfg自己节点名称改为0.0.0.0

5. recourcemanager未启动成功

 

 答:配置文件写错了(出问题先看配置文件)

 

6. Secondarynamenode未启动成功

   

  答:配置了HA之后,secondaryname是不启动的,如果用hadoop-daemon强行启动,报错, Cannot use  SecondaryNameNode in an HA cluster. The Standby Namenode will perform checkpointing.

    standby的namenode一直在执行secondarynamenode的作用,不需要再启动secondarynamenode。

7. standby namenode无法启动

  

 答:datanode cluesterID只有首次才会生成,namenode clusterID每格式化一次就会生成一次,所以会造成namenode clusterID与datanode clusterID不匹配

   解决方法:1手动修改/data/hadoop/dfs/name/cuurent/VAERSION同步主节点的clusterID

  2.删除掉dfs所有数据重新格式化namenode,格式化步骤如下。

Namenode格式化前先启动journalnode  命令:hadoop-daemon.sh start journalnode

格式化步骤:(只要格式化一台,另一台同步,两台都格式化)

1)、格式化第一台:

$ bin/hdfs namenode -format

2)、启动刚格式化好的namenode:

$ sbin/hadoop-deamon.sh start namenode

3)、在第二台机器上同步namenode的数据:

$ bin/hdfs namenode -bootstrapStandby

4)、启动第二台的namenode:

$ sbin/hadoop-deamon.sh start namenode

8. 

 ·答:集群未启动,端口号连接失败

9.启动HBase失败

 

  答:ntp有问题

10. 启动kafka报错:

    

   答:清空kafka日志

11. 无法停止服务

     

  答:没有配置pid文件,默认在/tmp会被清除

配置方法:

1 在集群各个节点的/var目录下面创建一个文件夹: sudo mkdir -p /var/hadoop/pids,记得更改这个文件夹的权限,chown -R hadoop:hadoop /var/hadoop,将这个目录及子目录的拥有者改为你的当前用户,我这是hadoop,不然执行start-all.sh的时候当前用户会没有权限创建pid文件

2 修改hadoop-env.sh 增加:export HADOOP_PID_DIR=/var/hadoop/pids

3 修改yarn-env.sh 增加:export YARN_PID_DIR=/var/hadoop/pids

4 修改hbase-env.sh ,增加:export HBASE_PID_DIR=/var/hadoop/pids

以上是关于Hadoop分布式集群安装的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop集群安装(完全分布式)-3.3.3版本

Hadoop 3.1.3 分布式集群搭建,超详细,保姆级教程

阿里云ECS服务器部署HADOOP集群:Sqoop 安装

Hadoop学习笔记HDFSHDFS集群(分布式)安装

Hadoop3.x - 本地安装 + 完全分布式安装 + 集群配置 + xsync分发脚本 (解决root用户启动Hadoop集群的报错问题)

Hadoop集群(第5期)_Hadoop安装配置