大数据系列(一)hadoop生态圈基础知识后续之分布式hadoop环境搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zl592886931/article/details/89818448

环境介绍须知

我们按照3台服务器数量来搭建,1个namenode,2个databode,那么我们需要以下环境:

  • 三台linux系统的服务器,博主使用的是阿里云centos7
  • jdk8,请大家自行下载,这边博客不在讲述
  • hadoop3.x的tar包
  • 文中出现的hadoop_home皆为你自己安装的hadoop的路径

前置工作

  • 首先我们创建三台阿里云,当然如果你提前配置好vpc,就可以指定ip(关于基于云服务做网络架构设计,配合应用架构搭建企业级的业务集群,博主后期会更新相关架构文档,有兴趣的小伙伴可以等一等哦),如果没有VPC,那么直接使用ipv4(仅测试或者自己玩的环境)
  • 登陆官网下载hadoop3.x的tar包,传送门:https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz, 直接在服务器上wget即可
  • jdk下载(不做介绍),请小伙伴自行安装
  • 规划网络与服务器节点
  • 规划数据存储位置
  • 规划各个应用的用户与角色(因为这是非生产,用来学习,博主直接root用户走起来)

集群搭建

集群规划

我们前面说,我们用三台来搭建分布式集群,那么我们对服务器需要提前做些规划,网络划分记得是内网哦。

master服务器,是namenode节点,ip为:10.151.64.57
node1服务器,是datanode1节点,ip为:10.151.64.60
node2服务器,是datanode2节点,ip为:10.151.64.59

接下来,我们创建一些目录,作为临时数据、元数据等数据存储的地方,方便后续观察,因为这是非生产,所以博主 比较随意,直接在根目录下创建了(mkdir tmp hdfs hdfs/data hdfs/name):

目录/tmp,用来存储临时生成的文件
目录/hdfs,用来存储集群数据
目录hdfs/data,用来存储真正的数据
目录hdfs/name,用来存储文件系统元数据

配置HOSTS文件

为了更方便通信,在各个配置文件中无需写ip,我们直接在namenode节点上配置所有相关节点的host,然后统一覆盖所有节点即可:

vi /etc/hosts

10.151.64.57 master
10.151.64.60 node1
10.151.64.59 node2

配置免密码SSH链接

为了让namenode节点可以免密码直接链接各个datanode节点,我们做如下操作:

利用下面命令生成密钥,在生成的过程中一直按回车就可以:

ssh-keygen

将密钥加入到可信任列表,可以使用下面命令,也可以直接将id_rsa.pub内容复制在authorized_keys中:

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

将id_rsa.pub拷贝到node1节点的authorized_keys中,这样就默认node1是信任master服务器的

或者你可以使用scp将id_rsa.pub 拷贝在node1节点(需要输入node1连接密码),然后在使用 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys命令添加信任

在master节点上,使用ssh node1命令,如果可以正常登陆node1,则代表免密码配置成功

ssh node1

备注:你可以利用node1做为镜像服务器,如果环境配置好之后,直接打镜像,然后后续在添加服务器,利用这个镜像创建服务器即可,然后通过namenode配置hosts,将所有配置全部发送给所有节点进行覆盖。

配置hadoop

首先我们使用https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz下载下来的tar包进行解压,博主解压在家目录下(/root)

tar -zxf hadoop-3.1.2.tar.gz -C /root/

然后我们开始配置环境变量

vi /etc/profile

export JAVA_HOME=/usr/java/default
export HADOOP_HOME=/root/hadoop
export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

配置完毕之后,记得使用source /etc/profile才生效哦
然后我们使用下面命令查看是否生效,生效会有hadoop的具体信息

hadoop version

接下来我们开始配置hadoop的配置文件,配置文件在/hadoop_home/etc/hadoop下

core-site.xml:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/root/tmp</value>
    </property>
</configuration>

hdfs-site.xml:

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/root/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/root/data</value>
    </property>
    <!-- 副本系数,代表数据会存储几份,我们这里就设定1份即可 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
</configuration>

mapred-site.xml:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

yarn-site.xml:

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <!-- 这里使用hadoop classpath查看以下路径,如果这里不配置,可能会报Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster错误 -->
     <property>
        <name>yarn.application.classpath</name>
        <value>输入刚才返回的Hadoop classpath路径,记得以逗号分割</value>
    </property>
</configuration>

修改slaves(3.x修改为workers):

master
node1
node2

将修改的文件发送的另外的节点覆盖:rsync -av /root/hadoop/etc/ node2:/root/hadoop/etc/

如果出现以下错误:

[root@master sbin]# ./start-dfs.sh
Starting namenodes on [master]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [slave1]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

在/hadoop/sbin路径下:
将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

还有,start-yarn.sh,stop-yarn.sh顶部也需添加以下:

#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

hadoop3.x端口号已经更改,如下:

The patch updates the HDFS default HTTP/RPC ports to non-ephemeral ports. The changes are listed below:
Namenode ports: 50470 --> 9871, 50070 --> 9870, 8020 --> 9820
Secondary NN ports: 50091 --> 9869, 50090 --> 9868
Datanode ports: 50020 --> 9867, 50010 --> 9866, 50475 --> 9865, 50075 --> 9864

启动之后访问(记得安全组9870与8088端口要开放哦):

http://你的ip:9870
http://你的ip:8088/cluster

推荐一些阿里云搭建的博客

1.https://blog.csdn.net/zhangvalue/article/details/80870160
2.https://blog.csdn.net/bqw18744018044/article/details/79103931
3.:https://blog.csdn.net/a1135497143/article/details/81915489

猜你喜欢

转载自blog.csdn.net/zl592886931/article/details/89818448