Hadoop伪集群模式部署

Hadoop平台部署

此前未曾接触过Hadoop大数据平台相关技术,个人理解大数据平台应该是对海量数据基于分布式存储和运算的一个平台,应用场景应该多为数据挖掘,数据分析等,hadoop的运行原理暂时还没有弄明白,所以暂时没有记录,今天只记录一下hadoop环境的部署。

尝试去部署一下。hadoop平台分为单机模式,伪集群模式,分布式模式。这里先使用伪集群模式部署,后面在做真正的分布式集群部署。

下面的过程按照顺序来依次进行

设置并规划hadoop所需的环境变量

安装JAVA环境变量

编译安装hadoop是需要完整的java环境,因此需要安装jdk和java的开发组件

[root@hadoop ~]# yum install java-1.7.0-openjdk.x86_64 -y

[root@hadoop ~]# yum install java-1.7.0-openjdk-devel.x86_64 -y
  • 将java添加环境变量,这里不加java环境变量到后面执行程序包时会提示错误
vim /etc/profile.d/java.sh

export JAVA_HOME=/usr
source /etc/profile.d/java.sh

解压hadoop源码包并设置环境变量

[root@hadoop ~]# mkdir /bdapps

[root@hadoop ~]# tar zxf hadoop-2.6.2.tar.gz -C /bdapps/

[root@hadoop bdapps]# ln -s hadoop-2.6.2/ hadoop
  • 为hadoopt添加环境变量
[root@hadoop 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}

#重读
[root@hadoop hadoop]# source /etc/profile.d/hadoop.sh 

创建运行hadoop进行的用户和相关目录

  • 创建相关用户
[root@hadoop ~]# groupadd hadoop
[root@hadoop ~]# useradd -g hadoop yarn
[root@hadoop ~]# useradd -g hadoop hdfs
[root@hadoop ~]# useradd -g hadoop mapred
  • 创建数据和日志目录

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

[root@hadoop ~]# mkdir -p /data/hadoop/hdfs/{nn,snn,dn}
[root@hadoop ~]# chown -R hdfs:hadoop /data/hadoop/hdfs/
  • 在hadoop安装目录中创建logs目录,并修改hadoop所有文件文件属主和属组,让logs拥有写权限,属主属于yarn,属组属于hadoop
[root@hadoop hadoop]# mkdir logs
[root@hadoop hadoop]# chmod g+w logs  #确保logs有写权限
[root@hadoop hadoop]# chown -R yarn:hadoop ./*

配置hadoop

  • 配置core-site.xml

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

[root@hadoop hadoop]# vim etc/hadoop/core-site.xml 

<configuration>
        <property>
          <name>fs.defaultFS</name>
          <value>hdfs://localhost:8020</value>
          <final>true</final>
        </property>
</configuration>
# 一个    <property>标签配置一个属性          
  • 配置hdfs-site.xml

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

[root@hadoop hadoop]# vim etc/hadoop/hdfs-site.xml 


<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.name.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>

#注意: 如果需要其他用户对hdfs有写入权限,还需要在hdfs-site.xml中添加一项属性定义:如下
<property>
          <name>dfs.permissions</name>
          <value>false</value>
</property>

  • 配置mapred-site.xml

mapred-sitexmlw文件用于配置集群的mapReduce framework ,此处应该指定使用yarn,另外的值还有local和classs,mapred-site.xml默认不存在,但是有模版文件,复制重命名即可

[root@hadoop hadoop]# cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
[root@hadoop hadoop]# vim etc/hadoop/mapred-site.xml

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

  • 配置yarn-site.xml

yarn-site.xml用于配置YARN进程及YARN的相关属性,首先需要指定resourcemanager守护进程的主机和监听的端口,对于伪分布式模式来讲,其主机为localhost,默认的端口为8032,其次需要指定的resourcemanager使用的scheduler,以及nodemanager的辅助服务,配置示例如下:

<configuration>

<!-- Site specific YARN configuration properties -->
  <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.resorce-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-service</name>
        <value>mapreduce_shuffle</value>
  </property>

  <property>
        <name>yarn.nodemanager.auxservice.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>

格式化HDFS

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

[root@hadoop hadoop]# su - hdfs
[hdfs@hadoop ~]$ hdfs namenode -format

...最后输出的信息 ...
18/10/13 23:18:30 INFO namenode.FSImage: Allocated new BlockPoolId: BP-1634116172-192.168.214.148-1539443910304
18/10/13 23:18:30 INFO common.Storage: Storage directory /data/hadoop/hdfs/nn has been successfully formatted.
18/10/13 23:18:30 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
18/10/13 23:18:30 INFO util.ExitUtil: Exiting with status 0
18/10/13 23:18:30 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop/192.168.214.148
************************************************************/

[hdfs@hadoop ~]$ ls /data/hadoop/hdfs/nn/
current
[hdfs@hadoop ~]$ ls /data/hadoop/hdfs/nn/current/
fsimage_0000000000000000000  fsimage_0000000000000000000.md5  seen_txid  VERSION

启动hadoop

  • 启动HDFS集群,需要切换到hdfs用户
[hdfs@hadoop ~]$ hadoop-daemon.sh start namenode

[hdfs@hadoop ~]$ hadoop-daemon.sh start secondarynamenode

[hdfs@hadoop ~]$ hadoop-daemon.sh start datanode

[hdfs@hadoop ~]$ jps #查看进程,可以使用jps -h 或者jps -v查看其它更多信息
1583 SecondaryNameNode
1701 Jps
1493 NameNode
1634 DataNode

另外:hadoop-daemon.sh的stop命令分别用于停止上面的三个守护进程
  • hdfs有很多命令可以使用,可以查看官方文档查看帮助

  • 在hdfs上创建目录和文件

[hdfs@hadoop ~]$ hdfs dfs -mkdir /test
[hdfs@hadoop ~]$ hdfs dfs -ls /
Found 1 items
drwxr-xr-x   - hdfs supergroup          0 2018-10-13 23:35 /test
  • 上传文件
[hdfs@hadoop ~]$ hdfs dfs -ls -R /
drwxr-xr-x   - hdfs supergroup          0 2018-10-13 23:38 /test
-rw-r--r--   1 hdfs supergroup        501 2018-10-13 23:38 /test/fstab
  • 启动yarn集群,同样要切换到yarn用户
[root@hadoop ~]# su - yarn

[yarn@hadoop ~]$ yarn-daemon.sh start resourcemanager
[yarn@hadoop ~]$ yarn-daemon.sh start nodemanager

# 同样stop指令用于停止上面的守护进程

到这里hadoop环境就完全启动起来了

运行测试程序

在hadoop安装目录下有提供测试的程序

[root@hadoop hadoop]# cd /bdapps/hadoop/share/hadoop/mapreduce/

[root@hadoop mapreduce]# ls
hadoop-mapreduce-examples-2.6.2.jar  ##有这个程序包

使用hdfs用户执行这个程序包(hdfs文件系统中只有hdfs用户有写权限)

[hdfs@hadoop ~]$ yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.2.jar 

#上面的指令后面可以跟不同的参数用来测试不同的数据

例如:统计/test/fstab中的单词数,并且保存至指定文件/test/fstab.out

[hdfs@hadoop ~]$ yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.2.jar wordcount /test/fstab /test/fstab.out
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注