Hadoop3.3.2 完全分布式集群构建步骤【无脑版】

一、准备工作

1.服务器

准备 三台 linux服务器(node-01、node-02、node-03)

全部关闭防火墙:systemctl disable firewalld

全部关闭selinux:vim /etc/selinux/config  把SELINUX=enforcing 改为 SELINUX=disabled

1)ip映射(每台服务器都要执行如下操作)

执行命令: vim /etc/hosts , 文件末端加入如下内容,ip要修改成自己的

192.168.2.101 node-01
192.168.2.102 node-02
192.168.2.103 node-03

2)修改主机名

每台需要执行命令:vim /etc/sysconfig/network,修改如下内容

例如在node-02服务器上,修改为:HOSTNAME=node-02 

2. 添加用户

node-01、node-02、node-03上都添加一个admin用户(针对hadoop创建的用户)

执行两个命令  1)adduser admin  2)passwd admin,完成密码修改

3.设置免密登录

注意:免密登录存在一个致命的问题,即免密登录过去后无法获取/etc/profile内的配置信息,所以记得配置hadoop-env.sh文件

创建秘钥=================================

node-01上执行命令:1)su admin  2) ssh-keygen -t dsa -P ''  3) cd /home/admin/.ssh/

4)  ls -l , 查看到两个文件  id_dsa、id_dsa.pub  5) cat id_dsa.pub >> authorized_keys

6) scp id_dsa.pub node-02:$(pwd)/node-01.pub ;  scp id_dsa.pub node-03:$(pwd)/node-01.pub

node-02上执行命令:1)su admin  2) ssh-keygen -t dsa -P ''  3) cd /home/admin/.ssh/

4)  ls -l , 查看到两个文件  id_dsa、id_dsa.pub  5) cat id_dsa.pub >> authorized_keys

6) scp id_dsa.pub node-01:$(pwd)/node-01.pub ;  scp id_dsa.pub node-03:$(pwd)/node-01.pub

node-03上执行命令:1)su admin  2) ssh-keygen -t dsa -P ''  3) cd /home/admin/.ssh/

4)  ls -l , 查看到两个文件  id_dsa、id_dsa.pub  5) cat id_dsa.pub >> authorized_keys

6) scp id_dsa.pub node-01:$(pwd)/node-01.pub ;  scp id_dsa.pub node-02:$(pwd)/node-01.pub

添加秘钥=================================

node-01上执行命令:1)su admin  2) cd /home/admin/.ssh/

3)  ls -l , 多出来两个文件  node-02.pub、node-03.pub 

4) cat node-02.pub >> authorized_keys  ; cat node-03.pub >> authorized_keys  

node-02上执行命令:1)su admin  2) cd /home/admin/.ssh/

3)  ls -l , 多出来两个文件  node-01.pub、node-03.pub 

4) cat node-01.pub >> authorized_keys  ; cat node-03.pub >> authorized_keys  

node-03上执行命令:1)su admin  2) cd /home/admin/.ssh/

3)  ls -l , 多出来两个文件  node-01.pub、node-02.pub 

4) cat node-01.pub >> authorized_keys  ; cat node-02.pub >> authorized_keys  

如果配置的免密登录不生效,可以从以下几点检查:

(1)、各节点~/.ssh目录及其目录下的文件权限:

chmod 700 ~/.ssh

