1.1.1 部署(Apache Hadoop)伪分布式集群

前言        

        由于工作中一次偶然的接触,引起了对大数据浓厚的兴趣,有兴趣就要搞一搞,这是哥的个性,今天就要投入大数据怀抱,愿在这片森林之中做一颗小撸,安安静静的茁壮成长。在网上浏览了几位大神写的帖子后,对hadoop也有了一定了解,决定动动手,先搭建一个运行环境。关于hadoop版本的选择, 目前市场上存在的版本不少,用的比较主流的如:Apache(原生态,开源)、CDH(Cloudera)、Hortonworks等等,纠结了半天,出于更好的了解配置参数、配置文件、常规命令以及核心技术知识的目的,一键安装的不要,选择原生态开源,选择Apache版本,尝试部署Apache Hadoop2.7.3伪分布式集群。

一、准备 

1.1、准备安装包

      宿主机 (用于跑虚拟机,我用的是IMAC pro)

      VMware Fusion 8.5.3 (虚拟机软件,如果用的是windows系统,可选择VMware12 workstation系列)

      centos 6.8  64位 

      jdk-8u101-linux-x64.tar

      apache  hadoop-2.7.3.tar.gz

      secureCRT

1.2、制定一个简单的集群架构

 

主机名/HOSTNAME IP 运行角色
Master 192.168.79.172 NameNode、SecondaryNameNode、ResourceManager
Slave1 192.168.79.173 DataNode、NodeManager
Slave2 192.168.79.174 DataNode、NodeManager

1.3、安装centos虚拟机(需要安装三个虚拟机,分别为 Master、Slave1、Slave2)

      安装过程参考:https://jingyan.baidu.com/article/25648fc1a235c99191fd0008.html

二、配置centos虚拟机环境 

      centos虚拟机安装完成后,接下来就需要在每台虚拟机上配置hadoop运行的依赖环境

2.1、根据1.2架构设计,设定三台虚拟机IP

         此步骤所有虚拟机都要操作

         vi/etc/sysconfig/network-scripts/ifcfg-eth0

2.2、根据1.2架构设计,设定三台虚拟机主机名

         此步骤所有虚拟机都要操作

         [root@Master ~]# hostname Master
         [root@Master ~]# vi /etc/sysconfig/network    修改为 HOSTNAME=Master

        以上两步骤需要重启服务器后才生效

2.3、为三台虚拟机创建用户hadoop
         此步骤所有虚拟机都要操作
         user  add  hadoop
         若使用vm的快速安装在安装时已经配置好用户,所以以上步骤不用搞了。
2.4、根据1.2架构设计,为三台虚拟机配置Hosts记录
        vi/etc/hosts

       192.168.79.172 Master 

       192.168.79.173 Slave1 

       192.168.79.174 Slave2 

 
2.5、配置SSH,建立hadoop用户之间信任
        此步骤所有虚拟机都要操作

        切换至hadoop用户下执行ssh-keygen -t rsa,然后将自己的公钥以及其他服务器hadoop用户的公钥放置hadoop宿主目录下 的 .ssh/authorized_keys 中,注意     authorized_keys默认不存在需要手动创建,并且必须设置权限为600

步骤参考;

       1) 在namenode机器上,在hadoop用户下执行下面命令

        ssh-keygen -t rsa 

        遇到所有选项回车默认值即可

      2) 导入公钥到本机认证文件

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

      另外两台的公钥也放到这文件中再传到各个节点

      3) 导入公钥到其他datanode节点认证文件

      scp  ~/.ssh/authorized_keys hadoop@Slave1:/home/hadoop/.ssh/authorized_keys

      scp  ~/.ssh/authorized_keys hadoop@Slave2:/home/hadoop/.ssh/authorized_keys

    以上过程由于是第一次传输访问,系统会提示输入hadoop用户的密码,输入密码即可。

      4)配置完成后,可对ssh进行验证测试。 

[hadoop@Slave1 ~]$ ssh hadoop@Slave2
The authenticity of host 'slave2 (192.168.79.167)' can't be established.
RSA key fingerprint is 0f:19:15:5e:3e:73:be:c0:c0:3f:55:5e:b4:fe:1a:7a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'slave2,192.168.79.167' (RSA) to the list of known hosts.
Last login: Wed Apr 19 00:50:13 2017 from 192.168.79.169

[hadoop@Slave1 ~]$ ssh hadoop@Slave2
Last login: Wed Apr 19 00:58:30 2017 from master

2.6、安装JAVA
     此步骤所有虚拟机都要操作
      1)上传jdk-8u101-linux-x64.tar至usr目录下,解压缩该压缩包,并对压缩后文件夹重命名为jdk1.8
      2)   修改PATH变量
             执行 vi /etc/profile   修改profile配置文件,增加如下内容
            export JAVA_HOME=/usr/jdk1.8
            export CLASSPATH=:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
            export PATH=:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
           修改完成后,执行source /etc/profile,使文件修改生效。
      3) 执行 java -version 验证java是否安装成功,如下:

