hadoop伪分布式部署

1、环境准备

系统:

  • centos6.5 

  • JDK1.8

创建hadoop安装目录目录

mkdir /bdapps
tar xf hadoop-2.7.5.tar.gz -C /bdapps/
cd /bdapps/
ln -sv hadoop-2.7.5 hadoop
cd hadoop

创建环境脚本

vim /etc/profile.d/hadoop.sh

内容如下:

export HADOOP_PREFIX=/bdapps/hadoop

export PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbin

export HADOOP_YARN_HOME=${HADOOP_PREFIX}

export HADOOP_MAPPERD_HOME=${HADOOP_PREFIX}

export HADOOP_COMMON_HOME=${HADOOP_PREFIX}

export HADOOP_HDFS_HOME=${HADOOP_PREFIX}

2、创建用户和组

出于安全等目的,通常需要用特定的用户来运行hadoop不同的守护进程,例如,以hadoop为组,分别用三个用户yarn、hdfs、和mapred来运行相应的进程

groupadd hadoop
useradd -g hadoop yarn
useradd -g hadoop hdfs
useradd -g hadoop mappred

创建数据和日志目录

hadoop需要不同权限的数据和日志目录,这里以/data/hadoop/hdfs为hdfs数据存储目录。

确保hdfs用户对/data/目录有权限

mkdir -pv /data/hadoop/hdfs/{nn,dn,snn}
chown -R hdfs:hadoop /data/hadoop/hdfs/

然后,在hadoop的安装目录中创建logs目录,并修改hadoop所有文件的属主和属组

