zoukankan      html  css  js  c++  java
  • [大数据] hadoop伪分布式安装

    注意:节点主机的hostname不要带"_"等字符,否则会报错。

    一.安装jdk

    rpm -i jdk-7u80-linux-x64.rpm

    配置java环境变量:

    vi + /etc/profile
    
    export JAVA_HOME=/usr/java/jdk1.7.0_80
    PATH=$PATH:$JAVA_HOME/bin

    使用jps命令验证:

    [root@node001 jdk1.7.0_80]# jps
    2266 Jps

    二.设置免密登录

      $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
      $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
      $ chmod 0600 ~/.ssh/authorized_keys

    让本机能够免密登录本机(因为Namenode和Datanode都在一台机器上)。

    [root@pseudo_hadoop .ssh]# ssh pseudo_hadoop
    Last login: Fri Nov  8 15:45:28 2019 from pseudo_hadoop

    使用ssh登录本机别名,能够免密登录。

    三. 下载hadoop并解压

    wget https://archive.apache.org/dist/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz
    tar xf hadoop-2.6.5.tar.gz -C /opt/

    四.添加HADOOP环境变量

    vi + /etc/profile
    
    export HADOOP_HOME=/opt/hadoop-2.6.5
    PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
    . /etc/profile

    五.修改配置文件流程

    首先,为hadoop指定java目录:

    [root@pseudo_hadoop hadoop]# ll /opt/hadoop-2.6.5/etc/hadoop
    total 152
    -rw-r--r-- 1 root root  4436 Nov  9 14:23 capacity-scheduler.xml
    -rw-r--r-- 1 root root  1335 Nov  9 14:23 configuration.xsl
    -rw-r--r-- 1 root root   318 Nov  9 14:23 container-executor.cfg
    -rw-r--r-- 1 root root   774 Nov  9 14:23 core-site.xml
    -rw-r--r-- 1 root root  3670 Nov  9 14:23 hadoop-env.cmd
    -rw-r--r-- 1 root root  4224 Nov  9 14:23 hadoop-env.sh
    -rw-r--r-- 1 root root  2598 Nov  9 14:23 hadoop-metrics2.properties
    -rw-r--r-- 1 root root  2490 Nov  9 14:23 hadoop-metrics.properties
    -rw-r--r-- 1 root root  9683 Nov  9 14:23 hadoop-policy.xml
    -rw-r--r-- 1 root root   775 Nov  9 14:23 hdfs-site.xml
    -rw-r--r-- 1 root root  1449 Nov  9 14:23 httpfs-env.sh
    -rw-r--r-- 1 root root  1657 Nov  9 14:23 httpfs-log4j.properties
    -rw-r--r-- 1 root root    21 Nov  9 14:23 httpfs-signature.secret
    -rw-r--r-- 1 root root   620 Nov  9 14:23 httpfs-site.xml
    -rw-r--r-- 1 root root  3523 Nov  9 14:23 kms-acls.xml
    -rw-r--r-- 1 root root  1325 Nov  9 14:23 kms-env.sh
    -rw-r--r-- 1 root root  1631 Nov  9 14:23 kms-log4j.properties
    -rw-r--r-- 1 root root  5511 Nov  9 14:23 kms-site.xml
    -rw-r--r-- 1 root root 11291 Nov  9 14:23 log4j.properties
    -rw-r--r-- 1 root root   938 Nov  9 14:23 mapred-env.cmd
    -rw-r--r-- 1 root root  1383 Nov  9 14:23 mapred-env.sh
    -rw-r--r-- 1 root root  4113 Nov  9 14:23 mapred-queues.xml.template
    -rw-r--r-- 1 root root   758 Nov  9 14:23 mapred-site.xml.template
    -rw-r--r-- 1 root root    10 Nov  9 14:23 slaves
    -rw-r--r-- 1 root root  2316 Nov  9 14:23 ssl-client.xml.example
    -rw-r--r-- 1 root root  2268 Nov  9 14:23 ssl-server.xml.example
    -rw-r--r-- 1 root root  2237 Nov  9 14:23 yarn-env.cmd
    -rw-r--r-- 1 root root  4567 Nov  9 14:23 yarn-env.sh
    -rw-r--r-- 1 root root   690 Nov  9 14:23 yarn-site.xml

    修改三个配置文件的JAVA_HOME变量:

    vi hadoop-env.sh
    vi mapred-env.sh
    vi yarn-env.sh
    
    export JAVA_HOME=/usr/java/jdk1.7.0_80

    修改core-site.xml配置文件:

    该配置文件主要是配置NameNode。

    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://pseudo_hadoop:9000</value>
        </property>
    </configuration>

    修改hdfs-site.xml配置文件:

    该文件主要配置DataNode。

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    </configuration>

    其中dfs.replication配置的是数据块副本数量,这里由于是伪分布式,所以配置为1。

    修改slaves文件:

    该文件配置DataNode的机器列表。

    vi slaves
    
    pseudo_hadoop

    除了上述配置,我们还缺少Secondary NameNode的配置,可以从以下官方网页查看相关的配置:

    https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

    hdfs-default.xml总所罗列的配置项,就是可以用于hdfs-site.xml配置文件中的配置项。

    我们可以看到:

    参照这一条信息,在hdfs-site.xml中配置Secondary的IP和端口:

    vi hdfs-site.xml
    
    <configuration>
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>pseudo_hadoop:50090</value>
        </property>
    </configuration>

    参考core-default.xml的配置:

    https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/core-default.xml

     上面默认定义了一个tmp路径,在/tmp目录下的文件存在丢失的风险。因为该路径被hdfs-default.xml中引用:

     而dfs.namenode.name.dir下会存放fsimage等重要的恢复数据,所以我们要修改hadoop.tmp.dir的值,将其修改到/var目录下:

    vi core-site.xml
    
    <configuration>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/var/hadoop/pseudo</value>
        </property>
    </configuration>

    六.配置总结

    # 分别修改hadoop-env.sh  mapred-env.sh  yarn-env.sh的JAVA_HOME
    vi hadoop-env.sh
    vi mapred-env.sh
    vi yarn-env.sh
    
    export JAVA_HOME=/usr/java/jdk1.7.0_80
    # core-site.xml
    <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://pseudo_hadoop:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/var/hadoop/pseudo</value> </property> </configuration>
    # hdfs-site.xml
    <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>pseudo_hadoop:50090</value> </property> </configuratiot>
    # slaves
    
    pseudo_hadoop

    七.格式化hdfs

    hdfs namenode -format
    19/11/09 15:30:14 INFO namenode.FSImage: Allocated new BlockPoolId: BP-1626595325-192.168.1.188-1573284614538
    19/11/09 15:30:14 INFO common.Storage: Storage directory /var/hadoop/pseudo/dfs/name has been successfully formatted.
    19/11/09 15:30:14 INFO namenode.FSImageFormatProtobuf: Saving image file /var/hadoop/pseudo/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
    19/11/09 15:30:14 INFO namenode.FSImageFormatProtobuf: Image file /var/hadoop/pseudo/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 321 bytes saved in 0 seconds.
    19/11/09 15:30:14 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
    19/11/09 15:30:14 INFO util.ExitUtil: Exiting with status 0
    19/11/09 15:30:14 INFO namenode.NameNode: SHUTDOWN_MSG: 
    /************************************************************
    SHUTDOWN_MSG: Shutting down NameNode at pseudo_hadoop/192.168.1.188
    ************************************************************/

    格式化成功后,我们可以看到/var/hadoop/pseudo下产生了一系列文件:

    ll /var/hadoop/pseudo/dfs/name/current
    total 16
    -rw-r--r-- 1 root root 321 Nov  9 15:30 fsimage_0000000000000000000
    -rw-r--r-- 1 root root  62 Nov  9 15:30 fsimage_0000000000000000000.md5
    -rw-r--r-- 1 root root   2 Nov  9 15:30 seen_txid
    -rw-r--r-- 1 root root 206 Nov  9 15:30 VERSION

    其中fsimage_00000000000000000就是生成的fsimage文件

    VERSION中的信息:

    [root@node001 current]# cat VERSION
    #Sat Nov 09 16:30:14 CST 2019
    namespaceID=2129432166
    clusterID=CID-df89713b-55fa-457e-952c-4e024893c770
    cTime=0
    storageType=NAME_NODE
    blockpoolID=BP-849051996-192.168.1.188-1573288214053
    layoutVersion=-60

    其中最重要的是clusterID,代表集群的唯一标识。提供给所有集群中角色共用。

    注意:每次格式化clusterID都会变化,可能会导致与其他角色的ID不一致,所以一个集群理论上只能格式化一次。

    八.启动集群

    [root@node001 pseudo]# start-dfs.sh

    Starting namenodes on [node001] node001: starting namenode, logging to /opt/hadoop-2.6.5/logs/hadoop-root-namenode-node001.out node001: starting datanode, logging to /opt/hadoop-2.6.5/logs/hadoop-root-datanode-node001.out Starting secondary namenodes [node001] node001: starting secondarynamenode, logging to /opt/hadoop-2.6.5/logs/hadoop-root-secondarynamenode-node001.out

    使用jps查看java进程:

    [root@node001 pseudo]# jps
    
    1952 Jps
    1833 SecondaryNameNode
    1574 NameNode
    1688 DataNode

    可以看到NameNode、DataNode以及SecondaryNameNode都已成功启动。

    错误记录:之前的安装过程中,将hostname设置为了pseudo_hadoop,由于hostname中存在"_"符号,所以导致启动报错。

    [root@node001 pseudo]# start-dfs.sh
    Starting namenodes on []
    node001: starting namenode, logging to /opt/hadoop-2.6.5/logs/hadoop-root-namenode-node001.out
    node001: starting datanode, logging to /opt/hadoop-2.6.5/logs/hadoop-root-datanode-node001.out

    方括号中没有出现主机名,并且启动完毕后,jps中没有进程号。

    九.查看DataNode信息

    cd /var/hadoop/pseudo/dfs/data/current
    [root@node001 current]# cat VERSION 
    #Sat Nov 09 16:30:31 CST 2019
    storageID=DS-05a76de7-1435-418b-9930-635bc7136160
    clusterID=CID-df89713b-55fa-457e-952c-4e024893c770
    cTime=0
    datanodeUuid=759fb844-e51d-481a-9d32-eb60863c7f43
    storageType=DATA_NODE
    layoutVersion=-56

    我们可以看到clusterID和前述的NameNode中的clusterID一致,说明他们同属一个集群。

    同样我们查看namesecondary节点的信息:

    cd /var/hadoop/pseudo/dfs/namesecondary/current
    [root@node001 current]# cat VERSION
    #Sun Nov 10 01:29:43 CST 2019
    namespaceID=2129432166
    clusterID=CID-df89713b-55fa-457e-952c-4e024893c770
    cTime=0
    storageType=NAME_NODE
    blockpoolID=BP-849051996-192.168.1.188-1573288214053
    layoutVersion=-60

    同样可以发现clusterID与NameNode和Datanode一致。

    十.通过浏览器查看集群

    浏览器访问端口50070:

    十一.在HDFS中创建目录并上传文件

    创建root根目录:

    [root@node001 current]# hdfs dfs -mkdir -p /user/root

    /user/root就是root用户的根目录,上传文件时不指定目录,则会自动放入此目录。

    在浏览器中查看文件系统:

    上传一个文件(例如 jdk-7u80-linux-x64.rpm,大小是132MB):

    [root@node001 software]# hdfs dfs -put jdk-7u80-linux-x64.rpm /user/root/jdk-7u80.rpm

    使用-put上传文件到/user/root下,并将其改名为jdk-7u80.rpm

     我们可以在浏览器中查看已经上传的文件。大小是精确的131.69MB,副本数是1(伪分布式),block size默认是120MB(本文件被分成两个block存放),名字为修改后jdk-7u80.rpm。

    使用命令行查看:

    [root@node001 software]# hdfs dfs -ls /user/root
    Found 1 items
    -rw-r--r--   1 root supergroup  138090286 2019-11-10 03:20 /user/root/jdk-7u80.rpm

    十二.查看HDFS中文件在实际节点上的存储位置

    我们在配置Hadoop时配置的数据目录为/var/hadoop/pseudo

    载hadoop运行后,在/var/hadoop/pseudo/dfs目录下除了name目录,还会产生data目录和namesecondary目录:

    [root@node001 dfs]# ll
    total 0
    drwx------ 3 root root 38 Nov  9 16:30 data
    drwxr-xr-x 3 root root 38 Nov  9 16:30 name
    drwxr-xr-x 3 root root 38 Nov  9 17:29 namesecondary

    data目录代表的是DataNode的数据存放位置,所以文件block是存放在该目录下的:

    [root@node001 subdir0]# ll /var/hadoop/pseudo/dfs/data/current/BP-849051996-192.168.1.188-1573288214053/current/finalized/subdir0/subdir0
    total 135916
    -rw-r--r-- 1 root root 134217728 Nov 10 03:20 blk_1073741825
    -rw-r--r-- 1 root root   1048583 Nov 10 03:20 blk_1073741825_1001.meta
    -rw-r--r-- 1 root root   3872558 Nov 10 03:20 blk_1073741826
    -rw-r--r-- 1 root root     30263 Nov 10 03:20 blk_1073741826_1002.meta

    在这个很深的目录中,我们可以看到jdk文件对应的两个block文件,以及附带的元数据文件。

    十三.查看edits文件

    在对集群进行操作后,我们查看NameNode所生成的edits文件:

    [root@node001 current]# ll /var/hadoop/pseudo/dfs/name/current
    total 1092
    -rw-r--r-- 1 root root      42 Nov  9 17:29 edits_0000000000000000001-0000000000000000002
    -rw-r--r-- 1 root root      42 Nov  9 18:29 edits_0000000000000000003-0000000000000000004
    -rw-r--r-- 1 root root      42 Nov  9 19:29 edits_0000000000000000005-0000000000000000006
    -rw-r--r-- 1 root root      42 Nov  9 20:29 edits_0000000000000000007-0000000000000000008
    -rw-r--r-- 1 root root      42 Nov  9 21:29 edits_0000000000000000009-0000000000000000010
    -rw-r--r-- 1 root root      42 Nov  9 22:29 edits_0000000000000000011-0000000000000000012
    -rw-r--r-- 1 root root      42 Nov  9 23:29 edits_0000000000000000013-0000000000000000014
    -rw-r--r-- 1 root root      42 Nov 10 00:29 edits_0000000000000000015-0000000000000000016
    -rw-r--r-- 1 root root      42 Nov 10 01:29 edits_0000000000000000017-0000000000000000018
    -rw-r--r-- 1 root root      42 Nov 10 02:29 edits_0000000000000000019-0000000000000000020
    -rw-r--r-- 1 root root     902 Nov 10 03:29 edits_0000000000000000021-0000000000000000033
    -rw-r--r-- 1 root root 1048576 Nov 10 03:29 edits_inprogress_0000000000000000034
    -rw-r--r-- 1 root root     321 Nov 10 02:29 fsimage_0000000000000000020
    -rw-r--r-- 1 root root      62 Nov 10 02:29 fsimage_0000000000000000020.md5
    -rw-r--r-- 1 root root     557 Nov 10 03:29 fsimage_0000000000000000033
    -rw-r--r-- 1 root root      62 Nov 10 03:29 fsimage_0000000000000000033.md5
    -rw-r--r-- 1 root root       3 Nov 10 03:29 seen_txid
    -rw-r--r-- 1 root root     205 Nov  9 16:30 VERSION

    我们可以看到生成了很多edits文件,这些文件就是用来记录每一次的操作日志,并在check point将其与fsimage进行合并,提供恢复机制。

    保持学习,否则迟早要被淘汰*(^ 。 ^ )***
  • 相关阅读:
    SQL Server 2008数据库镜像+故障转移集群原理摘自网络
    AHCI和IDE区别,和在目前系统中设置 AHCI 摘自网络
    中国计算机技术职业资格网(软考 官方 官网)
    第十一节 导出Excel 简单
    第五章 IF语句与逻辑运算符 简单
    第十一节 10图片权限控制 简单
    第四章 C++数据类型 简单
    第二章 从一个最简短的C++程 简单
    php 解析xml文件 简单
    第十一节 6HttpHandler案例 简单
  • 原文地址:https://www.cnblogs.com/leokale-zz/p/11825758.html
Copyright © 2011-2022 走看看