51Testing软件测试论坛
标题: hadoop编程笔记 [打印本页]
作者: 测试积点老人 时间: 2018-12-27 15:57
标题: hadoop编程笔记
什么是HadoopHadoop项目主要包括以下四个模块:
- 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系统自带的环境安装包- rpm -qa|grep java #查询安装的java环境
- rpm -e --nodeps + 包名 #卸载相应的安装包,多个包名以空格隔开
复制代码 安装java的jdk
- chmod u+x ./* #为安装文件夹设置可执行权限
- tar -zxvf jdk-7u67-linux-x64.tar.gz -C /opt/modules/
- #-C 指定解压的位置,默认是当前文件夹
- cd /opt/modules/jdk1.7.0_67/
- vi /etc/profile #编辑环境变量
- export JAVA_HOME=/opt/modules/jdk1.7.0_67/
- export PATH=$PATH:$JAVA_HOME/bin
- source /etc/profile #使环境变量生效
- #退出后重新登录
- java -version
- #bash: /opt/modules/jdk1.7.0_67/bin/java: cannot execute binary file
- #赋值了权限以后还出现这样的问题就是linux版本出现了出现了问题> > 这里输入引用文本
复制代码 安装hadoop
- tar -zxvf hadoop-2.5.0.tar.gz -C /opt/modules/
- cd /opt/modules/hadoop-2.5.0/etc/hadoop
- echo $JAVA_HOME #输出java环境变量
- vi hadoop-env.sh
- #查找 JAVA_HOME的位置
- export JAVA_HOME=${JAVA_HOME}替换为JAVA_HOME=/opt/modules/jdk1.7.0_67
- cd /opt/modules/hadoop-2.5.0
- mkdir input
- cp etc/hadoop/*.xml input/
- #-rw-r--r--. 1 root root 3589 Mar 17 21:57 capacity-scheduler.xml
- #-rw-r--r--. 1 root root 774 Mar 17 21:57 core-site.xml
- #-rw-r--r--. 1 root root 9201 Mar 17 21:57 hadoop-policy.xml
- #-rw-r--r--. 1 root root 775 Mar 17 21:57 hdfs-site.xml
- #-rw-r--r--. 1 root root 620 Mar 17 21:57 httpfs-site.xml
- #-rw-r--r--. 1 root root 690 Mar 17 21:57 yarn-site.xml
复制代码 hadoop 环境变量设置Standalone Operation 进入到hadoop的安装目录 我的安装环境 /opt/modules/hadoop-2.5.0
- mkdir input
- cp etc/hadoop/*.xml input
- vi etc/hadoop/hadoop-env.sh
- <!-- 找到java_home 设置java环境变量 -->
- export JAVA_HOME=/opt/modules/jdk1.7.0_67
- vi etc/hadoop/core-site.xml
- <configuration>
- <!-- NameNode -->
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://hadoop.lilang.com:9000</value>
- </property>
- <!-- 临时文件夹 -->
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/opt/modules/hadoop-2.5.0/data/tmp</value>
- </property>
- <!--垃圾处理时间一周 -->
- <property>
- <name>fs.trash.interval</name>
- <value>604800</value>
- </property>
- </configuration>
- vi etc/hadoop/hdfs-site.xml
- <configuration>
-
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- </property>
- <!-- SecondaryNameNode-->
- <property>
- <name>dfs.namenode.secondary.http-address</name>
- <value>hadoop.jianxin.com:50090</value>
- </property>
-
- </configuration>
- vi etc/hadoop/mapred-env.xml
- export JAVA_HOME=/opt/modules/jdk1.7.0_67
- vi etc/hadoop/mapred-site.xml
- <configuration>
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
-
- <property>
- <name>mapreduce.jobhistory.address</name>
- <value>hadoop.jianxin.com:10020</value>
- </property>
- <property>
- <name>mapreduce.jobhistory.webapp.address</name>
- <value>hadoop.jianxin.com:19888</value>
- </property>
- </configuration>
- #配置yarn的环境变量
- vi etc/hadoop/yarn-env.sh
- export JAVA_HOME=/opt/modules/jdk1.7.0_67/
- vi etc/hadoop/yarn-site.xml
- <property>
- <name>yarn.resourcemanager.hostname</name>
- <value>hadoop.jianxin.com</value>
- </property>
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
-
- <!-- NodeManager Resouce -->
- <property>
- <name>yarn.nodemanager.resource.memory-mb</name>
- <value>4096</value>
- <description>Amount of physical memory, in MB, that can be allocated
- for containers.</description>
- </property>
- <property>
- <name>yarn.nodemanager.resource.cpu-vcores</name>
- <value>4</value>
- <description>Number of CPU cores that can be allocated
- for containers.</description>
- </property>
- <!-- 日志聚集功能配置 -->
- <property>
- <name>yarn.log-aggregation-enable</name>
- <value>true</value>
- </property>
- <property>
- <name>yarn.log-aggregation.retain-seconds</name>
- <value>640800</value>
- </property>
-
- vi etc/hadoop/slaves
复制代码 启动方式jps查看启动了哪些服务
- bin/hdfs namenode -format #格式化文件系统,如果启动失败Cannot remove currentdirectory一般是没有用管理员权限登录
复制代码- 全部启动
需要配置ssh免密登录,因为链接节点的时候用的是ssh协议
- cd ~
- cd .ssh
- ssh-keygen -t rsa #指定加密算法
- ssh-copy-id hadoop.jianxin.com #拷贝公钥到authorized_keys
- sbin/start-all.sh #/opt/modules/hadoop-2.5.0
- #默认情况下历史服务器是没有启动的
- [root@hadoop hadoop-2.5.0]# jps
- 5993 Jps
- 5676 NodeManager
- 5180 NameNode
- 5583 ResourceManager
- 5440 SecondaryNameNode
- #单独启动历史服务器
- 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没有启动起来
- 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
- at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:477)
- at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:226)
- at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:254)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:975)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:946)
- at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:278)
- at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:220)
- at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:812)
- 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
分模块启动- sbin/start-dfs.sh
- sbin/start-yarn.sh
- sbin/mr-jobhistory-daemon.sh start historyserver
复制代码关闭服务的时候都有相应的关闭模块,即start变为stop
- # hdfs
- sbin/hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
- # yarn
- sbin/yarn-daemon.sh start|stop resourcemanager|nodemanager
- # mapreduce
- sbin/mr-historyserver-daemon.sh start|stop historyserver
复制代码
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) |
Powered by Discuz! X3.2 |