[hadoop@Master ~]$ java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

2.7、关闭防火墙和selinux
       此步骤所有虚拟机都要操作

切换到root用户执行如下命令

 chkconfig iptables off

修改文件:vi /etc/selinux/config,修改内容:SELINUX=disable

然后重启系统 

 三、安装配置hadoop (首先在Master上进行安装配置,完成后使用SCP命令拷贝到Slave1、Slave2上即可)

3.1、Master解压缩Hadoop-2.7.3安装包 

1)切换到root用户

[hadoop@Slave1 ~]$ su root            
密码:

2)解压缩到usr目录下

[root@Slave1 hadoop]# tar zxvf /home/hadoop/hadoop-2.7.3.tar.gz -C /usr/ 

3)重命名为hadoop

[root@Slave1 hadoop]# mv hadoop-2.7.3 hadoop

4) 将hadoop文件拥有者改为hadoop用户 

[root@Slave1 hadoop]#  chown -R  hadoop /usr/hadoop

ps:由于Hadoop运行环境为cenos 64位操作系统,所以在安装前,最好确认下所部署的hadoop软件是否为64位,判断的方法如下:

1) 切换到Hadoop下native路径

[root@Slave1 usr]# cd /usr/hadoop/lib/native

2)执行如下命令,可以从结果中获取Hadoop位数信息。

[root@Slave1 native]# file libhadoop.so.1.0.0

libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped 

3.2、创建Hadoop相关文件夹目录

      1)创建存储hadoop数据文件的目录

           [root@Slave1 ~]# mkdir /home/hadoopdir

      2)创建存储临时文件

           [root@Slave1 ~]# mkdir /home/hadoopdir/tmp

      3)创建dfs系统使用name文件夹

           [root@Slave1 ~]# mkdir /home/hadoopdir/dfs/name

      4)创建dfs系统使用的data文件夹

           [root@Slave1 ~]# mkdir  /home/hadoopdir/dfs/data

       5)将文件拥有者改为hadoop系统用户

           [root@Slave1 ~]# chown -R  hadoop /home/hadoopdir

3.3、配置环境变量

此步骤所有虚拟机都要操作    
 
执行 vi /etc/profile   修改profile配置文件,增加如下内容 

#hadoop variable settings

export HADOOP_HOME=/usr/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native

      修改完成后,执行source /etc/profile,使文件修改生效。

3.4、配置hadoop软件配置文件

      1)修改core-site.xml    

            hadoop Core的配置项,例如HDFS和MapReduce常用的I/O设备等

<configuration>
  <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master:9000</value>
       </property>
       <property>
                <name>io.file.buffer.size</name>
                <value>131072</value>
        </property>
       <property>
               <name>hadoop.tmp.dir</name>
               <value>file:/home/hadoopdir/tmp/</value>
               <description>A base for other temporary   directories.</description>
       </property>
        <property>
               <name>hadoop.proxyuser.hadoop.hosts</name>
               <value>*</value>
       </property>
       <property>
               <name>hadoop.proxyuser.hadoop.groups</name>
               <value>*</value>
       </property>
</configuration>

        2)修改hdfs-site.xml文件

             Hadoop 守护进程配置项,包括namenode、辅助namenode和datanode等

<configuration>
 <property>
             <name>dfs.namenode.name.dir</name>
             <value>file:///home/hadoopdir/dfs/name</value>
       </property>
      <property>
              <name>dfs.datanode.data.dir</name>
              <value>file:///home/hadoopdir/dfs/data</value>
       </property>
       <property>
               <name>dfs.replication</name>
               <value>2</value>
        </property>
        <property>
                 <name>dfs.webhdfs.enabled</name>
                  <value>true</value>
         </property>
</configuration> 

        3)修改mapred-site.xml

           mapreduce守护进程配置项,包括jobtracker和tasktracker

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>Master:10020</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>Master:19888</value>
  </property>
  <property>
    <name>mapreduce.jobtracker.http.address</name>
    <value>Master:50030</value>
  </property>
  <property>
    <name>mapred.job.tracker</name>
    <value>Master:9001</value>
  </property>
</configuration>

        4)修改 yarn-site.xml

             

<configuration>

<!-- Site specific YARN configuration properties -->
  <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>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>Master</value>
  </property>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>Master:8032</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>Master:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>Master:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>Master:8033</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>Master:8088</value>
  </property>
</configuration>

        5)修改 slaves文件

            文件主要用来记录运行DataNode 和tasktracker的所有机器。这两个文件存放在配置目录之中,不过也可以改变Hadoop-env.sh的HADOOP-SLAVES项的值,将slaves文件存放在其它地方,该文件无需分发到各个节点,因为只有运行在namenode或jobtracker(也就是本实例中的Master虚拟机)上的控制脚本能使用此文件。

