菜单
登录注册
欢 迎
登录
自动登录
忘记密码?
新朋友
注册
注册
老朋友
登录
笔记内容为空!
TA的笔记树 >>
centos-Hadoop2.7.3完全分布式搭建(HA)
Hadoop
【目录】 [TOC] ## centos-Hadoop2.7.3完全分布式搭建(HA) ### 序 > #### 序.1. 服务器节点分配 >> ***本文中对服务器节点的分配只作为参考*** >>> hadoop集群作HA需要zookeeper集群,本文不对zk集群搭建作详述,所以把zookeeper单独列出。
zookeeper集群搭建详细配置请戳我
>> ||hadoop01|hadoop02|hadoop03|hadoop04|hadoop05|zk1|zk2|zk3| |:-|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| |NameNode|√|√||||||| |JournalNode|√|√|√|||||| |DFSZKFailoverController|√|√||||||| |DataNode|||√|√|√|||| |ResourceManager|√|||||||| |NodeManager|||√|√|√|||| |Zookeeper||||||√|√|√| > #### 序.2. 依赖 >> - ssh >> - jdk >> - [zookeeper集群](http://www.qiqinote.com/note/22.html) >> - hadoop-2.7.3.tar.gz > #### 序.3. 本文中的基础配置 >> - hadoop安装目录:hadoop帐户下的根目录 >> - hadoop数据目录:/data/hadoop 官方完全分布式搭建文档:http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html ps: 搭建时会用到很多端口,所以需注意防火墙问题! ### 1. 配置hosts *执行节点:全部节点* > ```[root /]# vi /etc/hosts``` ``` 1.1.1.1 hadoop01 1.1.1.2 hadoop02 1.1.1.3 hadoop03 1.1.1.4 hadoop04 1.1.1.5 hadoop05 1.1.1.6 zk1 1.1.1.7 zk2 1.1.1.8 zk3 ``` ps: 对应IP需外网,否则部署成功后外网不能用监控查看信息。但若能解决上述问题,配置内网当然更好 ### 2. 创建hadoop用户 *执行节点:hadoop节点* ps: 不是必须! ``` [root /]# useradd hadoop # 在root用户下创建 [root /]# passwd hadoop # 修改hadoop用户密码 [root /]# mkdir /数据目录/hadoop # 创建hadoop数据目录,一般放置到挂载盘容量大的地方,可通过(df -h)命令查看 [root /]# chown -R hadoop:hadoop /数据目录/hadoop # 设置该目录为hadoop用户组 [root /]# su - hadoop # 切换到hadoop帐户 ``` ### 3. 设置ssh免密码登录 *执行节点:hadoop节点* > 1. 在主节点服务器生成ssh的key > 2. 把公钥添加到文件:```authorized_keys```(没有则添加) > 3. 把三个文件(私钥,公钥,验证文件)拷贝到其它节点```~/.ssh```目录,确保这三个文件所有节点都一致 > ps: 所有操作均在目录: ```~/.ssh```中操作 ``` [hadoop@hadoop01 .ssh]$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa [hadoop@hadoop01 .ssh]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys [hadoop@hadoop01 .ssh]$ chmod 600 id_dsa # id_dsa 文件的权限不能太大 [hadoop@hadoop01 .ssh]$ ssh localhost # 测试是否连接本地需要密码 [hadoop@hadoop01 .ssh]$ cd .. # 退回到 ~/.ssh 目录,准备打包 [hadoop@hadoop01 ~]$ tar -zcvf ssh.tar.gz .ssh/ # 打包,准备远程拷贝 [hadoop@hadoop01 ~]$ scp ssh.tar.gz hadoop@hadoop02:~ # 远程拷贝到另外节点,然后到另外节点解压即可 # 到另一台机器解压 [hadoop@hadoop02 ~]$ tar -zxvf ssh.tar.gz # 解压 [hadoop@hadoop02 ~]$ ssh hadoop01 # 测试是否能远程连接(不需要密码即成功) ``` >> 若不能成功连接,请检查:1、所有节点的`~/.ssh/`下的文件都是一致,2、文件`id_dsa`权限为`600` >> ``` [hadoop .ssh]$ chmod 600 id_dsa ``` ### 4. 下载安装hadoop *执行节点:hadoop任一节点,如:hadoop01* ps: hadoop安装目录:~ (hadoop帐户根目录) 官方hadoop下载引导页: http://hadoop.apache.org/releases.html 或 http://apache.fayea.com/hadoop/common/ ``` [hadoop@hadoop01 ~]$ wget http://apache.fayea.com/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz [hadoop@hadoop01 ~]$ scp hadoop-2.7.3.tar.gz hadoop@hadoop02:~ # 分别远程拷贝数据到其它节点到安装目录 [hadoop@hadoop01 ~]$ tar -zxvf hadoop-2.7.3.tar.gz [hadoop@hadoop01 ~]$ mv hadoop-2.7.3 ~ # 安装目录 ``` ### 5. 配置hadoop *执行节点:hadoop节点* 官方文档:http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html ps: 所有配置均在```~/hadoop-2.7.3```中完成,也就是上一步解压的hadoop包 > #### 5.1. 配置```etc/hadoop/hadoop-env.sh``` 该配置为hadoop环境配置 >> 修改配置: ``` export JAVA_HOME=/path/to/JAVA_HOME ``` 还有一些配置可详见官网 > > #### 5.2. 配置```etc/hadoop/profile.d/hadoop2.7.3.sh``` 该配置为用户配置 >> ps: 该文件以及父目录可能不存在,需手动新建,父目录名称不可更改 >> 添加配置: ``` [hadoop@hadoop节点 hadoop2.7.3] mkdir etc/hadoop/profile.d [hadoop@hadoop节点 hadoop2.7.3] vi etc/hadoop/profile.d/hadoop2.7.3.sh ``` >>> ```shell #!/bin/sh export HADOOP_HOME="~/hadoop-2.7.3" # Hadoop的安装目录 export PATH="$HADOOP_HOME/bin:$PATH" export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop ``` > > #### 5.3. 配置```etc/hadoop/core-site.xml``` 添加配置: ```xml
fs.defaultFS
hdfs://ns1
hadoop.tmp.dir
/data/hadoop/2.7.3/tmp
io.file.buffer.size
131072
ha.zookeeper.quorum
zk1:2181,zk2:2181,zk3:2181
``` >> ps:注意修改zk对应的hosts名称 > > #### 5.4. 配置```etc/hadoop/hdfs-site.xml``` 添加配置: ```xml
dfs.replication
3
dfs.namenode.name.dir
file:/data/hadoop/2.7.3/hdfs/name
dfs.datanode.data.dir
file:/data/hadoop/2.7.3/hdfs/data
dfs.nameservices
ns1
dfs.ha.namenodes.ns1
nn1,nn2
dfs.namenode.rpc-address.ns1.nn1
hadoop01:8020
dfs.namenode.http-address.ns1.nn1
hadoop01:50070
dfs.namenode.rpc-address.ns1.nn2
hadoop02:8020
dfs.namenode.http-address.ns1.nn2
hadoop02:50070
dfs.namenode.shared.edits.dir
qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns1
dfs.journalnode.edits.dir
/data/hadoop/2.7.3/journal/
dfs.ha.automatic-failover.enabled
true
dfs.client.failover.proxy.provider.ns1
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence shell(/bin/true)
dfs.ha.fencing.ssh.private-key-files
~/.ssh/id_dsa
dfs.ha.fencing.ssh.connect-timeout
30000
``` >> ps:注意修改hadoop对应的hosts名称 > > #### 5.5. 配置```etc/hadoop/mapred-site.xml``` >> 该配置文件默认不存在,但提供了一个template > ``` [hadoop hadoop-2.7.3]$ cp mapred-site.xml.template mapred-site.xml ``` 添加配置: ```xml
mapreduce.framework.name
yarn
``` > > #### 5.6. 配置```etc/hadoop/yarn-site.xml``` 添加配置: ```xml
yarn.resourcemanager.hostname
hadoop01
yarn.nodemanager.aux-services
mapreduce_shuffle
``` >> ps:注意修改hadoop对应的hosts名称 > > #### 5.7. 配置```etc/hadoop/slaves``` >> 该文件配置的是DataNode,一行一个 > 添加配置: ``` hadoop03 hadoop04 hadoop05 ``` ### 6. 初始化与启动 > #### 6.1. 启动 journalNode >> 执行节点:```hadoop01、hadoop02、hadoop03```,配置文件```etc/hadoop/hdfs-site.xml```中```dfs.namenode.shared.edits.dir```指定 ``` [hadoop@配置journal节点 hadoop2.7.3]$ sbin/hadoop-daemon.sh start journalnode [hadoop@配置journal节点 hadoop2.7.3]$ jps # 查看对应java进程名称,能看到:JournalNode ``` > > #### 6.2. 格式化 NameNode >> 执行节点:配置两台NameNode中任意一台 ``` [hadoop@hadoop01 hadoop2.7.3]$ bin/hdfs namenode -format [hadoop@hadoop01 hadoop2.7.3]$ sbin/hadoop-daemon.sh start namenode # 启动NameNode,standby的NameNode拷贝该NameNode元数据 [hadoop@hadoop01 hadoop2.7.3]$ jps # 查看对应java进程名称,能看到:NameNode ``` > > #### 6.3. 拷贝Active的NameNode元数据 >> 执行节点:6.2执行完后剩下的另一个NameNode ``` [hadoop@hadoop02 hadoop2.7.3]$ bin/hdfs namenode -bootstrapStandby [hadoop@hadoop02 hadoop2.7.3]$ sbin/hadoop-daemon.sh start namenode [hadoop@hadoop02 hadoop2.7.3]$ jps # 查看对应java进程名称,能看到:NameNode ``` > > #### === 6.2 / 6.3 注意点=== >> 本文档NameNode有两台:hadoop01、hadoop02. 对于4.2节中格式化哪台并不是说它就变成主,hadoop01与hadoop02默认情况哪台先启动哪台就是Active,另一台则为standby,并无主从之分,只有先后之别。 > > #### 6.4. 格式zookeeper >> 执行节点:配置两台NameNode中任意一台 ``` [hadoop@hadoop01 hadoop2.7.3]$ bin/hdfs zkfc –formatZK [hadoop@hadoop01 hadoop2.7.3]$ sbin/hadoop-daemon.sh start zkfc [hadoop@hadoop01 hadoop2.7.3]$ jps # 查看对应java进程名称,能看到:DFSZKFailoverController ``` >>> 若报错:`org.apache.hadoop.HadoopIllegalArgumentException: Bad argument: –formatZK` >>>> 复制粘贴会出现该问题,手动输入命令即可 > > #### 6.5. 关闭所有hadoop的Java进程 >> 执行节点:配置两台NameNode中任意一台 ``` [hadoop@hadoop01 hadoop2.7.3]$ sbin/stop-all.sh ``` > > #### 6.6. 开启所有hadoop的Java进程 >> 执行节点:配置两台NameNode中任意一台,建议在配置ResourceManager节点的那台NameNode节点执行 ``` [hadoop@hadoop01 hadoop2.7.3]$ sbin/start-all.sh ``` >>> 注意点:ResourceManager会随启动hadoop而启动,若没有自动启动,手动执行以下命令即可: ``` [hadoop@配置ResourceManager节点 hadoop2.7.3]$ sbin/start-yarn.sh ``` > > #### 成功启动后各节点与Java进程对应关系 >> 遵循上面表格成功配置完成后hadoop对应Java进程的映射关系 ps: 通过命令```jps```查看Java进程 >> ||hadoop01|hadoop02|hadoop03|hadoop04|hadoop05| |-|:-:|:-:|:-:|:-:|:-:| |NameNode|√|√|||| |DFSZKFailoverController|√|√|||| |JournalNode|√|√|√||| |ResourceManager|√||||| |NodeManager|||√|√|√| |DataNode|||√|√|√| ### 7. 查看信息 - http://NameNodeIP:50070/ > 两个NameNode能分别看到:```Active```(运行中)和```standby```(HA) - http://ResourceManagerIP:8088/ > Yarn的资源管理界面,打开后在```Nodes```菜单栏能看到对应所有NodeManager节点,若没有,看看是不是防火墙问题 ### 8. 测试 - 通过```jps```查看Active的NameNode,用```kill -9 PID```,看是否能自动切换standby的NameNode为```Active``` - 添加文件到HDFS中 ``` [hadoop@hadoop集群中任意一台 hadoop2.7.3]$ bin/hdfs dfs -put /path/from/local /path/to/HDFS 然后通过Active的NameNode访问 http://NameNodeIP:50070/ 查看信息 ``` ### 9. hdfs常用命令操作:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html ### 附         
vanki
毕竟西湖六月中,风光不与四时同。
浏览:
5841
创建:
2017-06-10 02:48:01
更新:
2019-01-10 16:59:53
TA的最新笔记
spring-boot配置redis多数据源
linux源修改(阿里)
python安装postgresql依赖
arthas使用
java基于spring的NamedParameterJdbcTemplate封装的获取sql工具类
Impala添加负载
S3常用使用
redis常用操作
hdfs相关命令
crontab使用
TA的最热笔记
java异步http请求工具类(org.asynchttpclient)
iTerm2主题配置与常用技巧
java基于spring.redisTemplate实现分布式锁工具类
Kotlin + SpringBoot + JPA(Hibernate) + Repository自定义方法
IDEA汉化
Sequel Pro连接mysql8打开数据库报错
centos-Hadoop2.7.3完全分布式搭建(HA)
SpringBoot上传文件报错(The temporary upload location [..] is not valid)
mac常用软件
kotlin对象属性值拷贝工具类