暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hadoop3.1-端口变化及用户配置

Coding On Road 2018-12-19
1164

Hadoop3.x特性

根据官方change log介绍,hadoop3.x的一些新的特性,部分如下:

1、最低支持JDK1.8。不再支持JDK1.7

2、Yarn Timeline版本升为2.0

3、高可靠支持超过2NameNode节点。如果配置3NameNode5JournalNode

4、默认端口变化,具体变化如下:

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

更多变化,请参见hadoop 3.x官方文档,地址为:

http://hadoop.apache.org/docs/r3.1.1/index.html


同时增加用户配置如下:

    

配置用户在hadoop3.0中需要指定用户

start-dfs.shstop-dfs.sh文件的头部增加:HDFS_NAMENODE_USER=root

HDFS_DATANODE_USER=root

HDFS_SECONDARYNAMENODE_USER=root

HDFS_DATANODE_SECURE_USER=root

start-yarn.sh,stop-yarn.sh头部增加:

YARN_RESOURCEMANAGER_USER=root

YARN_NODEMANAGER_USER=root


具体过程:


Hadoop伪分布式安装与配置

Hadopp伪分布式,即在单机模式下运行Hadoop。在这种环境下,将运行一个NameNode进程和一个SecondaryNameNode进程,一个ResourceManager进程及一个NodeManager和一个DataNode进程。共5个进程。其中SecondaryNameNode用于帮助NameNode进行日志和镜像文件的合并。ResourceManger用于处理MapReduce任务,它运行在yarn之上。NodeManager用于处理与DataNode的通讯和数据处理,DataNode用于存取数据。

伪分布式可以让读者快速的学习hdfs的命令及开发Mapreduce应用。对于学习hadoop有很大的帮助。

在安装之前,笔者有以下建议:

Ø 配置静态ip地址。虽然是单机模式,但也建议配置静态的ip地址,这有助于以后配置集群环境时,养成良好的习惯。

Ø 修改主机名称serverXX,本机的ip地址为:192.168.56.51则可以修改本主机的名称为server51

Ø 由于启动hadoop的各个进程使用的是ssh。所以,必须要配置本机免密码登录。本章后面的步骤会讲到如何配置ssh免密码登录。

Ø 关闭防火墙。如果你的CentOS7没有安装防火墙,可以不用关闭了,如果已经安装了,请检查防火墙的状态,如果是运行状态请关闭防火墙并禁用防火墙开机自动运行。

Ø 使用非root用户。笔者在写本书前看了很多其他的教程,这些教程大多以root用户做为操作用户。但在真实的环境中,一般root用户只做一些特殊的操作。所以,笔者还是建议使用非root用户。本书的作者为王健,所以,后面的操作,都以weangjian做为操作的用户。读者也可以自己创建一个用户。并将此用户添加到wheel组,以便于执行sudo命令。

1、配置静态IP地址

使用ssh登录CentOS7。然后使用ifconfig查看ip地址,如果没有ifconfig命令,可以使用sudo yum -y install net-tools安装ifconfig命令。其实在centOS7中,已经使用ip addr命令显示当前主机的ip地址。所以,你也可以不安装net-tools

$ ifconfig

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255

enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 192.168.56.201  netmask 255.255.255.0  

上例显示为两块网卡,其中enp0s3ip地址为:10.0.2.15此网卡为NAT网络,用于上网。enp0s8ip地址为:192.168.56.51,此网卡为HostOnly网络,用于与宿主机进行通讯。我们要修改的就是enp0s8这个网卡,将它的ip地址设置为固定ip

ip设置保存在文件中,这个目录为:/etc/sysconfig/network-scripts/。使用cd命令,切换到这个目录下。使用ls显示这个目录下的所有文件,你可能只会发现:ifcfg-enp0s3这个文件,现在使用 cp命令将ifcfg-enp0s3拷贝一份为ifcfg-enp0s8

$ sudo cp ifcfg-enp0s3 ifcfg-enp0s8

使用vim命令修改为静态ip地址:

$ sudo vim ifcfg-enp0s8

将原来的dhcp修改成static即静态的地址,并设置具体的ip地址。其中,每一个网卡,都应该具有唯一的UUID,所以建议修改任意的一个值,以便于与之前的enp0s3uuid不同。部分修改内容如下:

BOOTPROTO="static"

NAME="enp0s8"

UUID="d2a8bd92-cf0d-4471-8967-3c8aee78d101"

DEVICE="enp0s8"

IPADDR="192.168.56.51"

现在重新启动网络:

$ sudo systemctl restart network.service

由于重新启动网络,会修改ip地址,所以,在重新启动网络以后,必须要使用新的ip地址重新登录。(建议使用xshell远程登录)

ssh 192.168.56.51

2、修改主机名称

使用hostname命令,检查当前主机的名称:

$ hostname

localhost

使用hostnamectl命令,修改主机的名称:

$ sudo hostnamectl set-hostname server51

重新检查主机名称,可以发现,已经修改成了server51

3、配置hosts文件

hosts文件是本地DNS解析文件。配置此文件,可以根据主机名找到对应的ip地址。

使用vi命令,打开这个文件,并在文件中追加以下配置:

$ sudo vim etc/hosts

192.168.56.51server51

3、关闭防火墙

CentOS7默认情况下,没有安装防火墙。你你以通过命令sudo firewall-cmd --state 检查防火墙的状态,如果显示 command not found一般为没有安装防火墙,此步可以忽略。以下命令检查防火墙的状态:

#firewall-cmd --state

running

running表示,防火墙正在运行。以下命令用于停止和禁用防火墙:

#systemctl stop firewalld.service

#systemctl disable firewalld.service

4、配置当前用户免密码登录自己

使用ssh登录另一台主机,必须要输入密码,即使登录当前主机也必须要输入密码,检查登录当前主机是否输入密码:

# ssh server51

wangjian@server51's password:

正如上面显示的,如果提示输入密码,则没有ssh免密码登录。可以使用ssh-keygen命令生成公钥和私钥文件,并将公钥文件拷贝到被ssh登录的主机上。以下是ssh-keygen命令,输入以后直接按两次回车即可以生成公钥和私钥文件:

#ssh-keygen -t rsa

生成的公钥和私钥文件,将被放到~/.ssh/目录下。其中id_rsa文件为私钥文件,rd_rsa.pub为公钥文件。现在我们再使用ssh-copy-id将公钥文件发送到目标主机。由于是登录本机,所以,直接输入本本的名称即可:

#ssh-copy-id server51

此命令执行以后,会在~/.ssh目录下,多出一个用于认证的文件,其中保存了某个主机可以登录的公钥信息,这个文件为:~/.ssh/authorized_keys。如果读者感兴趣,可以使用cat命令查看这个文件中的内容。

现在再使用ssh server51登录本机,你将发现,不用再输入密码,即可以直接登录成功。

5、安装和配置hadoop

hadoop的压缩包上传到目录/opt

解压到这个目录,使用tar命令:

#tar -zxvf /opt/hadoop-3.x.tar.gz -C /opt/

配置hadoop-env.sh文件

配置JAVA_HOME,在配置文件hadoop-env.sh文件中配置:

export JAVA_HOME=/usr/local/java/jdk1.8

配置core-site.xml文件

注意hadoop3.0以后hdfs的端口号建议为:9820

<configuration>

    <property>

        <name>fs.defaultFS</name>

        <value>hdfs://server51:9820</value>

    </property>

    <property>

        <name>hadoop.tmp.dir</name>

        <value>/opt/datas/tmp</value>

    </property>

</configuration>

配置hdfs-site.xml文件

<configuration>

    <property>

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

        <value>/opt/datas/dfs/nn</value>

    </property>

    <property>

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

       <value>/opt/datas/dfs/dn</value>

    </property>

    <property>

       <name>dfs.replication</name>

       <value>1</value>

    </property>

    <property>

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

      <value>/opt/datas/dfs/snn</value>

    </property>

    <property>

        <name>dfs.permissions.enabled</name>

        <value>false</value>

    </property>

</configuration>

配置mapred-site.xml文件

$ vim mapred-site.xml

<configuration>

    <property>

        <name>mapreduce.cluster.local.dir</name>

        <value>/opt/datas/mapred/local</value>

    </property>

    <property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

    </property>

</configuration>

配置yarn-site.xml文件:

<configuration>

    <property>

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

        <value>server51</value>

    </property>

    <property>

        <name>yarn.nodemanager.local-dirs</name>

        <value>/opt/datas/nm-local-dir</value>

    </property>

    <property>

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

        <value>mapreduce_shuffle</value>

    </property>

</configuration>

通过hadoop classpath命令获取所有classpath的目录,然后配置到上述文件中:

使用hadoop classpath即可获取所有classpath

 

<property>

      <name>yarn.application.classpath</name>               

<value>

/opt/hadoop-3.x/etc/hadoop:/opt/hadoop-3.x/share/hadoop/common/lib/*:/opt/hadoop-3.x/share/hadoop/common/*:/opt/hadoop-3.x/share/hadoop/hdfs:/opt/hadoop-3.x/share/hadoop/hdfs/lib/*:/opt/hadoop-3.x/share/hadoop/hdfs/*:/opt/hadoop-3.x/share/hadoop/mapreduce/lib/*:/opt/hadoop-3.x/share/hadoop/mapreduce/*:/opt/hadoop-3.x/share/hadoop/yarn:/opt/hadoop-3.x/share/hadoop/yarn/lib/*:/opt/hadoop-3.x/share/hadoop/yarn/*

</value>

 </property>

 

配置workers文件

这个文件在之前的版本叫做slaves,但功能一样。主要用于在启动时启动DataNodeNodeManager

server51

 

配置用户在hadoop3.0中需要指定用户

start-dfs.shstop-dfs.sh文件的头部增加:HDFS_NAMENODE_USER=root

HDFS_DATANODE_USER=root

HDFS_SECONDARYNAMENODE_USER=root

HDFS_DATANODE_SECURE_USER=root

start-yarn.sh,stop-yarn.sh头部增加:

YARN_RESOURCEMANAGER_USER=root

YARN_NODEMANAGER_USER=root

 

 

6、配置hadoop环境变量

可以以独立的方式配置环境变量,只需要在/etc/profile.d/目录下创建一个sh文件即可。这样做的好处是文件相对比较独立。

$ sudo vim etc/profile.d/hadoop.sh

并在里面添加以下内容:

#!/bin/sh

export HADOOP_HOME=/opt/hadoop-3.x

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

使用 source命令,让环境变量生效:

$source etc/profile

然后使用hdfs version查看命令环境变量是否生效,如果配置成功,则会显示hadoop的版本:

[wangjian@weric101 weric]$ hdfs version

Hadoop 3.x

7、初始化hadoop的文件系统

hadoop在使用之前,必须要先初始化hdfs文件系统,初始化的文件系统将会生成为hadoop.tmp.dir配置的目录下,即上面配置的/opt/hadoop_tmp_dir目录下。

$hdfs namenode -format

在执行命令完成以后,请在输出的日志中,找到:

Storage directory /opt/hadoop_tmp_dir/dfs/name has been successfully formatted.

这句话,即为初始化成功。

8、启动hdfs和yarn

启动和停止hdfsyarne的脚本在$HADOOP_HOME/sbin目录下。其中start-dfs.sh为启动hdfs的脚本,start-yarn.sh为启动ResourceManager的脚本 。以下分另启动dfsyarn:

$ hadoop-3.x/sbin/start-dfs.sh

$ hadoop-3.x/sbin/start-yarn.sh

启动完成以后,通过jps来查看java进程快照,你会发现有五个进程正在运行:

$ jps

2608 NameNode

2737 DataNode

3505 Jps

2898 SecondaryNameNode

3156 NodeManager

3055 ResourceManager

其中:NameNodeSecondaryNameNodeDataNode是通过start-dfs.sh脚本启动的。ResourceManagerNodeManagerstart-yarn.sh脚本启动的。

在启动成功以后,也可以通过 http://server51:9870查看namenode的信息,如图2.3.1示:

 

2.3.1

可以通过http://192.168.56.101:8088查看mapreduce的信息,如图2.3.2所示:

 

2.3.2

至此,hadoop单机即伪分布式模式安装和配置成功。但是万里长征,我们这才是小小的一步。以下将通过hadoophdfs命令,操作hadoophdfs文件系统。



文章转载自Coding On Road,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论