chmod 600 ~/.ssh/*

(2)、如果上述配置后还是不生效,检查/etc/ssh/sshd_config配置,然后执行systemctl restart sshd重启sshd服务:

时间同步=================================

yum install ntpdate
# 直接用域名同步中国上海时间 是阿里云的服务器
timedatectl set-timezone Asia/Shanghai 
ntpdate ntp1.aliyun.com
# 查看一下时间是否变化
date -R

4. 下载

jdk-8u301-linux-x64.tar.gzzookeeper3.7.0.tar.gzhadoop-3.3.2.tar.gz

分别拷贝到node-01,node-02,node-03三台服务器的中

二、安装软件(3台linux服务做同样操作)

1. JDK

1)删除openjdk(没有可以忽略此步)

先在shell中执行 rpm -qa|grep jdk ,再执行 yum -y remove copy-jdk-configs-*

2)将 jdk-8u301-linux-x64.tar.gz拷贝到 /usr/local 目录中,并解压, tar -zxvf jdk-8u301-linux-x64.tar.gz

3)在shell中 执行 vim /etc/profile,将下面内容放入到文件最下面

# jdk 1.8
export JAVA_HOME=/usr/local/jdk1.8.0_301
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

4)创建软连接,  后续hadoop会用到

ln -s /usr/local/jdk1.8.0_301/bin/java /bin/java

2. Zookeeper

1)将 zookeeper3.7.0.tar.gz拷贝到 /opt 目录中,并解压, tar -zxvf zookeeper3.7.0.tar.gz

2)chown -R admin:admin /home/big_data/zookeeper-3.7.0/

3)在shell中 执行 vim /etc/profile,将下面内容放入到文件最下面

# zookeeper
export ZOOKEEPER_HOME=/home/big_data/zookeeper-3.7.0
export PATH=$PATH:$ZOOKEEPER_HOME/bin

4)执行 cp /home/big_data/zookeeper-3.7.0/conf/zoo_sample.cfg /home/big_data/zookeeper-3.7.0/conf/zoo.cfg,并修改其中内容,详细如下,修改dataDir的值,追加server.1 2 3 

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/zookeeper/data
clientPort=2181
server.1=node-01:2888:3888
server.2=node-02:2888:3888
server.3=node-03:2888:3888

分别进入到每台的 /var/zookeeper/data 目录中,创建myid文件,写入对应的 1 、2、 3值

3. Hadoop安装及配置

首先登陆到node-01节点,登录用户 hadoop

1)将 hadoop-3.3.2.tar.gz拷贝到 /opt 目录中,并解压, tar -zxvf  hadoop-3.3.2.tar.gz

2)配置环境变量

# hadoop 3.3.2

export HADOOP_HOME=/home/big_data/hadoop-3.3.2

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

3)cd /home/big_data/hadoop-3.3.2/etc/hadoop/,修改hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、workers

==================hadoop-env.sh

尾端追加:

export JAVA_HOME=/usr/local/jdk1.8.0_301
export HADOOP_HOME=/home/big_data/hadoop-3.3.2
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop

# 默认在/tmp目录下,linux会定期清理,如果不改,集群stop-all.sh 无法正常关闭
export HADOOP_PID_DIR=/var/hadoop/pid

# 设置hadoop内部应用的环境变量
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME

# 链接库的相关设置
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$HADOOP_COMMON_LIB_NATIVE_DIR
 

==================core-site.xml

<configuration>
  <property>
    <name>fs.defaultFS</name>

    <!--  注意逻辑名不能带下划线“_” ,不然hdfs不能正常访问-->
    <value>hdfs://dfs-cluster</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/var/hadoop/ha/data</value>
  </property>
  <property>
    <name>hadoop.http.staticuser.user</name>
    <value>admin</value>
  </property>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>node-01:2181,node-02:2181,node-03:2181</value>
  </property>

  <!-- 伪装/代理成超级用户,后续hiveserver2会用到,这个会有安全问题,不用hive2可以不加 -->

  <!-- 所有ip登录的所有用户都会被伪装成为hadoop的admin用户 -->
  <property>
    <name>hadoop.proxyuser.admin.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.admin.groups</name>
    <value>*</value>
  </property>

</configuration>

==================hdfs-site.xml

<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>dfs-cluster</value>
  </property>
  <property>
    <name>dfs.ha.namenodes.dfs-cluster</name>
    <value>nn1,nn2, nn3</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.dfs-cluster.nn1</name>
    <value>node-01:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.dfs-cluster.nn2</name>
    <value>node-02:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.dfs-cluster.nn3</name>
    <value>node-03:8020</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.dfs-cluster.nn1</name>
    <value>node-01:9870</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.dfs-cluster.nn2</name>
    <value>node-02:9870</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.dfs-cluster.nn3</name>
    <value>node-03:9870</value>
  </property>
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://node-01:8485;node-02:8485;node-03:8485/dfs-cluster</value>
  </property>
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>${hadoop.tmp.dir}/jn</value>
  </property>
  <property>
    <name>dfs.client.failover.proxy.provider.dfs-cluster</name>
 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/admin/.ssh/id_dsa</value>
  </property>
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
</configuration>

==================mapred-site.xml

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>mapreduce.application.classpath</name>  <value>$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/hdfs/lib/*:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_HOME/share/hadoop/yarn/*:$HADOOP_HOME/share/hadoop/yarn/lib/*</value>
  </property>
  <!-- 下面两个属性是做sqoop2时追加的-->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>fireslate.cis.umac.mo:10020</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>fireslate.cis.umac.mo:19888</value>
  </property>
</configuration>
 

==================yarn-site.xml

<configuration>
  <!-- Site specific YARN configuration properties -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.env-whitelist</name>
    <value>
 JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME
    </value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yarn-cluster</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>node-03</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>node-02</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>node-03:8088</value>
  </property>

  <property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>node-02:8088</value>
  </property>
  <property>
    <name>hadoop.zk.address</name>
    <value>node-01:2181,node-02:2181,node-03:2181</value>
  </property>
  <property>
     <name>yarn.nodemanager.resource.memory-mb</name>
     <value>2048</value>
  </property>

  <!-- 启用日志聚集功能 -->
  <property>
      <description>Whether to enable log aggregation</description>
      <name>yarn.log-aggregation-enable</name>
      <value>true</value>
  </property>
  <!-- 日志保存时间 -->
  <property>
      <name>yarn.log-aggregation.retain-seconds</name>
      <value>-1</value>
  </property>
  <property>
      <name>yarn.nodemanager.remote-app-log-dir</name>
      <value>/logs/yarn</value>
  </property>
</configuration>

==================workers

node-01

node-02

node-03

4)分发hadoop-3.3.2工程到node-02、node-03

执行如下3条命令: 

cd /home; 

scp -R /home/big_data/hadoop-3.3.2/ node-02:$(pwd)  ;

scp -R /home/big_data/hadoop-3.3.2/ node-03:$(pwd)

三、启动软件(有序)

1. 启动zookeeper(过半成功)

在node-01、node-02、node-03 三台服务器上分别执行命令:

1)  su hadoop    2) zkServer.sh start  3)jps  发现有 QuorumPeerMain 即成功

2.启动hadoop

1)启动Journalnode

在node-01、node-02、node-03 三台服务器上分别执行命令:hdfs --daemon start journalnode   

全部执行完成后 通过jps命令查看有JournalNode,即成功

2)格式化Namenode

在node-01服务器上执行命令:

        a)格式化:hdfs namenode -format

        输出的日志倒数第10行左右的末尾,若有 ... has been successfully formated,即成功

        b)启动:hdfs --daemon start namenode

node-02、node-03两台服务器上执行命令:

        c)同步数据:hdfs namenode -bootstrapStandby

       输出的日志倒数第10行左右的末尾,若有 ... has been successfully formated,即成功

在node-02、node-03两台服务器上执行命令:

        d)启动:hdfs --daemon start namenode

3)格式化zkfc

在node-01服务器上执行:

stop-all.sh

hdfs zkfc -formatZK

4)启动Datanode

在node-01、node-02、node-03 三台服务器上分别执行命令:hdfs --daemon start datanode  

5)设置namenode主节点

在node-01服务器上执行命令:hdfs haadmin -transitionToActive nn1

注:也可以改成 nn2、nn3,  对应到hdfs-site.xml中dfs.ha.namenodes.mycluster 的某value值即可

另外,执行的时候可能会报错,改成 hdfs haadmin -transitionToActive --forcemanual nn1

主从设置命令:hdfs haadmin -transitionToActive / -transitionToStandby  xxx

6)启动yarn集群

在node-01服务器上,执行命令:start-yarn.sh

7)  启动集群(上面的删除线部分忽略)

在node-01服务器上执行:start-all.sh

四、启动确认

进程:在任意一台的shell中执行命令-  jps 或 jps -l,会出现如下进程
QuorumPeerMain
JournalNode
NameNode
DataNode
DFSZKFailoverController
ResourceManager
NodeManager

namenode:node-01:9870 、node-02:9870、node-03:9870  两台为standby、一台为active

yarn:node-02:8088、node-03:8088,因为yarn的resourcemanager只配置两台,node-02、03

五、测试确认

创建文件夹:hdfs dfs -mkdir -p /word/count

本地创建一个 word.txt文件,上传:hdfs dfs -put word.txt /word/count

cd $HADOOP_HOME/share/hadoop/

六、总结

hdfs启动:start-dfs.sh

hdfs关闭:stop-dfs.sh

yarn启动:start-yarn.sh

yarn关闭:stop-yarn.sh

启动全部:start-all.sh

关闭全部:stop-all.sh

单节点启动:hadoop-daemon.sh start xxx;   hdfs --daemon start xxx; 

                     yarn --daemon start resourcemanager / nodemanager

hadoop dfs、hadoop fs和hdfs dfs的区别_SunnyZ-L的博客-CSDN博客_hdfs命令和hadoop命令的区别

太晚了,先睡觉啦 ...  抽空进行细节完善。

# jdk 1.8
export JAVA_HOME=/usr/local/jdk1.8.0_301
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

# zookeeper
export ZOOKEEPER_HOME=/home/big_data/zookeeper-3.7.0
export PATH=$PATH:$ZOOKEEPER_HOME/bin

# hadoop 3.3.2
export HADOOP_HOME=/home/big_data/hadoop-3.3.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

# hbase 2.4.11
export HBASE_HOME=/home/big_data/hbase-2.4.11
export PATH=$PATH:$HBASE_HOME/bin

# hive 3.1.3
export HIVE_HOME=/home/big_data/hive-3.1.3
export PATH=$PATH:$HIVE_HOME/bin

# spark 3.2.1
export SPARK_HOME=/home/big_data/spark-3.2.1
# 先不配置path
export PATH=$PATH:$SPARK_HOME/bin

# scala 2.13.8, spark3.2.1的构建版本
export SCALA_HOME=/usr/local/scala-2.13.8
export PATH=$PATH:$SCALA_HOME/bin

常见问题:

Hadoop停止yarn集群时WARNING: nodemanager did not stop gracefully after 5 seconds - 知乎

hadoop3.1.3下MapReduce操作出现错误: 找不到或无法加载主类org.apache.hadoop.mapreduce.v2.app.MRAppMaster 问题解决方法_い木乄子゛的博客-CSDN博客_cannot resolve org.apache.hadoop:hadoop-annotation


 

# hadoop classpath

编辑 yarn-site.xml

# vim yarn-site.xml

<configuration>
    <property>
        <name>yarn.application.classpath</name>
        <value>输入刚才返回的Hadoop classpath路径</value>
    </property>
</configuration>

yarn查看日志方式

yarn application -list -appStates ALL

yarn logs -applicationId xxxx

浏览器访问地址:

hdfs: http://ip:9870

yarn: http://ip:8088/cluster

mr历史服务器:http://ip:19888

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值