1、环境准备

系统:

  • centos6.5 

  • JDK1.8

创建hadoop安装目录目录

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

创建环境脚本

vim /etc/profile.d/hadoop.sh

内容如下:

export HADOOP_PREFIX=/bdapps/hadoopexport PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbinexport 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 hadoopuseradd -g hadoop yarnuseradd -g hadoop hdfsuseradd -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 logschmod g+w logschown -R yarn:hadoop ./*

3、配置hadoop

etc/hadoop/core-site.xml

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

    
        
fs.defaultFS
        
hdfs://localhost:8020
        
true
    

etc/hadoop/hdfs-site.xml

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

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

解释:

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

dfs.namenode.name.dir   namenode的路径

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

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

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

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

dfs.permissions
false

这个配置意思是不对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

其配置示例如下面的内容

    
        
mapreduce.framework.name
        
yarn
    

etc/hadoop/yarn-site.xml

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

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

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

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 itemsdrwxr-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 /testFound 1 items-rw-r--r--   1 hdfs supergroup        223 2018-03-26 13:55 /test/fstab

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

$ hdfs dfs -cat /test/fstabUUID=dbcbab6c-2836-4ecd-8d1b-2da8fd160694       /       ext4    defaults        1       1tmpfs   /dev/shm        tmpfs   defaults        0       0devpts  /dev/pts        devpts  gid=5,mode=620  0       0sysfs   /sys    sysfs   defaults        0       0proc    /proc   proc    defaults        0       0dev/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 namenodestarting namenode, logging to /bdapps/hadoop/logs/hadoop-hdfs-namenode-SRV-OPS01-LINTEST01.out$ jps99466 NameNode99566 Jps

启动secondarynamenode

hadoop-daemon.sh start secondarynamenodestarting secondarynamenode, logging to /bdapps/hadoop/logs/hadoop-hdfs-secondarynamenode-SRV-OPS01-LINTEST01.out$ jps100980 SecondaryNameNode101227 Jps99466 NameNode

启动datanode

$ hadoop-daemon.sh start datanodestarting datanode, logging to /bdapps/hadoop/logs/hadoop-hdfs-datanode-SRV-OPS01-LINTEST01.out$ jps101617 DataNode100980 SecondaryNameNode101767 Jps99466 NameNode

启动yarn集群

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

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

启动resourcemanager

yarn-daemon.sh start resourcemanagerstarting resourcemanager, logging to /bdapps/hadoop/logs/yarn-yarn-resourcemanager-SRV-OPS01-LINTEST01.out$ jps110218 Jps109999 ResourceManager

启动nodemanager

yarn-daemon.sh start nodemanagerstarting nodemanager, logging to /bdapps/hadoop/logs/yarn-yarn-nodemanager-SRV-OPS01-LINTEST01.out$ jps111061 Jps110954 NodeManager109999 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:803218/03/26 16:07:02 INFO input.FileInputFormat: Total input paths to process : 118/03/26 16:07:02 INFO mapreduce.JobSubmitter: number of splits:118/03/26 16:07:02 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1522044437617_000118/03/26 16:07:02 INFO impl.YarnClientImpl: Submitted application application_1522044437617_000118/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_000118/03/26 16:07:10 INFO mapreduce.Job: Job job_1522044437617_0001 running in uber mode : false18/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 successfully18/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    10       101       2UUID=dbcbab6c-2836-4ecd-8d1b-2da8fd160694       1defaults        4dev/vdb1        1devpts  2ext4    1gid=5,mode=620  1none    1proc    2sw      1swap    1sysfs   2tmpfs   2

问题:

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

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

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

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

dfs.permissions
false

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

例如:

image.png