Slave1
Slave2

 

        6)修改hadoop-env.sh     

                   yarn-env.sh        

    增加:export JAVA_HOME=/usr/jdk1.8

3.5、将/home/hadoopdir  和 /usr/hadoop  路径下所有文件拷贝到 Slave1、 Slave2两个节点下。

Master虚拟机下,切换root用户执行如下命令:

[root@Master ~]#scp -r /usr/hadoop root@Slave1:/usr

[root@Master ~]#scp -r /usr/hadoop root@Slave2:/usr

[root@Master ~]# scp -r /home/hadoopdir  root@Slave2:/home

[root@Master ~]# scp -r /home/hadoopdir  root@Slave2:/home

Slave1虚拟机下,切换root用户执行如下命令:

[root@Slave1 ~]# chown -R hadoop /usr/hadoop
[root@Slave1 ~]# chown -R hadoop /home/hadoopdir

Slave2虚拟机下,切换root用户执行如下命令:

[root@Slave2 ~]# chown -R hadoop /usr/hadoop
[root@Slave2 ~]# chown -R hadoop /home/hadoopdir

 3.6、格式化hadoop

        Master虚拟机上,切换hadoop用户后,执行命令 hdfs namenode -format,进行格式化。
          [hadoop@Master ~]$ hdfs namenode -format

 3.7、启动hadoop

        执行命令 start-all.sh,启动hadoop .

        [hadoop@Master ~]$ start-all.sh

        可通过jps命令,查看hadoop 是否启动成功。

[hadoop@Master ~]$ jps
6130 Jps
5715 SecondaryNameNode
5867 ResourceManager
5516 NameNode

[hadoop@Slave1 ~]$ jps
41179 Jps
40940 DataNode
41055 NodeManager

[hadoop@Slave2 root]$ jps
3984 DataNode
4218 Jps
4092 NodeManager

访问http://192.168.79.172:8088/cluster,可打开hadoop管理网站,如下图:

  

 

hadoop 安装成功后,我们可以使用它自带的小案例,计算PI的值,感受下效果;
PI的计算原理(蒙特卡洛算法):取一个单位的正方形, 里面做一个内切圆(单位圆),则 单位正方形面积 : 内切单位圆面积 = 单位正方形内的飞镖数 : 内切单位圆内的飞镖数 ,通过计算飞镖个数就可以把单位圆面积算出来, 通过面积,在把圆周率计算出来。 则PI的精度和投掷的飞镖次数成正比。也可以这样子理解,在一个正方形上抛飞镖,假设有一个半径为正方形边长的1/4圆,则抛的飞镖在1/4圆内的概率为1/4圆面积除以正方形面积,(pi*r^2/4)/r^2,假设抛飞镖在圆内的概率为n,则pi=4n,通过蒙特卡洛模拟则可算出一个较接近的pi。由于频率是不断接近概率的,因此必须抛很多次飞镖,这里采用了Hadoop去模拟。

执行:

[hadoop@Master mapreduce]$ cd /usr/hadoop/share/hadoop/mapreduce
[hadoop@Master mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.7.3.jar pi 100 100000

第1个100指的是要运行100次map任务
第2个数字指的是每个map任务,要投掷多少次

计算记录和计算结果:

17/04/19 15:08:42 INFO mapreduce.Job: Job job_1492570394313_0002 completed successfully
17/04/19 15:08:42 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=2206
FILE: Number of bytes written=12050806
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=26090
HDFS: Number of bytes written=215
HDFS: Number of read operations=403
HDFS: Number of large read operations=0
HDFS: Number of write operations=3
Job Counters
Launched map tasks=100
Launched reduce tasks=1
Data-local map tasks=100
Total time spent by all maps in occupied slots (ms)=3749497
Total time spent by all reduces in occupied slots (ms)=615850
Total time spent by all map tasks (ms)=3749497
Total time spent by all reduce tasks (ms)=615850
Total vcore-milliseconds taken by all map tasks=3749497
Total vcore-milliseconds taken by all reduce tasks=615850
Total megabyte-milliseconds taken by all map tasks=3839484928
Total megabyte-milliseconds taken by all reduce tasks=630630400
Map-Reduce Framework
Map input records=100
Map output records=200
Map output bytes=1800
Map output materialized bytes=2800
Input split bytes=14290
Combine input records=0
Combine output records=0
Reduce input groups=2
Reduce shuffle bytes=2800
Reduce input records=200
Reduce output records=0
Spilled Records=400
Shuffled Maps =100
Failed Shuffles=0
Merged Map outputs=100
GC time elapsed (ms)=151646
CPU time spent (ms)=149590
Physical memory (bytes) snapshot=11039350784
Virtual memory (bytes) snapshot=208143093760
Total committed heap usage (bytes)=12353146880
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=11800
File Output Format Counters
Bytes Written=97
Job Finished in 794.456 seconds
Estimated value of Pi is 3.14158440000000000000

 

posted @ 2017-04-19 00:11  royis  阅读(134)  评论(0)    收藏  举报