zoukankan      html  css  js  c++  java
  • Hadoop 安装

    1. 创建 hadoop 用户
        (1) 添加新用户
            sudo useradd -m hadoop -s /bin/bash
        (2) 设置密码
            sudo passwd hadoop
        (3) 增加管理员权限
            sudo adduser hadoop sudo
        (4) 登录账户
            su - hadoop
        (5) 更新
            sudo apt-get update
        (6) 安装 SSH、配置 SSH 无密码登陆
            - Ubuntu 默认已安装了 SSH client,需要安装 SSH server
                sudo apt-get install openssh-server
            - 在 hadoop 用户下,尝试用 ssh 登录本机,需要密码
                ssh localhost
            - 退出登录,生成密钥并加入到授权
                cd ~/.ssh/              # 若没有该目录,请先执行一次 ssh localhost
                ssh-keygen -t rsa       # 会有提示,都按回车就可以
                cat ./id_rsa.pub >> ./authorized_keys       # 加入授权
            - 再用 ssh localhost 登录,无需密码就可以登录了
    
    2. 安装 Java (OpenJDK)
        (1) Hadoop 2.7.3 要求 Java 7,可以使用 OpenJDK 或 Oracle JDK/JRE
            https://wiki.apache.org/hadoop/HadoopJavaVersions
        (2) OpenJDK 1.7 (Ubuntu 14)
            sudo apt-get install openjdk-7-jre openjdk-7-jdk
        (3) OpenJDK 1.7 (Ubuntu 16.04 的安装源已经默认没有 openjdk7)
            sudo add-apt-repository ppa:openjdk-r/ppa
            sudo apt-get update
            sudo apt-get install openjdk-7-jdk  (下载慢,可以换国内的源)
        (4) 设置 Java
            dpkg -L openjdk-7-jdk | grep '/bin/javac'    ## JDK 路径
            vim ~/.bashrc                                ## 添加 export JAVA_HOME=JDK路径
            source ~/.bashrc
            echo $JAVA_HOME
            java -version
            $JAVA_HOME/bin/java -version
    
    3. 安装 Hadoop 2.7.3
        (1) 下载
            http://mirror.bit.edu.cn/apache/hadoop/common/ 或者 
            http://mirrors.cnnic.cn/apache/hadoop/common/
            选择 stable 目录下的,一般有两个,一个是源代码,一个是编译好的,下载编译好
        
        (2) 安装
            sudo tar -zxf hadoop-2.7.3.tar.gz -C /usr/local
            cd /usr/local/
            sudo mv ./hadoop-2.7.3/ ./hadoop
            sudo chown -R hadoop ./hadoop
            cd /usr/local/hadoop
            ./bin/hadoop version
            
        (3) 在 ~/.bashrc 配置 PATH
            PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
    
    4. Hadoop 单机配置(非分布式)
        (1) Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行
        
        (2) 单机模式下使用的是本地文件系统,而不是 HDFS 文件系统 (hadoop fs 命令可用,但读写的是本地文件系统)
        
        (3) 运行 Hadoop 附带的例子
        
            cd /usr/local/hadoop
            
            # 列出所有例子
            ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar
            
            # 运行 wordcount 例子,统计 NOTICE.txt,结果写到 output 文件
            ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar 
                             wordcount ./NOTICE.txt ./output
            
            ll output       # output 目录包括 part-r-00000 .part-r-00000.crc _SUCCESS ._SUCCESS.crc 四个文件
            cat output/*    # 可看到统计结果
            rm -r ./output  # Hadoop 默认不会覆盖结果文件,因此再次运行会出错,需要先将 ./output 删除
    
    5. Hadoop 伪分布式配置
        (1) Hadoop 可以在单节点上以伪分布式的方式运行
            Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode
            同时,读取的是 HDFS 中的文件
    
        (2) Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,/usr/local/hadoop 是安装路径
            伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml
            
            core-site.xml
                hadoop.tmp.dir      临时文件夹,
                                    指定后需将使用到的所有子级文件夹都要手动创建出来,否则无法正常启动服务,
                                    要确保该地址是永久性的,不会因重启被清除
                fs.defaultFS        HDFS 文件系统的地址和端口号,就是 NameNode
            =============
            <configuration>
                    <property>
                         <name>hadoop.tmp.dir</name>
                         <value>file:/usr/local/hadoop/tmp</value>
                         <description>A base for other temporary directories</description>
                    </property>
                    <property>
                         <name>fs.defaultFS</name>
                         <value>hdfs://localhost:9000</value>
                         <description>URI of HDFS NameNode</description>
                    </property>
            </configuration>
            
            hdfs-site.xml
                dfs.replication         冗余数,默认 3,HDFS 将冗余存在不同节点上,单机版设为 1
                dfs.namenode.name.dir   存放 namenode 的 name table(元数据),
                                        以逗号分隔可以配多个路径,表示多个备份
                dfs.datanode.data.dir   存放 datanode 的 数据块(数据块的默认最大值是 64M),
                                        以逗号分隔可以配多个路径,表示数据块可以存放在多个路径下
            =============
            <configuration>
                    <property>
                         <name>dfs.replication</name>
                         <value>1</value>
                    </property>
                    <property>
                         <name>dfs.namenode.name.dir</name>
                         <value>file:/usr/local/hadoop/tmp/dfs/name</value>
                    </property>
                    <property>
                         <name>dfs.datanode.data.dir</name>
                         <value>file:/usr/local/hadoop/tmp/dfs/data</value>
                    </property>
            </configuration>        
            
        (3) 如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项
    
        (4) 执行 NameNode 的格式化
            cd /usr/local/hadoop
            ./bin/hdfs namenode -format
            
            成功的话看到有
            Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted
            Exitting with status 0
        
        (5) 开启 NameNode 和 DataNode 守护进程
            cd /usr/local/hadoop
            ./sbin/start-dfs.sh
            
            - 若出现 SSH 提示,输入 yes 即可
            
            - 可能会出现 
                         WARN util.NativeCodeLoader: 
                         Unable to load native-hadoop library for your platform… 
                         using builtin-java classes where applicable。
              该 WARN 提示可以忽略
            
            - 如果出现 Could not resolve hostname,在 ./bashrc 配置 
                export HADOOP_HOME=/usr/local/hadoop
                export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
              然后重新启动
        
        (6) jps 来判断是否成功启动,若成功启动则会列出如下进程:NameNode,DataNode,SecondaryNameNode
        
        (7) 成功启动后,可以访问 Web 界面查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件
            http://localhost:50070 
        
        (8) 运行 Hadoop 附带的例子
            hdfs dfs -mkdir -p /user/hadoop
            hdfs dfs -mkdir input               ## hadoop 用户下,并且已创建用户目录 /user/hadoop,
                                                ## 因此可以使用相对路径 input,绝对路径是 /user/hadoop/input
                                                                
            hadoop fs -put /usr/local/hadoop/NOTICE.txt input   ## hadoop fs 等于 hdfs dfs
            
            # 列出所有例子
            hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar
            
            # 运行 wordcount 例子,统计 NOTICE.txt,结果写到 output
            hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar 
                        wordcount input/NOTICE.txt output
            
            hadoop fs -cat output/*
            hadoop fs -get output ./output
            cat ./output/*
            rm -rf ./output
            hadoop fs -rm -r output
        
        (9) 若要关闭 Hadoop,则运行
            stop-dfs.sh
            下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 start-dfs.sh 就可以
    
    6. 启动 YARN
        (1) 不启用 YARN 也可以运行,YARN (也叫 MapReduce V2)
            YARN 负责资源管理与任务调度,为集群在利用率、资源管理、可伸缩性、可靠性等方面带来了巨大好处
            
        (2) 过配置文件 mapred-site.xml,yarn-site.xml 和命令 start-yarn.sh 启动 YARN
        
        (3) mv /usr/local/hadoop/etc/hadoop/mapred-site.xml.template 
               /usr/local/hadoop/etc/hadoop/mapred-site.xml
            ===============
            <configuration>
                    <property>
                         <name>mapreduce.framework.name</name>
                         <value>yarn</value>
                    </property>
            </configuration>
        
            /usr/local/hadoop/etc/hadoop/yarn-site.xml
                yarn.nodemanager.aux-services: NodeManager 上运行的附属服务
                yarn.log-aggregation-enable: 聚合日志(yarn logs -applicationId)
                yarn.nodemanager.remote-app-log-dir: 日志上传目录
                yarn.nodemanager.remote-app-log-dir-suffix: 结合日志上传目录日志被存在 /tmp/logs/${user}/logs
                mapreduce.jobhistory.max-age-ms: /user/history/done 下日志的保存时间
                yarn.log-aggregation.retain-seconds: /tmp/logs/${user}/logs 下日志的保存时间
                yarn.log-aggregation.retain-check-interval-seconds: 多长时间检查一次日志,并将满足条件的删除
            ===============
            <configuration>
                    <property>
                         <name>yarn.nodemanager.aux-services</name>
                         <value>mapreduce_shuffle</value>
                    </property>
                    
                    <property>
                        <name>yarn.log-aggregation-enable</name>
                        <value>true</value>
                    </property>
    
                    <property>
                        <name>yarn.nodemanager.remote-app-log-dir</name>
                        <value>/tmp/logs</value>
                    </property>
    
                    <property>
                        <name>yarn.nodemanager.remote-app-log-dir-suffix</name>
                        <value>logs</value>
                    </property>
    
                    <property>
                        <name>mapreduce.jobhistory.max-age-ms</name>
                        <value>604800000</value>
                    </property>
    
                    <property>
                        <name>yarn.log-aggregation.retain-seconds</name>
                        <value>86400</value>
                    </property>
    
                    <property>
                        <name>yarn.log-aggregation.retain-check-interval-seconds</name>
                        <value>21600</value>
                    </property>
            </configuration>
    
            # 正常来说添加了 JAVA_HOME 环境变量就可以提交 Job,但有时需要加到配置文件才行
            /usr/local/hadoop/etc/hadoop/hadoop-env.sh
                    export JAVA_HOME=JDK路径
    
        (4) 启动 YARN
            start-dfs.sh
            start-yarn.sh
            mr-jobhistory-daemon.sh start historyserver     # 开启历史服务器,才能在 Web 中查看任务运行情况
            
        (5) jps 查看,可以看到多了 NodeManager,ResourceManager 和 JobHistoryServer
        
        (6) 启动 YARN 后可以通过 Web 界面查看任务的运行情况
            http://localhost:8088/cluster
        
        (7) 运行 Hadoop 附带的例子
            hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar 
                       wordcount input/NOTICE.txt output
            hadoop fs -cat output/*
            上 Web 界面查看任务的运行情况
            伪分布式模式下,使用 YARN 反而更慢
            
        (8) 关闭 YARN
            stop-yarn.sh
            mr-jobhistory-daemon.sh stop historyserver
    
        (9) 如果不想启动 YARN,务必把配置文件 mapred-site.xml 重命名,改成 mapred-site.xml.template
            否则在该配置文件存在,而未开启 YARN 的情况下,
            运行程序会提示 Retrying connect to server: 0.0.0.0/0.0.0.0:8032 的错误
            这也是为何该配置文件初始文件名为 mapred-site.xml.template
            
    7. 集群配置 
        (1) 将上面配置好的虚拟机作为 Master
        (2) 关闭 Master 的 Hadoop
                mr-jobhistory-daemon.sh stop historyserver
                stop-yarn.sh
                stop-dfs.sh
        (3) 安装新的虚拟机作为 Slave
        (4) 在 Slave 节点上配置 hadoop 用户、安装 SSH server、配置无密码登录、安装 Java 环境
        
        (5) 网络配置
            a.  将虚拟机(VirtualBox)的网络连接方式改为桥接 (Bridge) 模式,配置好后要验证网络连接正常
                Settings -> Network -> Adapter 1: 
                    Attached to 选 Bridged Adapter,Advanced -> MAC Address 确保各节点地址不同
            b.  修改各节点的主机名
                sudo vim /etc/hostname      ## 改为 Master 和 Slave1
            c.  修改各节点的 IP 映射
                ifconfig -a                 ## 查看各节点的 IP
                sudo vim /etc/hosts         ## 添加以下内容
                    192.168.1.107   Master
                    192.168.1.106   Slave1
            d.  重启
            e.  确保主机名修改成功,并且能 ping 通对方
                    ping Master -c 3        ## 只 ping 3次,否则要按 Ctrl+C 中断
                    ping Slave1 -c 3
            f.  配置 SSH 无密码登录,让 Master 节点可以无密码 SSH 登陆到各个 Slave 节点上
                    Master 中执行
                        cd ~/.ssh                                           # 如没该目录,先执行 ssh localhost
                        rm ./id_rsa*                                        # 删除之前生成的公匙
                        ssh-keygen -t rsa                                   # 一直按回车就可以
                        cat ./id_rsa.pub >> ./authorized_keys               # 无密码 SSH 本机
                        ssh Master 验证一下不需要密码                       # 第一次需要输入 Yes
                        scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/   # 将公匙传输到 Slave 节点
                    Slave 中执行
                        cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
                        rm ~/id_rsa.pub
                    在 Master 节点上验证可无密码 SSH 到各个 Slave 节点
                        ssh Slave1
        
        (6) 配置集群/分布式环境
            a.  在 Master 上修改 5 个配置文件: 
                slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
            
                http://hadoop.apache.org/docs/stable/       ## 左边栏有各种文档,和各个配置文件的说明
                
                /usr/local/hadoop/etc/hadoop/slaves
                    将作为 DataNode 的主机名写入该文件,每行一个
                    默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode
                    分布式配置可以保留 localhost,也可以删掉,让 Master 节点仅作为 NameNode 使用
                    这里仅作为 NameNode 使用,因此将文件中原来的 localhost 删除,添加内容:Slave1
        
                /usr/local/hadoop/etc/hadoop/core-site.xml
                    ===============
                    <configuration>
                            <property>
                                    <name>fs.defaultFS</name>
                                    <value>hdfs://Master:9000</value>
                            </property>
                            <property>
                                    <name>hadoop.tmp.dir</name>
                                    <value>file:/usr/local/hadoop/tmp</value>
                                    <description>Abase for other temporary directories.</description>
                            </property>
                    </configuration>
        
                /usr/local/hadoop/etc/hadoop/hdfs-site.xml
                    <configuration>
                            <property>
                                    <name>dfs.namenode.secondary.http-address</name>
                                    <value>Master:50090</value>
                            </property>
                            <property>
                                    <name>dfs.replication</name>
                                    <value>1</value>
                            </property>
                            <property>
                                    <name>dfs.namenode.name.dir</name>
                                    <value>file:/usr/local/hadoop/tmp/dfs/name</value>
                            </property>
                            <property>
                                    <name>dfs.datanode.data.dir</name>
                                    <value>file:/usr/local/hadoop/tmp/dfs/data</value>
                            </property>
                    </configuration>
    
                /usr/local/hadoop/etc/hadoop/mapred-site.xml
                    <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>
                    </configuration>
                
                /usr/local/hadoop/etc/hadoop/yarn-site.xml
                    <configuration>
                            <property>
                                    <name>yarn.resourcemanager.hostname</name>
                                    <value>Master</value>
                            </property>
                            <property>
                                    <name>yarn.nodemanager.aux-services</name>
                                    <value>mapreduce_shuffle</value>
                            </property>
                            <property>
                                    <name>yarn.log-aggregation-enable</name>
                                    <value>true</value>
                            </property>
                            <property>
                                    <name>yarn.nodemanager.remote-app-log-dir</name>
                                    <value>/tmp/logs</value>
                            </property>
                            <property>
                                    <name>yarn.nodemanager.remote-app-log-dir-suffix</name>
                                    <value>logs</value>
                            </property>
                            <property>
                                    <name>mapreduce.jobhistory.max-age-ms</name>
                                    <value>604800000</value>
                            </property>
                            <property>
                                    <name>yarn.log-aggregation.retain-seconds</name>
                                    <value>86400</value>
                            </property>
                            <property>
                                    <name>yarn.log-aggregation.retain-check-interval-seconds</name>
                                    <value>21600</value>
                            </property>
                    </configuration>
        
            b.  将 Master 上的 /usr/local/Hadoop 文件夹复制到各个节点上。
                因为之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件
                    在 Master 执行
                        cd /usr/local
                        sudo rm -r ./hadoop/tmp                     # 删除 Hadoop 临时文件
                        sudo rm -r ./hadoop/logs/*                  # 删除日志文件
                        tar -zcf ~/hadoop.master.tar.gz ./hadoop    # 先压缩再复制
                        cd ~
                        scp ./hadoop.master.tar.gz Slave1:/home/hadoop
                    在 Slave 执行
                        sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
                        sudo chown -R hadoop /usr/local/hadoop
                        在 ~/.bashrc 配置PATH
                            PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
                        source ~/.bashrc
            
            c.  启动
                    在 Master 上执行
                        hdfs namenode -format 
                        start-dfs.sh
                        start-yarn.sh
                        mr-jobhistory-daemon.sh start historyserver
                    
                    通过命令 jps 
                    在 Master 上可以看到 
                        NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程
                    在 Slave 上可以看到
                        DataNode 和 NodeManager 进程
                    缺少任一进程都表示出错
                                 
                    在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,
                    如果 Live datanodes 不为 0 ,则说明集群启动成功
        
            d.  通过 Web 页面看到查看 DataNode 和 NameNode 的状态
                    http://master:50070/
        
        (7) 运行 Hadoop 附带的例子 (在哪个节点执行都可以)
        
            hdfs dfs -mkdir -p /user/hadoop
            hdfs dfs -mkdir input
            hdfs dfs -put /usr/local/hadoop/NOTICE.txt input
            
            # 列出所有例子
            hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar   
            
            # 运行 wordcount 例子,统计 NOTICE.txt,结果写到 output
            hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar 
                       wordcount input/NOTICE.txt output  
            
            hdfs dfs -cat output/*
            hdfs dfs -get output ./output
            cat ./output/*
            rm -rf ./output
            hdfs dfs -rm -r output
        
            可以通过 Web 界面查看任务进度 
                http://master:8088/cluster
        
        (8) 关闭 Hadoop 集群也是在 Master 节点上执行的
            stop-yarn.sh
            stop-dfs.sh
            mr-jobhistory-daemon.sh stop historyserver
            
        (9) 此外,同伪分布式一样,也可以不启动 YARN,但要记得改掉 mapred-site.xml 的文件名
    
    
    
  • 相关阅读:
    html5 存储(删除)
    java 单例模式
    android知识点汇总
    java多线程 与 并发
    cuda GPU 编程之共享内存的使用
    vs 2015 + OPENGL 配置
    Ubuntu 14.04 安装 CUDA 问题及解决
    性能分析工具gprof介绍
    vim 换行方式 win 转Ubuntu vim 格式调整
    计算显卡对比
  • 原文地址:https://www.cnblogs.com/moonlight-lin/p/12907845.html
Copyright © 2011-2022 走看看