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 root774 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 root775 Mar 17 21:57 hdfs-site.xml
#-rw-r--r--. 1 root root620 Mar 17 21:57 httpfs-site.xml
#-rw-r--r--. 1 root root690 Mar 17 21:57 yarn-site.xmlhadoop 环境变量设置Standalone Operation 进入到hadoop的安装目录 我的安装环境 /opt/modules/hadoop-2.5.0mkdir 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
#默认情况下历史服务器是没有启动的
# jps
5993 Jps
5676 NodeManager
5180 NameNode
5583 ResourceManager
5440 SecondaryNameNode
#单独启动历史服务器
sbin/mr-jobhistory-daemon.sh start historyserver# 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
页:
[1]