第1章 Hadoop的部署
1.1. 环境部署
1.1.1. 环境配置
1.1.1.1. 硬件配置
Memory: 32G
CPU: Intel(R) Xeon(R) 2.00GHz 4CPU 24Core
1.1.1.2. 软件配置
OS: Oracle Enterprise Linux 6.6 x86_64(Red Hat Enterprise Linux Server release 6.6)
File System: Ext4
1.1.2. 软件安装
1.1.2.1. JDK安装及配置环境变量
JDK采用绿色解压缩版server-jre-7u76-linux-x64.tar.gz。
命令:tar zxvf server-jre-7u76-linux-x64.tar.gz -C /opt/
解压完成后配置环境变量
命令:vi /ect/profile
添加如下配置:
export JAVA_HOME=/opt/jdk1.7.0_76
export JAVA_BIN=/opt/jdk1.7.0_76/bin
exportCLASSPATH=.:$JAVA_HOME/lib/tools.jar
:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
退出保存执行source /ect/profile
1.1.2.2. CDH安装及配置
1.1.2.2.1.修改主机名
1) 修改/etc/sysconfig/network文件:
NETWORKING=yes
HOSTNAME=master.hadoop
NETWORKING_IPV6=no
GATEWAY=192.168.64.1
1. 其中HOSTNAME与主机名一致。主机名如果跟系统安装时不一致请执行hostname命令让其立即生效,否则会影响各节点互相访问。修改/etc/hosts文件,添加:
172.18.166.251 master.hadoop
172.18.166.252 datanode
复制hosts文件到每个节点上
3) 执行如下命令:service network restart
1.1.2.2.2.打通SSH(所有节点)
ssh -p6208 bi-MN00
1) 这里master节点和其他datanode节点会略有区别。 首先所有节点均执行如下命令,遇到提示一路回车即可:
ssh-keygen -t rsa
2) 然后在所有节点执行以下命令:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3) scp文件到所有datenode节点:
scp ~/.ssh/authorized_keys root@datanode1:~/.ssh/
chmod 600 ~/.ssh/authorized_keys
1.1.2.2.3.关闭防火墙(所有节点)
1) 防火墙会引起hadoop相关组件通讯的各种异常。 防火墙:
service iptables stop (临时关闭)
chkconfig iptables off (重启后生效)
2) SELINUX:
setenforce 0 (临时生效)
修改/etc/selinux/config 下的 SELINUX=disabled (重启后生效)。
1.1.2.2.4.安装NTP服务(所有节点)
集群中所有主机必须保持时间同步,如果时间相差较大会引起各种问题。具体思路如下:
master节点作为ntp服务器与外界对时中心同步时间,随后对所有datanode节点提供时间同步服务;所有datanode节点以master节点为基础同步时间;所有节点安装相关组件:ntp与ntpdate。按顺序安装即可,完成后,配置开机启动:
chkconfig ntpd on
检查是否设置成功:
chkconfig --list ntpd
其中2-5为on状态就代表成功。
1.1.2.2.5.配置内网NTP服务器(master节点)
1) 在配置之前,先使用ntpdate手动同步一下时间,免得本机与对时中心时间差距太大,使得ntpd不能正常同步。这里选用65.55.56.206作为对时中心。
ntpdate -u 65.55.56.206
2) ntp服务只有一个配置文件/etc/ntp.conf,配置好了就OK。这里只给出有用的配置,不需要的配置都用#注掉,这里就不在给出:
restrict default nomodify notrap
server 65.55.56.206 prefer
3) 配置文件完成,保存退出,启动服务,执行如下命令:
service ntpd start
chkconfig ntpd on (设置开机启动)
4) 检查是否成功,用ntpstart命令查看同步状态,出现以下状态代表启动成功:
synchronised to NTP server () at stratum 2
time correct to within 74 ms
polling server every 128 s
如果出现异常请等待几分钟,一般等待5-10分钟才能同步。
1.1.2.2.6.配置ntp客户端(所有datanode节点)
server master.hadoop
ok保存退出,请求服务器前,请先使用ntpdate手动同步一下时间:
ntpdate -u 172.18.166.251 (内网ntp服务器)
这里可能出现同步失败的情况,请不要着急,一般是本地的ntp服务器还没有正常启动,一般需要等待5-10分钟才可以正常同步。启动服务:
service ntpd start
chkconfig ntpd on
因为是连接内网,这次启动等待的时间会比master节点快一些,但是也需要耐心等待一会儿。
1.1.2.2.7.查看SELinux状态:
1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态
SELinux status: enabled
2、getenforce ##也可以用这个命令检查
关闭SELinux:
1、临时关闭(不用重启机器):
setenforce 0 ##设置SELinux 成为permissive模式
##setenforce 1 设置SELinux 成为 enforcing模式
2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可
1.1.2.3. 配置MySQL 5.1.72
1.1.2.3.1.安装mysql5.1.72
安装Server端:
chmod 755 MySQL-server-community-5.1.72-1.rhel5.x86_64.rpm
rpm -ivh MySQL-server-community-5.1.72-1.rhel5.x86_64.rpm --nodeps --force
替换mysql.cnf文件:
chmod 755 mysql.cnf
cp mysql.cnf /usr/share/mysql/my-medium.cnf
cp mysql.cnf /etc/my.cnf
安装Client端:
chmod 755 MySQL-client-community-5.1.72-1.rhel5.x86_64.rpm
rpm -ivh MySQL-client-community-5.1.72-1.rhel5.x86_64.rpm --nodeps --force
1.1.2.3.2.修改mysql密码:
mysqladmin flush-privileges password 'root'
1.1.2.3.3.配置远程访问:
连接mysql:mysql -h localhost -u root –p 回车后输入登陆密码即可。
use mysql;
select Host,User from user;
UPDATE user SET Host = '%' WHERE User= 'root' LIMIT 1;
flush privileges;
1.1.2.5. yum遇到的问题解决
rm -f /var/run/yum.pid #杀死yum进程
yum clean all
yum makecache
1.1.2.6. Hadoop2.2.0安装及配置
1.1.2.6.1.在linux编译hadoop2.4.1的源码
1. 首先安装google的protobuf
yum install glibc-headers
yum install gcc
yum install gcc-c++
yum install make
yum install cmake
yum install openssl-devel
yum install ncurses-devel
1. 安装protobuf-2.5.0.tar.gz
./configure && make && make check && make install
1. 配置maven的环境变量,编译hadoop源码
mvn package -DskipTests -Pdist,native
1.1.2.6.2.伪分布搭建
HDFS伪分布搭建
修改配置文件etc/hadoop/hadoop-env.sh:
JAVA_HOME=/opt/jdk1.7.0_76
修改配置文件etc/hadoop/core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master.hadoop:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/local/hadoop/tmp</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
</configuration>
修改配置文件etc/hadoop/hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
格式化文件系统:
$ bin/hdfs namenode -format
启动HDFS集群:
$ sbin/start-dfs.sh
访问web浏览器:
NameNode - http://localhost:50070/
练习:
创建目录:
$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/root
复制文件:
$ bin/hdfs dfs -put /etc/profile input
关闭集群:
$ sbin/stop-dfs.sh
Yarn伪分布安装
修改配置文件etc/hadoop/mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改配置文件etc/hadoop/yarn-site.xml:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
启动Yarn集群:
$ sbin/start-yarn.sh
访问web浏览器:
ResourceManager - http://localhost:8088/
运行例子:
$bin/hadoopjar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount input output
查看结果:
$ bin/hdfs dfs -cat output/*
关闭Yarn集群:
$ sbin/stop-yarn.sh
-----------------------------
1.1.2.6.3.搭建手工切换HA(high availibility)的HDFS集群
namenode:master和dataslave
datanode:dataslave1
journalnode:master、dataslave、dataslave1
1.0 配置linux环境
1.0.1 确保虚拟机直接可以ping成功
ping 192.168.1.181
1.0.2 设置hostname
vi /etc/sysconfig/network
1.0.3 配置/etc/hosts
vi /etc/hosts
1.0.4 关闭防火墙
service iptables stop
chkconfig iptables off
1.0.5 实现ssh免密码登录
1.0.6 jdk安装(前面已经讲述)
1.1 配置文件(hadoop-env.sh、core-site.xml、hdfs-site.xml、slaves)
1.1.1 hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.7.0-45
1.1.2 core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
1.1.3 hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>cluster</value>
</property>
<property>
<name>dfs.ha.namenodes.cluster</name>
<value>master,dataslave</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster.master</name>
<value>master:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster.master</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster.dataslave</name>
<value>dataslave:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster.dataslave</name>
<value>dataslave:50070</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.cluster</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;dataslave:8485;dataslave1:8485/cluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/tmp/journal</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
1.1.6 slaves
master
dataslave
dataslave1
dataslave2
1.1.7 把master上的hadoop文件夹复制到dataslave、dataslave1、dataslave2节点
1.2 启动journalnode集群
在master、dataslave、dataslave1上分别执行hadoop/sbin/hadoop-daemon.sh start journalnode
1.3 格式化namenode、启动namenode
在master上执行hadoop/bin/hdfs namenode -format
在master上分别执行hadoop/sbin/hadoop-daemon.sh start namenode
在dataslave上执行hadoop/bin/hdfs namenode -bootstrapStandby
在dataslave上分别执行hadoop/sbin/hadoop-daemon.sh start namenode
在master上执行hadoop/bin/hdfs haadmin -failover --forceactive dataslave master
1.4 启动datanode
在master上分别执行hadoop/sbin/hadoop-daemons.sh start datanode
1.1.2.6.4.搭建自动切换HA(high availibility)的HDFS集群
zookeeper:mast缩,重命名为zookeeper,把conf/zoo_sample.cfg重命名为conf/zoo.cfg
修改文件conf/zoo.cfger、dataslave、dataslave1
namenode:master和dataslave
datanode:dataslave1
journalnode:master、dataslave、dataslave1
2.0 搭建zookeeper集群,并启动
2.0.1 在master上解压
(1)dataDir=/opt/local/zookeeper/data
(2)增加以下内容
server.1=master:2888:3888
server.2=dataslave:2888:3888
server.3=dtaslave1:2888:3888
创建目录mkdir zookeeper/data
写入文件echo 1 zookeeper/data/myid
复制zookeeper文件夹到hadoop2、hadoop3上
scp -rq zookeeper hadoop2:/usr/local
scp -rq zookeeper hadoop3:/usr/local
在hadoop2上执行命令echo 2 zookeeper/data/myid
在hadoop3上执行命令echo 3 zookeeper/data/myid
2.0.2 启动
在master、dataslave、dtaslave1上,分别执行命令zookeeper/bin/zkServer.sh start
2.0.3 验证
执行命令zookeeper/bin/zkCli.sh
进入后执行ls /
2.1 配置文件(hadoop-env.sh、core-site.xml、hdfs-site.xml、slaves)
2.1.1 hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.7.0-45
2.1.2 core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,dataslave:2181,dataslave1:2181</value>
</property>
2.1.3 hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
</property>
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>master,dataslave</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.master</name>
<value>master:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.master</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.dataslave</name>
<value>dataslave:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.dataslave</name>
<value>dataslave:50070</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.cluster1</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://dataslave:8485;dataslave:8485/cluster1</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/local/hadoop/tmp/journal</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
2.1.6 slaves
dataslave
dataslave1
2.1.7 删除其他节点的hadoop文件夹,然后把master上的hadoop文件夹复制到其他节点
2.2 格式化zk集群
在master上执行hadoop/bin/hdfs zkfc -formatZK
2.3 启动journalnode集群
在master、dataslave、dataslave1上分别执行hadoop/sbin/hadoop-daemon.sh start journalnode
2.4 格式化namenode、启动namenode
在master上执行hadoop/bin/hdfs namenode -format
在master上分别执行hadoop/sbin/hadoop-daemon.sh start namenode
在dataslave上执行hadoop/bin/hdfs namenode -bootstrapStandby
在dataslave上分别执行hadoop/sbin/hadoop-daemon.sh start namenode
2.5 启动datanode
在master上分别执行hadoop/sbin/hadoop-daemons.sh start datanode
2.6 启动ZKFC
在master、dataslave上启动zkfc,执行命令hadoop/sbin/hadoop-daemon.sh start zkfc
1.1.2.6.5.搭建实现federation的HDFS集群
3.搭建实现federation的HDFS集群(多了federation配置)
----------------------------------------------------------------------------------------------
zookeeper:hadoop1、hadoop2、hadoop3
cluster1的namenode:hadoop1、hadoop2
cluster3的namenode:hadoop3、hadoop4
datanode:hadoop3、hadoop4、hadoop5、hadoop6
journalnode:hadoop1、hadoop2、hadoop3
3.1 配置文件(hadoop-env.sh、core-site.xml、hdfs-site.xml、slaves)
3.1.1 hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.7.0-45
3.1.2 core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
<property>
<name>fs.viewfs.mounttable.default.link./cluster1</name>
<value>hdfs://hadoop1:9000/</value>
</property>
<property>
<name>fs.viewfs.mounttable.default.link./cluster3</name>
<value>hdfs://hadoop3:9000</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
3.1.3 hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>cluster1,cluster3</value>
</property>
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>hadoop1,hadoop2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.hadoop1</name>
<value>hadoop1:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.hadoop1</name>
<value>hadoop1:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.hadoop2</name>
<value>hadoop2:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.hadoop2</name>
<value>hadoop2:50070</value>
</property>
<property>
<name>dfs.ha.namenodes.cluster3</name>
<value>hadoop3,hadoop4</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster3.hadoop3</name>
<value>hadoop3:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster3.hadoop3</name>
<value>hadoop3:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster3.hadoop4</name>
<value>hadoop4:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster3.hadoop4</name>
<value>hadoop4:50070</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.cluster1</name>
<value>true</value>
<description>2个集群的配置中该地方不同</description>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/cluster1</value>
<description>2个集群的配置中该地方不同</description>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/tmp/journal</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
<description>2个集群的配置中该地方不同</description>
</property>
3.1.6 slaves
hadoop3
hadoop4
hadoop5
hadoop6
3.1.7 删除其他节点的hadoop文件夹,然后把hadoop1上的hadoop文件夹复制到其他节点
3.2 在hadoop1、hadoop2、hadoop3上,分别执行命令zookeeper/bin/zkServer.sh start
3.3 格式化zk集群
在hadoop1、hadoop3上执行hadoop/bin/hdfs zkfc -formatZK
3.4 启动journalnode集群
在hadoop1、hadoop2、hadoop3上分别执行hadoop/sbin/hadoop-daemon.sh start journalnode
3.5 格式化namenode、启动namenode
在hadoop1上执行hadoop/bin/hdfs namenode -format -clusterId cid
在hadoop1上分别执行hadoop/sbin/hadoop-daemon.sh start namenode
在hadoop2上执行hadoop/bin/hdfs namenode -bootstrapStandby
在hadoop2上分别执行hadoop/sbin/hadoop-daemon.sh start namenode
在hadoop3上执行hadoop/bin/hdfs namenode -format -clusterId cid
在hadoop3上分别执行hadoop/sbin/hadoop-daemon.sh start namenode
在hadoop4上执行hadoop/bin/hdfs namenode -bootstrapStandby
在hadoop4上分别执行hadoop/sbin/hadoop-daemon.sh start namenode
3.6 启动datanode
在hadoop1上分别执行hadoop/sbin/hadoop-daemons.sh start datanode
3.7 启动ZKFC
在hadoop1、hadoop2、hadoop3、hadoop4上启动zkfc,执行命令hadoop/sbin/hadoop-daemon.sh start zkfc
4.验证:
viewFS是跨隶属于同一个federation的多个hdfs的文件管理系统。
使用hadoop1:50070/dfsclusterhealth.jsp查看集群情况
使用hadoop/bin/hdfs dfs -ls viewfs:///统一查看联邦中的数据内容
1.1.2.6.6.Yarn集群搭建
修改配置文件 yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
修改配置文件 mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
启动在master上执行 hadoop/sbin/start-yarn.sh
1.在mapred-site中配置
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
<description>MapReduce JobHistory Server host:port. Default port is 10020.</description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
<description>MapReduce JobHistory Server Web UI host:port. Default port is 19888.</description>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/opt/local/hadoop/tmp/mr_history</value>
<description>Directory where history files are written by MapReduce jobs.</description>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/opt/local/hadoop/tmp/mr_history</value>
<description>Directory where history files are managed by the MR JobHistory Server.</description>
</property>
2.在yarn-site.xml中配置
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
3.复制到集群的其他节点
4.重新启动yarn平台
sbin/stop-yarn.sh
sbin/start-yarn.sh
最后执行sbin/mr-jobhistory-daemon.sh start historyserver
教你手工安装开源Hadoop集群
最新推荐文章于 2024-04-25 13:57:42 发布