打赏

部署hadoop高性能集群

Hadoop是 Lucene 创始人 Doug Cutting,根据Google的相关内容山寨出来分布式文件系统和对海量数据进行分析计算的基础框架系统,其中包含 MapReduce 程序, hdfs系统等。
 
Hadoop是一个由 Apache基金会所开发的分布式系统
 
 
下载:
 
hadoop基亍java开的。
 
Hadoop包括两大核心, 分布式存储系统 和分布式计算系统 。
 
分布式存储:为什么数据需要存储在分布式的系统中呢,难道单一的计算机存储不了吗,难道现在的几个TB的硬盘装不下这些数据吗?事实上,确实装不下。比如,很多的电信通话记录就存储在很多台服务器的很多硬盘中。那么,要处理这么多数据,必须从一台一台服务器分别读取数据和写入数据,太麻烦了! 我们希望有一种文件系统,可以管辖很多服务器用于存储数据。通过这个文件系统存储数据时,感觉不到是存储到不同的服务器上的。当读取数据时,感觉不到是从不同的服务器上读取。
 
分布式计算:对数据进行处理时,我们会把读取到内存中。如果对海量数据进行处理时,比如果海量比大小是 100GB,我们要统计文件中一共有多少个单词。想把数据都加载到内存几乎是不可能的,称为移动数据。
 
那么是否可以把程序代码放到存数据的服务器上呢?因为与原始数据相比,一般程序很小几乎可以忽略, 所以只省下了原始数据传输时间。现在,数据是存放分布式文件系统中,100GB的数据可能存放在很多的服务器上,那么就可以把程序代码分发到这些服务器上,在这些服务器上同时执行,也就是并行计算,也是分布式计算。这就大大缩短了程序的执行时间。我们把程序代码移动到数据节点的机器上执行的计算方式叫做移动计算。
 
分布式计算需要的是最终结果,程序代码在很多机器上并行执行后会产生很多的结果,因此需要有一段代码对这些中间结果进行汇总。Hadoop中分布式计算一般由两阶段完成的。第一阶段负责读取各数据节点中的原始数据,进行初步处理,对各个节点中的数据求单词数。然后把处理结果传输到第二阶段,对中间结果进行汇总,产生最终结果,求出100G文件总共多少个单词。
 
Hadoop中分布式计算部分称为MapReduce(Map:影射,Reduce归约)
MapReduce是一种编程模型,用于大规模数据集(大约1TB)的并行计算。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。
 
在分布式计算过程中有以下角色:(task:任务,tracker:跟踪器)
     主节点:作业节点(jobtracker)。接收作业分发任务。
     从节点:任务节点(tasktracker)。运行第一阶段代码称为Map任务(map task),运行第二阶段的代码称为reduce任务(reduce task)。
 
名词解释:
     Hadoop:     Apache开源的分布式框架
     HDFS:     Hadoop的分布式文件系统
     NameNode:     Hadoop HDFS元数据主节点服务器,负责保存DataNode文件存储元数据信息,服务器为单点。
     JobTracker:     Hadoop 的Map/Reduce调度器,负责与TaskTracker通信分配计算任务并跟踪任务进度,服务器为单点。
     DataTracker:     Hadoop数据节点,负责存储数据。
     TaskTracker:     Hadoop调度程序,负责Map,Reduce任务的启动和执行。
注:Namenode记录着每个文件中各个块所在的数据节点的位置信息。
 
 
1.环境准备
#启用iptables
systemctl stop firewalld && systemctl disable firewalld && yum install -y iptables-services && systemctl enable iptables && systemctl start iptables
iptables -D INPUT 5 && /usr/libexec/iptables/iptables.init save
 
#关闭selinux
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
 
#处理hosts文件
[root@localhost ~]# vi /etc/hosts
192.168.10.16 hadoopm
192.168.10.17 hadoopsa
192.168.10.18 hadoopsb
 
[root@localhost ~]# scp /etc/hosts root@hadoopsa:/etc/
[root@localhost ~]# scp /etc/hosts root@hadoopsb:/etc/
 
#JDK安装
[root@localhost ~]# tar zxvf jdk-8u25-linux-x64.tar.gz
[root@localhost ~]# mv jdk1.8.0_25/ /usr/java
[root@localhost ~]# vi /etc/profile
export JAVA_HOME=/usr/java
export JRE_HOME=/usr/java/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
 
[root@localhost ~]# source /etc/profile
 
#同理安装slave节点jdk
scp -vr jdk1.8.0_25 hadoopsa:/usr/java
scp -vr jdk1.8.0_25 hadoopsb:/usr/java
 
#帐号
[root@localhost ~]# useradd -u 8000 hadoop
[root@localhost ~]# echo 1qaz | passwd --stdin hadoop
 
 
2.安装hadoop到/home/hadoop/hsdoop-2.2.0目录
[root@localhost hadoop]# su - hadoop
[root@localhost ~]# mkdir -p /home/hadoop/dfs/name /home/hadoop/dfs/data /home/hadoop/tmp
[root@localhost hadoop]# tar zxvf /root/hadoop-2.2.0.tar.gz -C /home/hadoop
 