cd /bdapps/hadoop/
mkdir logs
chmod g+w logs
chown -R yarn:hadoop ./*

3、配置hadoop

etc/hadoop/core-site.xml

core-site.xml文件包含了NameNode主机地址以及其监听RPC端口等信息,对于伪分布式模型的安装来说,其主机地址为localhost。NameNode默认使用的RPC端口为8020。其简要的配置内容如下所示

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:8020</value>
        <final>true</final>
    </property>
</configuration>

etc/hadoop/hdfs-site.xml

hdfs-site.xml主要用于配置HDFS相关的属性,例如复制因子(即数据块的副本数)、NN和DN用于存储数据的目录等。数据块的副本数对于伪分布式的Hadoop应该为1,而NN和DN用于存储的数据的目录为前面的步骤中专门为其创建的路径。另外,前面的步骤中也为SNN创建了相关的目录,这里也一并配置其为启用状态。

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///data/hadoop/hdfs/nn</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///data/hadoop/hdfs/dn</value>
    </property>
    <property>
        <name>fs.checkpoint.dir</name>
        <value>file:///data/hadoop/hdfs/snn</value>
    </property>
    <property>
        <name>fs.checkpoint.edits.dir</name>
        <value>file:///data/hadoop/hdfs/snn</value>
    </property>
</configuration>

解释:

dfs.replication  副本数量为1,伪分布式部署是将所有角色部署在本地,所以副本只在本地保留一份

dfs.namenode.name.dir   namenode的路径

dfs.datanode.data.dir   数据节点的路径

dfs.dcheckpoint.dir     检查点文件存放路径

fs.checkpoint.edit.dir  检查点编辑目录

注意:如果需要其他用户对hdfs有写入权限,还需要在hdfs-site.xml添加一项属性定义。

<property>
<name>dfs.permissions</name>
<value>false</value>
</property>

这个配置意思是不对dfs的权限做严格检查,这样其他用户就有写入权限

etc/hadoop/mapred-site.xml

mapred-site.xml文件用于配置集群的MapReduce framework,此处应该制定使用yarn,另外的可用值还有local和classic。mapred-site.xml.template,只需要将其复制mapred-site.xml即可。

cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

其配置示例如下面的内容

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

etc/hadoop/yarn-site.xml

yarn-site.xml 用于配置YARN进程及YARN的相关属性,首先需要指定ResourceManager守护进程的主机和监听的端口,对于伪分布式模型来讲,其主机为localhost,

默认的端口为8032;其次需要指定ResourceManager使用的scheduler,以及NodeManager的辅助服务。一个简要的配置示例如下所示:

<configuration>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>localhost:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>localhost:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>localhost:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>localhost:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>localhost:8088</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.auxservices.mapreduce_shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
    </property>
</configuration>

etc/hadoop/hadoop-env.sh和etc/hadoop/yarn-env.sh

hadoop的各守护进程依赖于JAVA_HOME的环境变量,如果有类似于前面步骤中通过/etc/profile.d/java.sh全局配置定义的JAVA_HOME变量即可正常使用。不过如果像我hadoop定义依赖到的特定JAVA环境,也可以编辑这两个脚本文件,为其JAVA_HOME取消注释并配置合适的值即可。此外,hadoop大多数守护进程默认使用的堆大小为1GB,但现实应用中,可能需要对其各类进程的堆内存大小做出调整,这只需要编辑此两者文件中的相关环境变量值即可。例如HADOOP_HEAPSIZE、HADOOP_JOB_HISTORY_HEAPSIZE、JAVA_HEAP_SIZE和YARN_HEAP_SIZE等。

slave文件

slave文件存储了当前集群所有slave节点的列表,对于伪分布式模型,其文件内容仅应该为localhost,这特的确是这个文件的默认值。因此,为分布式模型中,次文件的内容保持默认即可。

4、格式化HDFS

在HDFS的NN启动之前需要先初始化其用于存储数据的目录。如果hdfs-site.xml中dfs.namenode.name.dir属性指定的目录不存在,格式化命令会自动创建之;如果事先存在,请确保其权限设置正确,此时格式操作会清除其内部的所有数据并重新建立一个新的文件系统,需要以hdfs用户的身份执行如下命令

hdfs namenode -format

hdfs 命令

查看dhfs文件系统/目录上有哪些文件和目录,默认是为空

$ hdfs dfs -ls /

在hdfs文件系统上创建测试目录test

$ hdfs dfs -mkdir /test
$ hdfs dfs -ls /       
Found 1 items
drwxr-xr-x   - hdfs supergroup          0 2018-03-26 13:48 /test

注意:刚才创建的文件的属组是supergroup,并不属于hadoop,所有其他属组为hadoop的用户对改文件没有写入权限,前面hdfs-site.xml文件中有一个配置是

dfs.permissions,如果设置为false,则可赋予hadoop属组的用户写入权限

将本地/etc/fstab 文件上传到hdfs文件系统 /test目录中

$ hdfs dfs -put /etc/fstab /test/fstab
$ hdfs dfs -ls /test
Found 1 items
-rw-r--r--   1 hdfs supergroup        223 2018-03-26 13:55 /test/fstab

查看dhfs文件系统上某个文件内容 使用cat命令

$ hdfs dfs -cat /test/fstab

UUID=dbcbab6c-2836-4ecd-8d1b-2da8fd160694       /       ext4    defaults        1       1
tmpfs   /dev/shm        tmpfs   defaults        0       0
devpts  /dev/pts        devpts  gid=5,mode=620  0       0
sysfs   /sys    sysfs   defaults        0       0
proc    /proc   proc    defaults        0       0
dev/vdb1        none    swap    sw      0       0

5、启动hadoop

切换到hdfs用户

su - hdfs

hadoop2的启动等操作可通过其位于sbin路径下的专用脚本进行

  • NameNode:hadoop-daemon.sh(start|stop)namenode

  • DataNode: hadoop-daemon.sh (start|stop) datanode

  • Secondary NameNode: hadoop-daemon.sh (start|stop) secondarynamenode

  • ResourceManager: yarn-daemon.sh(start|stop) nodemanager

启动HDFS服务

HDFS有三个守护进程:namenode、datanode和secondarynamenode,他们都表示通过hadoop-daemon.sh脚本启动或停止。以hdfs用户执行相关命令即可,如下所示:

启动namenode

hadoop-daemon.sh start namenode
starting namenode, logging to /bdapps/hadoop/logs/hadoop-hdfs-namenode-SRV-OPS01-LINTEST01.out

$ jps
99466 NameNode
99566 Jps

启动secondarynamenode

hadoop-daemon.sh start secondarynamenode
starting secondarynamenode, logging to /bdapps/hadoop/logs/hadoop-hdfs-secondarynamenode-SRV-OPS01-LINTEST01.out

$ jps
100980 SecondaryNameNode
101227 Jps
99466 NameNode

启动datanode

$ hadoop-daemon.sh start datanode
starting datanode, logging to /bdapps/hadoop/logs/hadoop-hdfs-datanode-SRV-OPS01-LINTEST01.out

$ jps
101617 DataNode
100980 SecondaryNameNode
101767 Jps
99466 NameNode

启动yarn集群

切换成yarn用户登录系统,再启动服务

YARN有两个守护进程:resourcemanager和nodemanager,它们都可以通过yarn-daemon.sh脚本启动或者停止。以yarn用户执行相关命令即可。

启动resourcemanager

yarn-daemon.sh start resourcemanager
starting resourcemanager, logging to /bdapps/hadoop/logs/yarn-yarn-resourcemanager-SRV-OPS01-LINTEST01.out

$ jps
110218 Jps
109999 ResourceManager

启动nodemanager

yarn-daemon.sh start nodemanager
starting nodemanager, logging to /bdapps/hadoop/logs/yarn-yarn-nodemanager-SRV-OPS01-LINTEST01.out

$ jps
111061 Jps
110954 NodeManager
109999 ResourceManager

6、Web UU

HDFS和YARN ResourceManager各自提供了一个Web接口,通过这个接口可以检查HDFS集群以及YARN集群的相关状态信息,它们的访问接口分别为如下所求,具体使用中,需要将

NameNodeHost和ReourceManageHost 分别改为其相应的主机地址。

HDFS-NameNode http://<ResourceManagerHost>:50070/

YARN-ResourceManager         http://<ResourceManagerHost>:8088/

注意:yarn-site.xml文件中yarn.resourcemanager.webapp.address属性的值如果定义为“localhost:8088”, 则其WebUI仅监听于127.0.0.1地址上的8088端口

7运行测试程序

Hadoop-YARN 自带了许多样例程序,它们位于hadoop安装路径下的share/hadoop/mapreduce/目录里,其中的hadoop-mapreduce-examples可用作mapreduce程序测试

yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar wordcount /yarn/fstab /yarn/fstab.out

对hdfs文件系统上/yarn/fstab文件作单词统计,统计结果存放在/yarn/fstab.out文件中

18/03/26 16:07:01 INFO client.RMProxy: Connecting to ResourceManager at localhost/127.0.0.1:8032
18/03/26 16:07:02 INFO input.FileInputFormat: Total input paths to process : 1
18/03/26 16:07:02 INFO mapreduce.JobSubmitter: number of splits:1
18/03/26 16:07:02 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1522044437617_0001
18/03/26 16:07:02 INFO impl.YarnClientImpl: Submitted application application_1522044437617_0001
18/03/26 16:07:02 INFO mapreduce.Job: The url to track the job: http://localhost:8088/proxy/application_1522044437617_0001/
18/03/26 16:07:02 INFO mapreduce.Job: Running job: job_1522044437617_0001
18/03/26 16:07:10 INFO mapreduce.Job: Job job_1522044437617_0001 running in uber mode : false
18/03/26 16:07:10 INFO mapreduce.Job:  map 0% reduce 0%
18/03/26 16:07:15 INFO mapreduce.Job:  map 100% reduce 0%
18/03/26 16:07:20 INFO mapreduce.Job:  map 100% reduce 100%
18/03/26 16:07:20 INFO mapreduce.Job: Job job_1522044437617_0001 completed successfully
18/03/26 16:07:21 INFO mapreduce.Job: Counters: 49
        File System Counters
                FILE: Number of bytes read=272
                FILE: Number of bytes written=243941
                FILE: Number of read operations=0
                FILE: Number of large read operations=0
                FILE: Number of write operations=0
                HDFS: Number of bytes read=320
                HDFS: Number of bytes written=191
                HDFS: Number of read operations=6
                HDFS: Number of large read operations=0
                HDFS: Number of write operations=2
        Job Counters 
                Launched map tasks=1
                Launched reduce tasks=1
                Data-local map tasks=1
                Total time spent by all maps in occupied slots (ms)=2528
                Total time spent by all reduces in occupied slots (ms)=2892
                Total time spent by all map tasks (ms)=2528
                Total time spent by all reduce tasks (ms)=2892
                Total vcore-milliseconds taken by all map tasks=2528
                Total vcore-milliseconds taken by all reduce tasks=2892
                Total megabyte-milliseconds taken by all map tasks=2588672
                Total megabyte-milliseconds taken by all reduce tasks=2961408
        Map-Reduce Framework
                Map input records=6
                Map output records=36
                Map output bytes=367
                Map output materialized bytes=272
                Input split bytes=97
                Combine input records=36
                Combine output records=19
                Reduce input groups=19
                Reduce shuffle bytes=272
                Reduce input records=19
                Reduce output records=19
                Spilled Records=38
                Shuffled Maps =1
                Failed Shuffles=0
                Merged Map outputs=1
                GC time elapsed (ms)=153
                CPU time spent (ms)=1290
                Physical memory (bytes) snapshot=447442944
                Virtual memory (bytes) snapshot=4177383424
                Total committed heap usage (bytes)=293076992
        Shuffle Errors
                BAD_ID=0
                CONNECTION=0
                IO_ERROR=0
                WRONG_LENGTH=0
                WRONG_MAP=0
                WRONG_REDUCE=0
        File Input Format Counters 
                Bytes Read=223
        File Output Format Counters 
                Bytes Written=191

查看统计结果

$ hdfs dfs -cat /yarn/fstab.out/part-r-00000
/       1
/dev/pts        1
/dev/shm        1
/proc   1
/sys    1
0       10
1       2
UUID=dbcbab6c-2836-4ecd-8d1b-2da8fd160694       1
defaults        4
dev/vdb1        1
devpts  2
ext4    1
gid=5,mode=620  1
none    1
proc    2
sw      1
swap    1
sysfs   2
tmpfs   2

问题:

1、其他服务器无法连接hdfs的8020端口服务?

这是因为core-site.xml文件中配置的是localhost:8020,本机只会监听在127.0.0.1地址上,要改成服务器实际IP才行

2、其他用户在hdfs文件系统中没有写入权限?

默认只有hadoop用户(以hadoop用户启动服务)有写入权限,如果希望其他用户有写入权限,可以在hdfs-site.xml文件中加入以下配置

<property>
<name>dfs.permissions</name>
<value>false</value>
</property>

或者修改hdfs文件系统上某个目录的权限:

例如:

hadoop伪分布式部署

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/195117.html

(0)
上一篇 2021年11月16日
下一篇 2021年11月16日

相关推荐

发表回复

登录后才能评论