51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3237|回复: 0
打印 上一主题 下一主题

[转贴] hadoop编程笔记

[复制链接]
  • TA的每日心情
    无聊
    前天 09:06
  • 签到天数: 530 天

    连续签到: 2 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2018-12-27 15:57:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    什么是Hadoop

    Hadoop项目主要包括以下四个模块:

    • Hadoop Common 为其他Hadoop模块提供基础设施
    • Hadoop HDFS 一个高可靠,高吞吐量的分布式文件系统
    • Hadoop MapReduce 一个分布式离线并行计算框架
    • Hadoop Yarn 一个新的MapReduce 框架,任务调度与资源处理
    HDFS服务功能
    • NameNode是主节点,存储文件的元数据,包括文件名,文件目录结构,文件属性(生成时间,文件属性,文件权限)以及每个文件的块列表和块所在的DataNode
    • DataNode 在本地文件系统存储文件块数据,以及块数据的校验和。
    • Secondary NameNode 用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。
    YARN 服务功能
    • ResourceManager
      • 处理客户端请求
      • 启动和监控ApplicationMaster
      • 监控NodeManager
      • 资源分配与调度
    • ApplicationMaster
      • 数据切分
      • 为程序申请资源并且分配给内部任务
      • 任务监控与容错
    • NodeManager
      • 单个节点上的资源管理
      • 处理来自ResourceManager 的命令
      • 处理来自ApplicationMaster的命令
    • Container
      • 对任务运行环境的抽象,封装了CPU,内存等多维资源以及环境变量,启动命令等任务运行相关的星系

    离线计算框架MapReduce
    • 将计算分为两个阶段,Map和Reduce阶段
      • Map阶段并行处理输入数据
      • Reduce阶段对Map结果进行处理
    • Shuffle连接Map和Reduce两个阶段
      • Map Task将数据写入到磁盘
      • Reduce Task从每个Map Task读取一部分数据
    • 仅仅适合离线批处理
      1.具有很好的容错性和扩展性 2.适合简单的批处理任务
    • 缺点
      1.启动开销大 2.过多使用磁盘导致磁盘效率低下
    卸载linux系统自带的环境安装包
    1. rpm -qa|grep java #查询安装的java环境
    2. rpm -e --nodeps + 包名 #卸载相应的安装包,多个包名以空格隔开
    复制代码
    安装java的jdk
    1. chmod u+x ./* #为安装文件夹设置可执行权限
    2. tar -zxvf jdk-7u67-linux-x64.tar.gz -C /opt/modules/
    3. #-C 指定解压的位置,默认是当前文件夹
    4. cd /opt/modules/jdk1.7.0_67/

    5. vi /etc/profile #编辑环境变量
    6. export JAVA_HOME=/opt/modules/jdk1.7.0_67/
    7. export PATH=$PATH:$JAVA_HOME/bin
    8. source /etc/profile #使环境变量生效
    9. #退出后重新登录
    10. java -version
    11. #bash: /opt/modules/jdk1.7.0_67/bin/java: cannot execute binary file
    12. #赋值了权限以后还出现这样的问题就是linux版本出现了出现了问题> > 这里输入引用文本
    复制代码
    安装hadoop
    1. tar -zxvf hadoop-2.5.0.tar.gz -C /opt/modules/
    2. cd /opt/modules/hadoop-2.5.0/etc/hadoop
    3. echo $JAVA_HOME #输出java环境变量
    4. vi hadoop-env.sh
    5. #查找 JAVA_HOME的位置
    6. export JAVA_HOME=${JAVA_HOME}替换为JAVA_HOME=/opt/modules/jdk1.7.0_67
    7. cd /opt/modules/hadoop-2.5.0
    8. mkdir input
    9. cp etc/hadoop/*.xml input/
    10. #-rw-r--r--. 1 root root 3589 Mar 17 21:57 capacity-scheduler.xml
    11. #-rw-r--r--. 1 root root  774 Mar 17 21:57 core-site.xml
    12. #-rw-r--r--. 1 root root 9201 Mar 17 21:57 hadoop-policy.xml
    13. #-rw-r--r--. 1 root root  775 Mar 17 21:57 hdfs-site.xml
    14. #-rw-r--r--. 1 root root  620 Mar 17 21:57 httpfs-site.xml
    15. #-rw-r--r--. 1 root root  690 Mar 17 21:57 yarn-site.xml
    复制代码
    hadoop 环境变量设置

    Standalone Operation 进入到hadoop的安装目录 我的安装环境 /opt/modules/hadoop-2.5.0

    1. mkdir input
    2. cp etc/hadoop/*.xml input

    3. vi etc/hadoop/hadoop-env.sh
    4. <!-- 找到java_home 设置java环境变量 -->
    5. export JAVA_HOME=/opt/modules/jdk1.7.0_67
    6. vi etc/hadoop/core-site.xml
    7. <configuration>
    8.      <!-- NameNode -->
    9.      <property>
    10.         <name>fs.defaultFS</name>
    11.         <value>hdfs://hadoop.lilang.com:9000</value>
    12.      </property>
    13.      <!-- 临时文件夹 -->
    14.      <property>
    15.         <name>hadoop.tmp.dir</name>
    16.         <value>/opt/modules/hadoop-2.5.0/data/tmp</value>
    17.      </property>
    18.      <!--垃圾处理时间一周 -->
    19.      <property>
    20.                 <name>fs.trash.interval</name>
    21.                 <value>604800</value>
    22.         </property>
    23. </configuration>
    24. vi etc/hadoop/hdfs-site.xml
    25. <configuration>
    26.    
    27.     <property>
    28.         <name>dfs.replication</name>
    29.         <value>1</value>
    30.     </property>
    31.     <!-- SecondaryNameNode-->
    32.     <property>
    33.             <name>dfs.namenode.secondary.http-address</name>
    34.             <value>hadoop.jianxin.com:50090</value>
    35.     </property>
    36.            
    37. </configuration>
    38. vi etc/hadoop/mapred-env.xml

    39. export JAVA_HOME=/opt/modules/jdk1.7.0_67
    40. vi etc/hadoop/mapred-site.xml
    41. <configuration>

    42.     <property>
    43.         <name>mapreduce.framework.name</name>
    44.         <value>yarn</value>
    45.     </property>
    46.        
    47.         <property>
    48.                 <name>mapreduce.jobhistory.address</name>
    49.                 <value>hadoop.jianxin.com:10020</value>
    50.         </property>

    51.         <property>
    52.                 <name>mapreduce.jobhistory.webapp.address</name>
    53.                 <value>hadoop.jianxin.com:19888</value>
    54.         </property>

    55. </configuration>
    56. #配置yarn的环境变量
    57. vi etc/hadoop/yarn-env.sh
    58. export JAVA_HOME=/opt/modules/jdk1.7.0_67/
    59. vi etc/hadoop/yarn-site.xml
    60. <property>
    61.     <name>yarn.resourcemanager.hostname</name>
    62.     <value>hadoop.jianxin.com</value>
    63. </property>

    64. <property>
    65.     <name>yarn.nodemanager.aux-services</name>
    66.     <value>mapreduce_shuffle</value>
    67. </property>
    68.        
    69. <!-- NodeManager Resouce -->
    70. <property>
    71.     <name>yarn.nodemanager.resource.memory-mb</name>
    72.     <value>4096</value>
    73.     <description>Amount of physical memory, in MB, that can be allocated
    74.     for containers.</description>
    75. </property>
    76. <property>
    77.     <name>yarn.nodemanager.resource.cpu-vcores</name>
    78.     <value>4</value>
    79.     <description>Number of CPU cores that can be allocated
    80.     for containers.</description>
    81. </property>


    82. <!-- 日志聚集功能配置 -->
    83. <property>
    84.     <name>yarn.log-aggregation-enable</name>
    85.     <value>true</value>
    86. </property>
    87. <property>
    88.     <name>yarn.log-aggregation.retain-seconds</name>
    89.     <value>640800</value>
    90. </property>
    91.        
    92. vi etc/hadoop/slaves
    复制代码
    启动方式

    jps查看启动了哪些服务

    1. bin/hdfs namenode -format #格式化文件系统,如果启动失败Cannot remove currentdirectory一般是没有用管理员权限登录
    复制代码
    • 全部启动
      需要配置ssh免密登录,因为链接节点的时候用的是ssh协议
    1. cd ~
    2. cd .ssh
    3. ssh-keygen -t rsa #指定加密算法
    4. ssh-copy-id hadoop.jianxin.com #拷贝公钥到authorized_keys
    5. sbin/start-all.sh            #/opt/modules/hadoop-2.5.0
    6. #默认情况下历史服务器是没有启动的
    7. [root@hadoop hadoop-2.5.0]# jps
    8. 5993 Jps
    9. 5676 NodeManager
    10. 5180 NameNode
    11. 5583 ResourceManager
    12. 5440 SecondaryNameNode
    13. #单独启动历史服务器
    14. sbin/mr-jobhistory-daemon.sh start historyserver
    复制代码
    [root@hadoop hadoop-2.5.0]# jps
    6038 JobHistoryServer
    5676 NodeManager
    5180 NameNode
    6137 Jps
    5583 ResourceManager
    5440 SecondaryNameNode
    这是失败的,因为datanode没有启动起来
    1. java.io.IOException: Incompatible clusterIDs in /opt/modules/hadoop-2.5.0/data/tmp/dfs/data: namenode clusterID = CID-e0ceb89a-d6ce-4c97-888c-32f68887d925; datanode clusterID = CID-a1ab5bc9-d4fc-4e4e-a4f6-e53da68f905a
    2.         at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:477)
    3.         at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:226)
    4.         at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:254)
    5.         at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:975)
    6.         at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:946)
    7.         at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:278)
    8.         at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:220)
    9.         at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:812)
    10.         at java.lang.Thread.run(Thread.java:745)
    复制代码
    每次namenode format会重新创建一个namenodeId,而data目录包含了上次format时的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空data下的所有目录。 或者是先停掉集群,然后将datanode节点目录/dfs/data/current/VERSION中的clusterID修改为与dfs/name/current/VERSION中的clusterID 一致即可。 /opt/modules/hadoop-2.5.0/data/tmp/dfs

    分模块启动
    1. sbin/start-dfs.sh  
    2. sbin/start-yarn.sh
    3. sbin/mr-jobhistory-daemon.sh start historyserver
    复制代码

    关闭服务的时候都有相应的关闭模块,即start变为stop

    • 各个服务组件逐一启动

    1. # hdfs
    2. sbin/hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
    3. # yarn
    4. sbin/yarn-daemon.sh start|stop resourcemanager|nodemanager
    5. # mapreduce
    6. sbin/mr-historyserver-daemon.sh start|stop historyserver
    复制代码



    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-23 00:41 , Processed in 0.062867 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表