hadoop安装
一、单个namenode集群搭建
1、简单概念
机器
node1 node2 node3 node4
uri概念–统一资源定位符
hdfs://node1:9000 uri
field///
jdbc:mysql://localhost:3306
安装jdk
JAVA_HOME=/usr/local/jdk1.7.0_45/
2、解压文件
tar -zxvf hadoop-2.6.4.tar.gz -C /apps
ln -s /apps/hadoop-2.6.4 hadoop
修改配置文件
cd /apps/hadoop-2.6.4/etc/hadoop
修改java_home信息
vi hadoop-env.sh
java_home=/usr/local/jdk1.7.0_45
修改核心配置文件
vi core-site.xml
fs.defaultFS
hdfs://node1:9000 —hdfs namenode
hadoop.tmp.dir
/home/hadoop/hdpdata —本地进程工作的目录
注意: hadoop的namenode工作目录双写
默认的工作目录 /home/hadoop/hdpdata/dfs/name
指定工作目录 /home/hadoop/hdpdata
临时工作目录在core-site.xml中设置
cd /apps/hadoop-2.6.4/etc/hadoop
vi hdfs-stie.xml
dfs.name.dir
/home/hadoop/name1,/home/hadoop/name2
格式化namenode
hadoop namenode -format
datanode配置多个目录
dfs.data.dir
修改hdfs配置文件
vi hdfs-site.xml
dfs.replication --副本数量 默认3
2
dfs.secondary.http.address --第二个namenode
node2:50090
修改maprefuce配置文件
vi mapred-site.xml.template
mapreduce.framework.name --mapreduce 运行在哪里 默认localhost
yarn
mv mapred-site.xml.template mapred-site.xml
修改yarn配置文件
vi yarn-site.xml
yarn.resourcemanager.hostname – yarn 主节点resourcemanager
node1
yarn.nodemanager.aux-services --mapreduce 的shuffle reduce获取数据方式
mapreduce_shuffle
修改管理节点
cd /apps/hadoop-2.6.4/etc/hadoop
vi slaves
node2
node3
node4
3、修改环境变量
sudo vi /etc/profile
export HADOOP_HOME=/apps/hadoop-2.6.4
export PATH=
P
A
T
H
:
PATH:
PATH:JAVA_HOME/bin:
H
A
D
O
O
P
H
O
M
E
/
b
i
n
:
HADOOP_HOME/bin:
HADOOPHOME/bin:HADOOP_HOME/sbin
4、复制程序到其他服务器
sudo scp /etc/profile node2:/etc
使用配置的环境变量生效
source /etc/profile
5、格式化namenode 生成初始的目录
hadoop namenode -format
6、启动namenode
cd /apps/hadoop-2.6.4/sbin
hadoop-daemon.sh start namenode
7、网页查看namenode信息
http://node1:50070/dfshealth.html#tab-overview
http://node1:8088/cluster
8、启动 datanode
node2 node3 node4
hadoop-daemon.sh start/stop datanode
9、启动 reourcemanager
node1
yarn-daemon.sh start/stop resourcemanager
ndoe2 node3 node4
yarn-daemon.sh start nodemanager
10、一键启动hdfs集群
start-dfs.sh/stop-dfs.sh
11、运行mapreduce jar包
cd /apps/hadoop-2.6.4/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-2.6.4.jar wordcount /wordcount/input /wordcount/output
12、hdfs基本操作命令
hdfs dfsadmin -report 查看hdfs状态的命令
hadoop fs -ls / #查看文件夹
hadoop fs -cat /wordcount/ouptput/part-r-00000 |more #查看文件
-put #放到hdfs
-get #获取we年
-mkdir #创建文件夹
-moveFromLocal #把本地文件放到Hadoop上 本地删除
-moveToLocal #把hadoop放到本地 hadoop删除
-appendToFile #追加 把内容追加到文件中
-tail #查看
-rm #删除 -r
-rmdir #删除空目录
-chgrp # 组
-chmod #赋权
-chown #修改用户拥护者
-cp #在hadfs里面复制
-getmerge #合并文件
-df #查看空间大小
-du -s -h/m hdfs://node1/* #查看单个文件大小
-copyToLocal #复制文件到本地
-count #计数
-setrep #设置文件副本数量 这里设置的副本数只是记录在namenode的元数据的数量 真实的不一定 只有足够的机器才会创建副本
二、namenode机制
1、namenode 定时会把内存中的数据写在一个内存的镜像文件(镜像文件是内存序列化,方式是dump)fsimage中,
由于faimage会一直变大 ,到时候加载很耗时,会把操作写入到edits中。
edits (edits_inprogress_0000000000000000440 一直写入 ) 记录的是操作本身而不是元数据。
secondary namenode 是为了管理fsimage镜像文件 不影响namenode的正常服务
secondary namenode 定时请求进行合并,满足则合并。
合并checkpoint:合并fsimage和edits文件 默认30分钟
合并的触发条件是定时或者edits中记录数到达一定数量
seen_txid 文件中记录的是edits滚动的序号,每次重启namenode时namenode就知道要将那些edits进行加载 到内存中。
1、更新namenode内存中的数据 写入到fsimage中
2、记录操作日志 直接滚动追加到 edits
3、secondary namenode 请求是否满足checkpoint,满足,请求checkpoint,
4、namenode立马滚动当前正在写入的edits
5、secondary namenode把fsimage和其他的edits(多个)文件下载下来
6、secondary namenode把fsimage和edits文件合并更新到内存中 在dump出来一个新的fsimage.checkpoint
7、fsimage.checkpoint上传到namenode ,namenode把fsimage.checkpoint重命名覆盖原来的fsimage
8、第二次不会下载fsimage 直接下载edits/
2、VERSION 文件作用
cd /home/hadoop/hdpdata/dfs/name/current
version是java属性文件
[hadoop@node1 current]$ cat VERSION
#Sun Feb 28 07:08:56 CST 2021
namespaceID=1517088859
clusterID=CID-16223beb-8985-4063-b8d5-d7b72e39aa19 集群ID
cTime=0
storageType=NAME_NODE
blockpoolID=BP-295619259-192.168.136.10-1614467336763
layoutVersion=-60
KaTeX parse error: Expected 'EOF', got '#' at position 1986: …nfiguration> #̲## hdfs-site.x…PWD
scp -r ./hadoop/ mini3:
P
W
D
s
c
p
−
r
.
/
h
a
d
o
o
p
/
m
i
n
i
4
:
PWD scp -r ./hadoop/ mini4:
PWDscp−r./hadoop/mini4:PWD
scp -r ./hadoop/ mini5:
P
W
D
s
c
p
−
r
.
/
h
a
d
o
o
p
/
m
i
n
i
6
:
PWD scp -r ./hadoop/ mini6:
PWDscp−r./hadoop/mini6:PWD
scp -r ./hadoop/ mini7:
P
W
D
4
、
启
动
h
a
d
o
o
p
H
A
方
式
1
)
、
启
动
z
o
o
k
e
e
p
e
r
m
i
n
i
5
m
i
n
i
6
m
i
n
i
7
c
d
/
a
p
p
s
/
z
o
o
k
e
e
p
e
r
−
3.4.5
/
b
i
n
.
/
z
k
S
e
r
v
e
r
.
s
h
s
t
a
r
t
.
/
z
k
S
e
r
v
e
r
.
s
h
s
t
a
t
u
s
查
看
状
态
一
个
l
e
a
d
e
r
两
个
f
o
o
l
w
e
r
2
)
、
启
动
j
o
u
r
n
a
l
n
o
d
e
(
分
别
在
m
i
n
i
5
m
i
n
i
6
m
i
n
i
7
)
c
d
/
a
p
p
s
/
h
a
d
o
o
p
−
2.6.4
/
s
b
i
n
.
/
h
a
d
o
o
p
−
d
a
e
m
o
n
.
s
h
s
t
a
r
t
j
o
u
r
n
a
l
n
o
d
e
j
p
s
命
令
检
查
m
i
n
i
5
m
i
n
i
6
m
i
n
i
7
上
多
了
J
o
u
r
n
a
l
N
o
d
e
进
程
3
)
、
格
式
化
H
D
F
S
m
i
n
i
1
h
d
f
s
n
a
m
e
n
o
d
e
−
f
o
r
m
a
t
日
志
中
出
现
:
c
o
m
m
o
n
.
S
t
o
r
a
g
e
:
S
t
o
r
a
g
e
d
i
r
e
c
t
o
r
y
/
h
o
m
e
/
h
a
d
o
o
p
/
h
d
p
d
a
t
a
/
d
f
s
/
n
a
m
e
h
a
s
b
e
e
n
s
u
c
c
e
s
s
f
u
l
l
y
f
o
r
m
a
t
t
e
d
.
c
d
/
h
o
m
e
/
h
a
d
o
o
p
/
h
d
p
d
a
t
a
/
d
f
s
/
n
a
m
e
/
c
u
r
r
e
n
t
c
a
t
V
E
R
S
I
O
N
s
c
p
−
r
/
h
o
m
e
/
h
a
d
o
o
p
/
h
d
p
d
a
t
a
/
m
i
n
i
2
:
PWD 4、启动hadoopHA方式 1)、启动zookeeper mini5 mini6 mini7 cd /apps/zookeeper-3.4.5/bin ./zkServer.sh start ./zkServer.sh status 查看状态 一个leader 两个foolwer 2)、启动journalnode(分别在mini5 mini6 mini7) cd /apps/hadoop-2.6.4/sbin ./hadoop-daemon.sh start journalnode jps 命令检查 mini5 mini6 mini7 上 多了JournalNode进程 3)、格式化HDFS mini1 hdfs namenode -format 日志中出现:common.Storage: Storage directory /home/hadoop/hdpdata/dfs/name has been successfully formatted. cd /home/hadoop/hdpdata/dfs/name/current cat VERSION scp -r /home/hadoop/hdpdata/ mini2:
PWD4、启动hadoopHA方式1)、启动zookeepermini5mini6mini7cd/apps/zookeeper−3.4.5/bin./zkServer.shstart./zkServer.shstatus查看状态一个leader两个foolwer2)、启动journalnode(分别在mini5mini6mini7)cd/apps/hadoop−2.6.4/sbin./hadoop−daemon.shstartjournalnodejps命令检查mini5mini6mini7上多了JournalNode进程3)、格式化HDFSmini1hdfsnamenode−format日志中出现:common.Storage:Storagedirectory/home/hadoop/hdpdata/dfs/namehasbeensuccessfullyformatted.cd/home/hadoop/hdpdata/dfs/name/currentcatVERSIONscp−r/home/hadoop/hdpdata/mini2:PWD
格式化后在根据core-site.xml中的hadoop.tmp.dir配置生成个文件 /home/hadoop/hdpdata
scp -r /home/hadoop/hdpdata mini2:/home/hadoop/hdpdata
4)、格式化ZKFC 在mini1
hdfs zkfc -formatZK
5)、启动hdfs 在mini1上启动
cd /apps/hadoop-2.6.4/sbin
./start-dfs.sh
6)、启动yarn mini3
cd /apps/hadoop-2.6.4/sbin
./start-yarn.sh
mini4上
cd /apps/hadoop-2.6.4/sbin
./yarn-daemon.sh start resourcemanager
四、联邦hadoop配置
Federation-HA 配置文件
修改 core-site.xml配置文件
vi core-site.xml
fs.defaultFS
viewfs:///
fs.viewfs.mounttable.default.link./bi
hdfs://bi/
fs.viewfs.mounttable.default.link./dt
hdfs://dt/
hadoop.tmp.dir
/home/hadoop/hdpdata/
ha.zookeeper.quorum
mini5:2181,mini6:2181,mini7:2181
修改 hdfs-site.xml 配置文件
vi hdfs-site.xml
dfs.nameservices
bi,dt
dfs.ha.namenodes.bi
nn1,nn2
dfs.ha.namenodes.dt
nn3,nn4
dfs.namenode.rpc-address.bi.nn1
mini1:9000
dfs.namenode.http-address.bi.nn1
mini1:50070
dfs.namenode.rpc-address.bi.nn2
mini2:9000
dfs.namenode.http-address.bi.nn2
mini2:50070
dfs.namenode.rpc-address.dt.nn3
mini3:9000
dfs.namenode.http-address.dt.nn3
mini3:50070
dfs.namenode.rpc-address.dt.nn4
mini4:9000
dfs.namenode.http-address.dt.nn4
mini4:50070
dfs.namenode.shared.edits.dir
qjournal://mini5:8485;mini6:8485;mini7:8485/bi
dfs.namenode.shared.edits.dir
qjournal://mini5:8485;mini6:8485;mini7:8485/dt
dfs.journalnode.edits.dir
/home/hadoop/journaldata
dfs.ha.automatic-failover.enabled
true
dfs.client.failover.proxy.provider.bi
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.client.failover.proxy.provider.dt
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
shell(/bin/true)
.ha.fencing.ssh.private-key-files
/home/hadoop/.ssh/id_rsa
dfs.ha.fencing.ssh.connect-timeout
30000
修改 mapred-site.xml配置文件
vi mapred-site.xml
mapreduce.framework.name
yarn
修改 yarn-site.xml配置文件
vi yarn-site.xml
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.cluster-id
yrc
yarn.resourcemanager.ha.rm-ids
rm1,rm2
yarn.resourcemanager.hostname.rm1
mini3
yarn.resourcemanager.hostname.rm2
mini4
yarn.resourcemanager.zk-address
mini5:2181,mini6:2181,mini7:2181
yarn.resourcemanager.aux-services
mapreduce_shuffle
修改slaves(salves是指定子节点的位置)
vi salves
mini5
mini6
mini7
初始化步骤
先在5/6/7上启动journalnode
hadoop-daemon start journalnode
在bi下nn1
hdfs namenode -format -clusterID lhw
hdfs zfkc -formatZK
拷贝元数据到standby nn2
在dt下的nn3
hdfs namenode -format -clusterID lhw ###clusterID必须和bi的clusterID相同
hdfs zkfc -formatZK
拷贝元数据到standby nn4
在bi下的nn1上
sbin/start-dfs.sh
在resourcemanager配置机器上启动
sbin/start-yarn.sh
杀死所有Java进程
killall -9 java