1.准备环境(JDK和Hadoop)
$ tar -zxf hadoop-2.5.2.tar.gz -C /opt/app/
// 卸载Linux自带java,安装jdk1.8,hive只支持1.7以上版本
$ rpm -qa|grep java
- $ rpm -e --nodeps java的各项文件
2.环境配置
在hadoop安装目录下的 etc/hadoop/hadoop-env.sh 配置一下环境
通过Notepad的Nppftp远程链接进行编辑
$ vi /opt/app/etc/hadoop/hadoop-env.sh
- 配置JDK环境
# set to the root of your Java installation
export JAVA_HOME=/usr/java/latest
-
配置hadoop安装目录(此项可以不用高配置)
# Assuming your installation directory is /usr/local/hadoop
export HADOOP_PREFIX=/usr/local/hadoop
3.启动HDFS的三种模式(本地模式,伪分布,分布式)
3.1Local (Standalone) Mode 本地模式
通常作为一个Java使用,对于debug非常有用,演示实例统计程序可以通过touch一个文件插入数据重新进行统计。
# 创建一个input文件夹备份未修改过的xml文件
$ mkdir input
$ cp etc/hadoop/*.xml input
# 执行hadoop 下的一个example的jar包
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar grep input output 'dfs[a-z.]+'
# 查看输出结构
$ cat output/*
3.2 Pseudo-Distributed Mode伪分布式模式
etc/hadoop/core-site.xml:
<configuration>
- // 修改hdfs文件系统位置
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
- // 配置hadoop临时文件夹位置,便于系统管理
- // 以后再执行bin/hdfs namenode -format 错误时,删除此文件目录下的dfs文件
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/app/hadoop-2.5.2/data/tmp</value>
</property>
</configuration>
etc/hadoop/hdfs-site.xml:
<configuration>
- // 配置本地文件副本数
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
另外需要配置ssh无秘钥登录,方便每次各主机之间进行访问时
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
- // 测试无秘钥登录是否成功
$ ssh localhost
运行集群
- 格式化文件系统
// 多次文件格式的时候,删除hadoop.tmp.dir的文件,防止报错
$ bin/hdfs namenode -format
- 启动hdfs
// 配有SSH无秘钥启动的方式启动
$ sbin/start-dfs.sh
// 也可以用一下方式启动
$ sbin/hadoop-daemon.sh start namenode
$ sbin/hadoop-daemon.sh start datanode
$ sbin/hadoop-daemon.sh start secondarynode(在伪分布式集群中,没必要不启动)
- 启动hdfs以后hadoop将自动在
logs下创建日志
- 我么也可以在其WEB网页
查看NameNode信息:
http://localhost:50070/
注意:若在Linux客户端通过JPS文件查看若存在进场50070无法打开的时,
应查看系统及Linucx虚拟机防火墙是否进行关闭
运行MapReduce任务
$ bin/hdfs dfs -mkdir -p /user/huangxc/
// 将本地文件上传到hdfs系统上
$ bin/hdfs dfs -put etc/hadoop input user/huangxgc/
-
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar grep /user/huangxc/input /user/huangxc/inputoutput 'dfs[a-z.]+
' - // 将output文件下载到本地文件
$ bin/hdfs dfs -get output output
// 查看结果
$ cat output/*
$ bin/hdfs dfs -cat output/*
// 关闭hdfs系统
$ sbin/stop-dfs.sh
4.YARN on Single Node
- MapReduce运行在分布式的系统上。
a mapred-env.sh 配置${JAVA_HOME}(可以不用配置)
b.将
etc/hadoop/
mapred-site.xml.tmplate后缀去掉
etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
c.etc/hadoop/yarn-env.xml:(可以不用配置)
# some Java parameters
export JAVA_HOME=/opt/modules/jdk1.8.0_121
d.etc/hadoop/yarn-site.xml:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop.com</value>
</property>
</configuration>
# 运行yarn
$ sbin/start-yarn.sh
#运行mapreduce程序
- # 由于输出目录不能存在,所以要先将原输出目录和文件删除
-
$ bin/hdfs -rm -R
/user/huangxc/output -
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar grep /user/huangxc/input /user/huangxc/output 'dfs[a-z.]+
' - # 查看输出文件信息
- $ bin/hdfs -dfs -cat /user/huangxc/output
- # 关闭yarn
$ sbin/stop-yarn.sh
YARN的ResourceMananger同NameNode一样,有WEB界面:
- ResourceManager - http://localhost:8088/
----------------------------------------------------------------------------------------------------------------------------
5.搭建分布式集群操作
- 规划分布式集群的集群与服务
1.设置集群是基于前SingleNode的配置上进行配置
2.集群采用使用三台虚拟机进行搭建,主机地址分别为hadoo.com、hadoop02.com、hadoop03.com,集群IP地址设置在同一网段
3.确保每台虚拟机防火墙均进行了关闭,后面很多路由会无法连接报错
分布式集群机群规划 | |||
hadoop.com | hadoop02.com | hadoop03.com | 配置文件 |
HDFS系统 | hadoop-env.shcore-site.xmlhdfs-site.xmlslaves | ||
NameNode | |||
DataNode | DataNode | DataNode | |
SeconaryNameNode | |||
YARN系统 | yarn-env.shyarn-site.shslaves | ||
RescourceMannager | |||
nodeManager | NodeManager | NodeManager | |
MapReduce系统 | mapred-env.shmarred-site.xml | ||
JobHistoryServer |
5.1 HDFS系统配置
- hadoop-env.sh 配置&{JAVA_HOME}jdk路径(上边已配置)
- core-site.xml 配置hdfs地址 fs.defaultFS、临时文件路径hadoop.tmp.dir ,(上边已配置)
- etc/hadoop/core-site.xml
- hdfs-site.xml 配置副本数 默认为3 (删除原单节点配置,或将value改为3)
- 配置SeconaryNameNode地址
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop03.com:50090</value>
</property>
- etc/hadoop/slaves
hadoop.com
hadoop02.com
hadoop03.com
5.2 YARN系统配置
- - yarn-env.sh jdk路径
- - yarn-site.sh
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
// ResourceManager地址
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop02.com</value>
</property>
slaves 同上公用slaves文件
5.3 MapReduce系统配置
- marred-site.xml jdk路径
- marred-site.xml 、(mapreduce.framework.name单节点已经配置)
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop.com:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop.com:19888.</value>
</property>
5.4 将hadoop.com的分发给其他主机
- 配置不同主机之间的无秘钥登录,避免访问重复登录输入密码:
ssh-copy-id hadoop02.com
ssh-copy-id hadoop03.com
- 将文件分发给不同的主机
$ scp -r hadoop2.5.2/ huangxc@hadoop02.com:/opt/app/
$ scp -r hadoop2.5.2/ huangxc@hadoop03.com:/opt/app/
6.运行集群
6.1 启动HDFS 准备文件系统
$ bin/hdfs dfs namenode -format
$ sbin/strat-dfs.sh
// 启动yarn时,因为resourcemannager在hadoop02.com上运行,所以在hadoop02.com上运行启动,不易报错
$ sbin/strat-yarn.sh
7 .HDFS High Availability Using the Quorum Journal Manager 高可用性的HDFS
在搭建高可用性的HDFS之前,需要搭建apache的协作框架 。
ZooKeeper™安装并按照如下配置conf/zoo.cfg。zookeeper.最好单数个
并且在dataDir目录下创建myid并填上所属Server的编号数字
Running Replicated ZooKeeper
tickTime = 2000
dataDir = / var / lib / zookeeper
clientPort = 2181
initLimit = 5
syncLimit = 2
server.1 = hadoop.com:2888:3888
server.2 =hadoop02.com:2888:3888
server.3 = hadoop03.com:2888:3888
hdfs-site.xml
高可用的HDFS系统规划 | |||
hadoop.com | hadoop02.com | hadoop03.com | 配置文件 |
HDFS系统 | hadoop-env.shcore-site.xmlhdfs-site.xmlslaves | ||
NameNode | NameNode | ||
DataNode | DataNode | DataNode | |
journalnode | journalnode | journalnode | |
ZooKeeper | |||
zookeeper | zookeeper | zookeeper | zoo.cfg |
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>machine1.example.com:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>machine2.example.com:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>machine1.example.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>machine2.example.com:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>machine1.example.com:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>machine2.example.com:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster</value>
</property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/exampleuser/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/path/to/journal/node/local/data</value>
</property>
core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
QJM HA 启动
1.在各个JournalNode 节点上,输入以下命令启动journalnode服务:
sbin/hadoop-daemon.sh start namenode
2.在 nn1 上,对其hdfs进行格式化,并启动namenode:
sbin/hadoop-daemon.sh start namenode
3.在nn2 上,同步nn1的元数据信息
bin/hdfs namenode -bootstrapStandby
4.启动nn2
sbin/hadoop-daemon.sh start datanode
5.将nn1切换为Active状态
bin/hdfs haadmin -transitionToActive nn1
6.在nn1上启动素有datanode
sbin/hadoop-daemon.sh start datanode