3.修改配置文件
3.1 hadoop-env.sh指定java的运行环境
[hadoop@localhost ~]$ vi /home/hadoop/hadoop-2.2.0/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/java
 
3.2 yarn-env.sh指定yarn框架的java运行环境
yarn: Hadoop的新MapReduce框架Yarn是Hadoop自0.23.0版本后新的map-reduce框架
[hadoop@localhost ~]$ vi /home/hadoop/hadoop-2.2.0/etc/hadoop/yarn-env.sh
export JAVA_HOME=/usr/java
 
3.3 配置文件slaves,指定datanode数据存储服务器
[hadoop@localhost ~]$ vi /home/hadoop/hadoop-2.2.0/etc/hadoop/slaves
hadoopsa
hadoopsb
 
3.4 配置文件core-site.xml,指定访问hadoop web界面访问路径
[hadoop@localhost ~]$ vi /home/hadoop/hadoop-2.2.0/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoopm:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
 
3.5 配置文件hdfs-site.xml
[hadoop@localhost ~]$ vi /home/hadoop/hadoop-2.2.0/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoopm:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.namenode.data.dir</name>
<value>file:/home/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
 
3.6 配置文件mapred-site.xml
这个是mapreduce任务的配置,由于hadoop2.x使用yarn框架,所以要实现分布式部署,必须在mapreduce.framework.name属性下配置yarn。
mapred.map.tasks和mapred.reduce.tasks分别为map和reduce的任务数
同时指定: Hadoop的历史服务器historyserver
 
Hadoop自带了一个历史服务器,可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少Map、用了多少个reduce、作业提交时间、作业启动时间、作业完成时间等信息。默认情况下,Hadoop历史服务器是没有启动的,通过以下命令可启动历史服务器
$ sbin/mr-jobhistory-daemon.sh start historyserver
这样我们就可以在服务器的19888端口上打开历史服务器的WEN UI界面。查看作业情况。
 
[hadoop@localhost hadoop]$ cp /home/hadoop/hadoop-2.2.0/etc/hadoop/mapred-site.xml.template /home/hadoop/hadoop-2.2.0/etc/hadoop/mapred-site.xml
[hadoop@localhost hadoop]$ vi /home/hadoop/hadoop-2.2.0/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoopm:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoopm:19888</value>
</property>
</configuration>
 
3.7 配置文件yarn-site.xml
该文件为yarn框架配置,主要是一些任务的启动位置
[hadoop@localhost hadoop]$ vi /home/hadoop/hadoop-2.2.0/etc/hadoop/yarn-site.xml
<configuration>
 
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoopm:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoopm:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoopm:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoopm:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoopm:8088</value>
</property>
</configuration>
 
 
4.复制配置文件
[hadoop@localhost ~]$ scp -vr /home/hadoop/hadoop-2.2.0 hadoop@hadoopsa:~/
[hadoop@localhost ~]$ scp -vr /home/hadoop/hadoop-2.2.0 hadoop@hadoopsb:~/
 
 
5.hadoop设置ssh免密登录
[hadoop@localhost ~]$ ssh-keygen
[hadoop@localhost ~]$ ssh-copy-id hadoopsm  
[hadoop@localhost ~]$ ssh-copy-id hadoopsa
[hadoop@localhost ~]$ ssh-copy-id hadoopsb
 
 
6.启动分布式存储
#master上启动hadoop
#格式化
[hadoop@localhost ~]$ /home/hadoop/hadoop-2.2.0/bin/hdfs namenode -format
 
#启动hdfs
[hadoop@localhost ~]$ /home/hadoop/hadoop-2.2.0/sbin/start-dfs.sh
 
#查看进程
[hadoop@localhost ~]$ ps -aux | grep namenode
[hadoop@localhost ~]$ ps -aux | grep datanode
 
7.启动分布式计算
[hadoop@localhost ~]$ /home/hadoop/hadoop-2.2.0/sbin/start-yarn.sh
 
#查看进程
[hadoop@localhost ~]$ ps -aux | grep resourcemanager
[hadoop@localhost ~]$ ps -aux | grep nodemanager
 
注: start-dfs.sh和 start-yarn.sh 这两个脚本可用 start-all.sh代替
 
8.启动jobhistory服务,查看mapreduce运行状态
[hadoop@localhost ~]$ /home/hadoop/hadoop-2.2.0/sbin/mr-jobhistory-daemon.sh start historyserver
 
#查看进行
[hadoop@localhost ~]$ ps -aux | grep historyserver
 
9.查看HDFS分布式文件系统状态
[hadoop@localhost ~]$ /home/hadoop/hadoop-2.2.0/bin/hdfs dfsadmin -report
 
10.查看一个文件由哪些块组成
[hadoop@localhost ~]$ /home/hadoop/hadoop-2.2.0/bin/hdfs fsck / -files -blocks
 
11.WEB端
HDFS:     http://192.168.10.16:50070/dfshealth.jsp
hadoop: http://192.168.10.16:8088/cluster
 
posted @ 2017-03-14 16:19  pkzeng88  阅读(234)  评论(0)    收藏  举报