[TOC]
# 集群简介
HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起
HDFS集群:
负责海量数据的存储,集群中的角色主要有 NameNode / DataNode
YARN集群:
负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager
(那mapreduce是什么呢?它其实是一个应用程序开发包)
本集群搭建案例,以5节点为例进行搭建,角色分配如下
~~~
hdp-node-01 NameNode SecondaryNameNode
hdp-node-02 ResourceManager
hdp-node-03 DataNode NodeManager
hdp-node-04 DataNode NodeManager
hdp-node-05 DataNode NodeManager
~~~
![](https://box.kancloud.cn/c4002fd6a8c9058d35a516e45edf35fb_2080x880.png)
# 安装
安装jdk,至少1.8
下载hadoop
~~~
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.0.0/hadoop-3.0.0.tar.gz
~~~
# 注意
把下面的有关ip配置成`/etc/hosts`下面的别名对应ip,不然会报错
还有hostname不能搞错
时间同步
# 配置文件
1. 在hadoop-env.sh
hadoop下的`/etc/hadoop/`
里面有个`hadoop-env.sh`
把`export JAVA_HOME=/usr/local/jdk8`这个改下,原来是没有值的
2. 在core-site.xml中写
~~~
<configuration>
<!-- 指定hadoop所使用的文件系统schema(URI),HDFS老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.33.12:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop3/tmp/hadoop</value>
</property>
</configuration>
~~~
3. 在hdfs-site.xml中写
~~~
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/hadoop3/tmp/namenode</value>
</property>
<!--路径可以配置多个,挂了的话有多个目录可以恢复,号隔开-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/hadoop3/tmp/datanode</value>
</property>
<!--指定hdfs副本数量,默认是5个,这边设置为1个-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--保证数据备份和管理机制-->
<property>
<name>dfs.secondary.http.address</name>
<value>192.168.33.12:50090</value>
</property>
</configuration>
~~~
4. 在mapred-site.xml中写
如果没有这个文件`cp mapred-site.xml.template mapred-site.xml`
~~~
<configuration>
<!--指定mr运行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
~~~
5. 在yarn-site.xml中写
~~~
<configuration>
<!-- Site specific YARN configuration properties -->
<!--指定yarn的老大(ResourceManager)的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.33.12</value>
</property>
<!--reducer获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
~~~
6. 将hadoop添加到环境变量`/etc/profile`
~~~
# hadoop
export HADOOP_HOME=/root/hadoop3
export PATH=$PATH:$HADOOP_HOME/sbin
~~~
source下
注意这些文件夹要提前创建
如果报一些错误
~~~
file:///data
~~~
试下加`file:///`这种的
# 启动
首先要namenode格式下,前面是1版本,后面是2版本
~~~
hdfs namenode -format(hadoop namenode -format)
~~~
然后显示
![](https://box.kancloud.cn/a0876298c71900b1214b7c462b3b0fde_3222x562.png)
表示目录已经被成功初始化了
~~~
[root@12 current]# pwd
/root/hadoop3/tmp/namenode/current
[root@12 current]# ls -lah
total 16K
drwxr-xr-x 2 root root 112 Apr 7 12:31 .
drwxr-xr-x 3 root root 21 Apr 7 12:31 ..
-rw-r--r-- 1 root root 389 Apr 7 12:31 fsimage_0000000000000000000
-rw-r--r-- 1 root root 62 Apr 7 12:31 fsimage_0000000000000000000.md5
-rw-r--r-- 1 root root 2 Apr 7 12:31 seen_txid
-rw-r--r-- 1 root root 212 Apr 7 12:31 VERSION
~~~
里面fsi什么的是镜像文件
seen_txid是迭代的版本号
然后我们查看下版本号
~~~
[root@12 current]# cat VERSION
#Sat Apr 07 12:31:09 UTC 2018
namespaceID=1413563114
clusterID=CID-6208de96-1ce0-4eea-b3df-f7a81c25f6b3
cTime=1523104269939
storageType=NAME_NODE
blockpoolID=BP-871390616-0.0.0.12-1523104269939
layoutVersion=-64
~~~
比如我namenode的clusterID是这个,其他的datanode的clusterID也是这个值表示是一个集群
## 方式一:每个守护线程逐一启动
启动顺序如下:
NameNode,DateNode,SecondaryNameNode,JobTracker,TaskTracker
Hadoop-daemon.sh:用于启动当前节点的进程
例如Hadoop-daemon.sh start namenode 用于启动当前的名称节点
Hadoop-daemons.sh:用于启动所有节点的进程
例如:Hadoop-daemons.sh start datanode 用于启动所有节点的数据节点
~~~
[root@12 sbin]# hadoop-daemon.sh start namenode
~~~
~~~
[root@12 sbin]# hadoop-daemon.sh start datanode
WARNING: Use of this script to start HDFS daemons is deprecated.
WARNING: Attempting to execute replacement "hdfs --daemon start" instead.
~~~
这种警告意思就是hadoop这个命令被hdfs替代了
这个命令在各个datanode都要执行
~~~
[root@12 sbin]# hadoop-daemon.sh start secondarynamenode
~~~
查看下进程
~~~
[root@12 sbin]# jps
3856 DataNode
4019 Jps
3988 SecondaryNameNode
3515 NameNode
~~~
注意最大文件数打开,不然一启动就可能等会就退出了
~~~
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
~~~
## 前提
**文件最大打开数限制**
**ssh免密登录**
注意authorized_keys这个文件里面的东西不要写错,前面ssh不要写成sh,后面也不要少
还有.ssh权限问题
~~~
# mkdir /root/.ssh
# chown -R root:root /home/ansible
# chmod 700 /root
# chmod 700 /root/.ssh
# chmod 644 /root/.ssh/authorized_keys //公钥文件的所有权限
# chmod 600 /root/.ssh/id_rsa //私钥文件的所有权限
~~~
其中这两项`PubkeyAuthentication yes` 和`PasswordAuthentication no`的值都要为yes,即公钥认证和密码认证都要为yes,因为我连接的方式是通过这两种方式来连接的,
重启sshd服务
`systemctl restart sshd.service`
mac要注意共享设置,允许远程登录
## 方法二:全部启动或者全部停止
**启动**
~~~
start-all.sh
~~~
启动顺序:`NameNode,DateNode,SecondaryNameNode,JobTracker,TaskTracker`
**停止**
~~~
stop-all.sh
~~~
关闭顺序性:`JobTracker,TaskTracker,NameNode,DateNode,SecondaryNameNode`
## 方法三:分别启动
首先创建slaves这个文件,在hadoop的配置文件
~~~
192.168.33.12
192.169.33.22
192.168.33.3
~~~
把这个slaves这个文件放到其他机器上,写完最好检查下
如果是hadoop3的话,这边是workers,不是slaves
启动:分别启动HDFS和yarn
~~~
start-dfs.sh
start-yarn.sh
~~~
这个需要
### 问题
**问题1**
~~~
Starting namenodes on [localhost]
ERROR: Attempting to launch hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting launch.
~~~
解决:
是因为缺少用户定义造成的,所以分别编辑开始和关闭脚本
~~~
$ vim sbin/start-dfs.sh
$ vim sbin/stop-dfs.sh
~~~
在空白处添加内容:
~~~
HDFS_DATANODE_USER=root
HDFS_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
~~~
**问题2**
~~~
Starting resourcemanager
ERROR: Attempting to launch yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting launch.
Starting nodemanagers
ERROR: Attempting to launch yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting launch.
~~~
~~~
解决:
是因为缺少用户定义造成的,所以分别编辑开始和关闭脚本
$ vim sbin/start-yarn.sh
$ vim sbin/stop-yarn.sh
~~~
在空白处添加内容:
~~~
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
~~~
# web端查看
访问 `http://192.168.33.12:8088/`
![](https://box.kancloud.cn/84b8aa8ae31b2cd64aab81fea3d63d2f_3130x586.png)
访问 `http://192.168.33.12:9870`,注意,这里是9870,不是50070了:
![](https://box.kancloud.cn/29c80130766c95e6a755245266870df2_1418x534.png)
![](https://box.kancloud.cn/d9f8b6bb844109f5caa022be892a9f3c_1586x558.png)
![](https://box.kancloud.cn/57019a19ac4a2e5dbdaf11f239179542_918x452.png)
![](https://box.kancloud.cn/47b6eaf7244912a3f5519e1fb002a5c8_2000x338.png)
![](https://box.kancloud.cn/c06d638251641aea7dc5364d2274693c_2296x1712.png)
![](https://box.kancloud.cn/46655623abf027c99d60fe9707bd55a4_670x344.png)
## 试用
把这个文件放到文件系统的/下
~~~
hdfs dfs -put anaconda-ks.cfg /
~~~
从本地上传一个文本文件到hdfs的/wordcount/input目录下
~~~
[HADOOP@hdp-node-01 ~]$ HADOOP fs -mkdir -p /wordcount/input
[HADOOP@hdp-node-01 ~]$ HADOOP fs -put /home/HADOOP/somewords.txt /wordcount/input
~~~
查看集群状态
~~~
hdfs dfsadmin –report
~~~
查看HDFS中的目录信息
~~~
hadoop fs –ls /
~~~
从HDFS下载文件
~~~
hadoop fs -get /yarn-site.xml
~~~
# 例子
~~~
cd /root/hadoop2/share/hadoop/mapreduce
~~~
然后我们计算下圆周率
~~~
hadoop jar hadoop-mapreduce-examples-2.6.4.jar pi 4 8
~~~
任务
![](https://box.kancloud.cn/47911a976a98b29261c5adafd678fe30_453x243.png)
- linux
- 常用命令
- 高级文本命令
- 面试题
- redis
- String
- list
- hash
- set
- sortedSet
- 案例-推荐
- java高级特性
- 多线程
- 实现线程的三种方式
- 同步关键词
- 读写锁
- 锁的相关概念
- 多线程的join
- 有三个线程T1 T2 T3,保证顺序执行
- java五种线程池
- 守护线程与普通线程
- ThreadLocal
- BlockingQueue消息队列
- JMS
- 反射
- volatile
- jvm
- IO
- nio
- netty
- netty简介
- 案例一发送字符串
- 案例二发送对象
- 轻量级RPC开发
- 简介
- spring(IOC/AOP)
- spring初始化顺序
- 通过ApplicationContextAware加载Spring上下文
- InitializingBean的作用
- 结论
- 自定义注解
- zk在框架中的应用
- hadoop
- 简介
- hadoop集群搭建
- hadoop单机安装
- HDFS简介
- hdfs基本操作
- hdfs环境搭建
- 常见问题汇总
- hdfs客户端操作
- mapreduce工作机制
- 案列-单词统计
- 局部聚合Combiner
- 案列-流量统计(分区,排序,比较)
- 案列-倒排索引
- 案例-共同好友
- 案列-join算法实现
- 案例-求topN(分组)
- 自定义inputFormat
- 自定义outputFormat
- 框架运算全流程
- mapreduce的优化方案
- HA机制
- Hive
- 安装
- DDL操作
- 创建表
- 修改表
- DML操作
- Load
- insert
- select
- join操作
- 严格模式
- 数据类型
- shell参数
- 函数
- 内置运算符
- 内置函数
- 自定义函数
- Transform实现
- 特殊分割符处理
- 案例
- 级联求和accumulate
- flume
- 简介
- 安装
- 常用的组件
- 拦截器
- 案例
- 采集目录到HDFS
- 采集文件到HDFS
- 多个agent串联
- 日志采集和汇总
- 自定义拦截器
- 高可用配置
- 使用注意
- sqoop
- 安装
- 数据导入
- 导入数据到HDFS
- 导入关系表到HIVE
- 导入表数据子集
- 增量导入
- 数据导出
- 作业
- 原理
- azkaban
- 简介
- 安装
- 案例
- 简介
- command类型单一job
- command类型多job工作流flow
- HDFS操作任务
- mapreduce任务
- hive脚本任务
- hbase
- 简介
- 安装
- 命令行
- 基本CURD
- 过滤器查询
- 系统架构
- 物理存储
- 寻址机制
- 读写过程
- Region管理
- master工作机制
- 建表高级属性
- 与mapreduce结合
- 协处理器
- 点击流平台开发
- 简介
- storm
- 简介
- 安装
- 集群启动及任务过程分析
- 单词统计
- 并行度
- ACK容错机制
- ACK简介