Hadoop

作者: 436048bfc6a1 | 来源:发表于2018-11-25 09:12 被阅读0次

    注: 如果使用虚拟机的话,请将网络适配器设置为NAT并且将防火墙关闭并且将防火墙开机自启动也一并关闭,selinux选择disabled,

    1. 广义和狭义
    广义: 以hadoop为主的生态圈
    狭义: 专指hadoop
    
    1. Hadoop 2.x的组成
    出现大数据组件原因: 对于mysql来说,mysql处理超过1亿行的表效率差,需要将mysql数据同步到大数据平台
    一般使用HDFS存储
    
    HDFS:  分布式文件系统
    mapreduce: 分布式计算(缺点: 开发难度高,计算慢, 被hive sql/ spark替代)
    yarn: 资源(内存, cpu) + 作业(job) 的调度管理系统
    
    1. Hadoop 2.x介绍
    (1). Hadoop是Apache基金会,特点是可靠,可伸缩,分布式的计算框架
    (2). 企业一般选择CDH/Ambari部署, 因为一般不会只部署hadoop
    (3). CDH代表什么:
    cloudera对hadooop源码进行添加新功能或者修复bug之后,就变成CDH版本,在使用时,跟apache版本没有差别。
    
    1. 安装Hadoop
    预处理
    (1) 设置/etc/selinux中SELINUX=disabled
    (2) 设置/etc/hosts中
        192.168.198.129 hadoop001
    (3) 设置/etc/sysconfig/network
        HOSTNAME=hadoop001
    (4) 切换到root用户,关闭防火墙
         service iptables stop
    (5) 禁止防火墙开机自启动
         chkconfig iptables off
    
    (1) 新建hadoop用户
         useradd hadoop
    
    (2) 给hadoop用户赋予sudo权限
          编辑/etc/sudoers文件
          添加  
          hadoop  ALL=(ALL)       NOPASSWD: ALL
    
    (3) 切换到hadoop用户
         su - hadoop
    
    在hadoop的home directory下创建source software app三个文件夹
         mkdir source software app
    
    解压tar文件夹到app文件夹
    
    1. Hadoop前置软件
    (1) java(推荐jdk1.7)
    (2) ssh
    
    1. 配置文件
    (1) 进入刚才解压好的hadoop文件夹,然后进入当前路径下的etc/hadoop文件夹,修改hadoop-env.sh文件
    
    修改1:
    将export JAVA_HOME=${JAVA_HOME}
    修改为export JAVA_HOME=/usr/java/jdk1.7.0_79
    
    修改2:
    添加 export HADOOP_PREFIX=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
    

    (2) 测试修改

    运行$HADOOP_PREFIX/bin/hadoop,如果出现如下显示,说明配置成功
    
    Usage: hadoop [--config confdir] COMMAND
           where COMMAND is one of:
      fs                   run a generic filesystem user client
      version              print the version
      jar <jar>            run a jar file
      checknative [-a|-h]  check native hadoop and compression libraries availability
      distcp <srcurl> <desturl> copy file or directories recursively
      archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
      classpath            prints the class path needed to get the
      credential           interact with credential providers
                           Hadoop jar and the required libraries
      daemonlog            get/set the log level for each daemon
      trace                view and modify Hadoop tracing settings
     or
      CLASSNAME            run the class named CLASSNAME
    
    Most commands print help when invoked w/o parameters.
    
    1. 启动Hadoop集群的三种模式
    Local (Standalone) Mode: 单机模式
    没有进程
    
    Pseudo-Distributed Mode: 伪分布式
    只有一台机器,有进程,用于学习
    
    Fully-Distributed Mode: 分布式
    生产中, 有进程
    
    1. 以伪分布式启动
    (1) 配置$HADOOP_PREFIX/etc/core-site.xml
    
    !!!!!!!!!!!注意
    配置文件的字母大小写(坑了我一中午)
    配置$HADOOP_PREFIX/etc/hadoop/core-site.xml
    在其内部添加如下配置
    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <!--hadoop代表的是机器名称-->
            <value>hdfs://hadoop001:9000</value>
        </property>
    </configuration>
    
    (2) 配置$HADOOP_PREFIX/etc/hdfs-site.xml
    在其内部添加如下
    
    <configuration>
            <property>
                    <name>dfs.replication</name>
                    <value>1</value>
            </property>
    </configuration>
    
    
    (3) 配置无密码访问
    在terminal输入如下命令
    
    ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa(生成一个key's randomart image)
    cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
    
    此时会出现一个坑
    
    -rw-rw-r--. 1 hadoop hadoop 358 Nov 37 25:65 authorized_keys
    此时authorized_keys的权限为644,会出问题
    所以将其权限改为600
    
    
    (4) 格式化文件系统
    
    输入 bin/hdfs namenode -format
    
    (5) 启动dfs
    开始namenode进程和datanode进程
    执行$HADOOP_PREFIX/sbin/start-dfs.sh
    
    启动之后,输入jps显示启动的dfs进程
    
    9757 NameNode
    9854 DataNode
    10050 SecondaryNameNode
    10153 Jps
    
    (6) 在web界面访问hdfs
    在浏览器输入$ip_address: 50070
    
    (7) 在$HADOOP_PREFIX/etc/hadoop文件夹下
    执行 cp mapred-site.xml.template mapred-site.xml
    
    在mapred-site.xml下编辑
        <configuration>
              <property>
                  <name>mapreduce.framework.name</name>
                  <value>yarn</value>
              </property>
        </configuration>
    
    (8) 在yarn-site中编辑
    <configuration>
            <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle </value>
            </property>
    </configuration>
    
    (9) 启动yarn 
    $HADOOP_PREFIX/sbin/start-yarn.sh
    
    输入jps,显示如下
    
    9757 NameNode
    9854 DataNode
    15734 ResourceManager
    15822 NodeManager
    10050 SecondaryNameNode
    15852 Jps
    
    (10) 打开yarn的web界面
    ip_address:8088
    
    注意: 在iptables开放端口
    
    1. 进行Map-reduce job
    (1) linux与HDFS
        linux是文件系统, HDFS是分布式文件系统,HDFS是架在linux之上的,所以HDFS都是以如下形式开头
        
        HDFS dfs -
        之后再加linux命令 
    
    (1) 在HDFS上创建/user/$user_name文件夹
    
    在$HADOOP_PREFIX目录下执行./bin/hdfs dfs -mkdir -p /user/$user_name
    
    (2) 将linux上$HADOOP_PREFIX/etc/hadoop里的文件拷贝到hdsf文件夹input上
    bin/hdfs dfs -put etc/hadoop input
    
    注: 没有指定默认是放在HDFS中的/user/hadoop文件夹
    
    (4) 运行官网给的测试MapReduce
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar grep input output 'dfs[a-z.]+'
    
    运行输出如下
    INFO mapreduce.Job:  map 0% reduce 0%
    INFO mapreduce.Job:  map 3% reduce 0%
    INFO mapreduce.Job:  map 7% reduce 0%
    INFO mapreduce.Job:  map 10% reduce 0%
    INFO mapreduce.Job:  map 13% reduce 0%
    INFO mapreduce.Job:  map 17% reduce 0%
    INFO mapreduce.Job:  map 20% reduce 0%
    INFO mapreduce.Job:  map 23% reduce 0%
    INFO mapreduce.Job:  map 27% reduce 0%
    INFO mapreduce.Job:  map 30% reduce 0%
    INFO mapreduce.Job:  map 33% reduce 0%
    INFO mapreduce.Job:  map 37% reduce 0%
    INFO mapreduce.Job:  map 40% reduce 0%
    INFO mapreduce.Job:  map 40% reduce 13%
    INFO mapreduce.Job:  map 43% reduce 13%
    INFO mapreduce.Job:  map 47% reduce 13%
    INFO mapreduce.Job:  map 53% reduce 13%
    INFO mapreduce.Job:  map 57% reduce 17%
    INFO mapreduce.Job:  map 57% reduce 19%
    INFO mapreduce.Job:  map 60% reduce 19%
    INFO mapreduce.Job:  map 63% reduce 20%
    INFO mapreduce.Job:  map 67% reduce 20%
    INFO mapreduce.Job:  map 70% reduce 22%
    INFO mapreduce.Job:  map 73% reduce 22%
    INFO mapreduce.Job:  map 73% reduce 24%
    INFO mapreduce.Job:  map 77% reduce 24%
    INFO mapreduce.Job:  map 77% reduce 26%
    INFO mapreduce.Job:  map 80% reduce 26%
    INFO mapreduce.Job:  map 83% reduce 26%
    INFO mapreduce.Job:  map 87% reduce 28%
    INFO mapreduce.Job:  map 90% reduce 28%
    INFO mapreduce.Job:  map 90% reduce 30%
    INFO mapreduce.Job:  map 93% reduce 30%
    INFO mapreduce.Job:  map 100% reduce 31%
    INFO mapreduce.Job:  map 100% reduce 100%
    
    注: 
    (1) 其中map指的是map函数与reduce函数,都为递归函数
    (2) map函数还未完成,reduce函数就开始运行
    
    (5) 将HDFS文件夹下载到linux文件夹
    bin/hdfs dfs -get output output
    
    1. HDFS三个进程全部以hadoop001启动
    (1) 问题发现
    当运行stop-dfs.sh时输出如下
    
    Stopping namenodes on [hadoop001]
    hadoop001: stopping namenode
    localhost: stopping datanode
    Stopping secondary namenodes [0.0.0.0]
    0.0.0.0: stopping secondarynamenode
    
    此时Secondary namenodes在0.0.0.0上,但是我们想要让secondary namenode也在hadoop001上启动
    
    (2) 设置
    NN修改的是core-site.xml
    DN修改的是slaves文件
    SNN: 由于SNN是HDFS组件服务的进程,所以去hdfs-default.xml中修改(可以从官网configuration侧边栏找到)
    
    在hdfs-site.xml中添加
    <property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>hadoop001:50090</value>
    </property>
    <property>
      <name>dfs.namenode.secondary.https-address</name>
      <value>hadoop001:50091</value>
    </property>
    
    1. JPS命令
    (1) jps来源
    
    /usr/java/jdk1.7.0_79/bin/jps
    也就是说jps来自于java
    
    (2) root用户看JPS, 会如下显示
    
    32573 Jps
    31530 -- process information unavailable
    31648 -- process information unavailable
    31808 -- process information unavailable
    
    此时并不知道上述进程是否真的存在
    
    对于process information unavailable的正确处理方式
    a. 找到其进程号
    b. ps -ef | grep pid 确认该进程是否存在
       if exsit: 
          可以知道哪个用户运行此进程
          su - 用户, 切换到该用户进去查看
      else if 不存在:
          手动删除此文件夹
          其残留信息都保存在/tmp/hsperdata_hadoop文件夹下
          如下显示
          -rw------- 1 hadoop hadoop 32768 Dec  3 04:30 31530
          -rw------- 1 hadoop hadoop 32768 Dec  3 04:30 31648
          -rw------- 1 hadoop hadoop 32768 Dec  3 04:29 31808
          当删除某一个文件夹, 如删除31530, 再执行JPS显示如下
    
          32965 Jps
          31648 -- process information unavailable
          31808 -- process information unavailable
    
    注: 未经过ps -ef确认该进程存在就直接删除是不好的,
    因为即使删除/tmp/hsperdata_hadoop下的文件,
    该进程仍然存在,但是基于jps的监控等shell文件认为该进程消失,
    从而采取一系列措施
    
    12 ssh
     
    (1) 端口号为22
    (2) [hadoop@hadoop001 ~]$ ssh 192.168.110.120
         代表以hadoop用户去连接192.168.110.120的机器
    (3) ssh root@192.168.110.120 date
         连接云主机并将date结果返回给客户端
    (4) 两个linux系统之间如何传输
          a. scp 
              eg. scp test.md 192.168.110.120:/home/hadoop
                    将本地test.md传到远程主机上
                    scp 192.168.110.120:/home/hadoop/test.md newTest.md 将育成主机上的文件传回来
          b. ssh多台机器互相信任关系
             假如云主机是生产机器,无法有密码,想要互相传输文件就需要配置相互信任关系
    
    配置相互信息关系的步骤
    
    a. ssh-keygen
    b. 此时在.ssh文件夹下会生成如下文件
       -rw------- 1 hadoop hadoop 1675  id_rsa
       -rw-r--r-- 1 hadoop hadoop  398  id_rsa.pub
    c. cat id_rsa.pub >> authorized_keys
    (注: chmod 700 -R ~/.ssh并且chmod 600 ~/.ssh/authorized_keys)
    d. 将远程主机的id_rsa.pub文件scp到本机上
        scp 192.168.110.120:/home/hadoop/id_rsa.pub id_rsa.pub1
    e. cat id_rsa.pub1 >> authorized_keys
    f. 在 /etc/hosts上配置多台机器的ip和host的对应关系(注意)
    g. 将authorized_keys用scp命令传输到另外的主机
    
    1. hadoop目录
    drwxr-xr-x  2 hadoop hadoop  4096 Mar 23  2016 bin 命令都保存与此文件夹
    drwxr-xr-x  3 hadoop hadoop  4096 Mar 23  2016 sbin 启动脚本和停止脚本都保存在此文件夹
    drwxr-xr-x  6 hadoop hadoop  4096 Mar 23  2016 etc 配置文件都保存与此文件夹 其他大数据组件有可能以config conf命令此类文件夹
    drwxr-xr-x  3 hadoop hadoop  4096 Mar 23  2016 lib 存储jar包
    drwxr-xr-x  2 hadoop hadoop  4096 Mar 23  2016 bin-mapreduce1
    drwxr-xr-x  3 hadoop hadoop  4096 Mar 23  2016 cloudera
    drwxr-xr-x  5 hadoop hadoop  4096 Mar 23  2016 examples
    drwxr-xr-x  3 hadoop hadoop  4096 Mar 23  2016 examples-mapreduce1
    drwxr-xr-x  2 hadoop hadoop  4096 Mar 23  2016 include
    drwxr-xr-x  2 hadoop hadoop  4096 Mar 23  2016 libexec
    -rw-r--r--  1 hadoop hadoop 17087 Mar 23  2016 LICENSE.txt
    drwxrwxr-x  3 hadoop hadoop  4096 Dec 17 06:45 logs
    -rw-r--r--  1 hadoop hadoop   101 Mar 23  2016 NOTICE.txt
    drwxrwxr-x  2 hadoop hadoop  4096 Dec  2 06:50 output
    -rw-r--r--  1 hadoop hadoop  1366 Mar 23  2016 README.txt
    drwxr-xr-x  4 hadoop hadoop  4096 Mar 23  2016 share
    drwxr-xr-x 17 hadoop hadoop  4096 Mar 23  2016 src
    

    相关文章

      网友评论

          本文标题:Hadoop

          本文链接:https://www.haomeiwen.com/subject/egouqqtx.html