Hadoop集群的搭建
HDFS
分布式文件系统
1. 环境准备
1.1 主机的准备
安装3台CentOS7系统的主机
1.2 静态IP和主机名
- ip 设置
# 查看ip地址
ifconfig
ip addr (老家伙)
# 修改ip地址(,重启网路)
# 修改网卡的配置文件
vim /etc/sysconfig/network-script/ifcfg-ens33 #ens33是网卡名称
# 修改之后重启网络使其生效
systemctl restart network
# 检查ip
ifconfig
- 设置主机名
# 修改主机名(立即永久生效)
hostnamectl set-hostname 主机名
# 如果使用ssh客户端软件登陆,需要重新连接来刷新显示
- 设置IP和主机名的映射关系
将来集群之间的互相访问都通过主机名来访问
好处:1.方便记忆 2.通用性好
# 修改/etc/hosts
ip 主机名
192.168.222.161 bd0201
192.168.222.162 bd0202
192.168.222.163 bd0203
- 修改方式
将来配置文件可能在集群中的很多机器中都需要修改
如果逐个修改,容易被打
# 使用vi/vim
飘号(反引号): `
将反引号引起来的字符串
当作一个shell命令来执行
将命令的返回值作为反引号表达式的返回值
单引号: '
对所有特殊字符进行脱义
双引号: "
将空格脱义
# 写成命令,在所有机器统一执行
echo -e "192.168.222.161 bd0201\n192.168.222.162 bd0202\n192.168.222.163 bd0201" >> /etc/hosts
# 不小心填错了 sed的文件内容替换
sed -i s/"192.168.222.163 bd0201"/"192.168.222.163 bd0203"/g /etc/hosts
# 通过编写自动化脚本完成配置
# 功能: 传入两个参数,1 源文件 2目标目录
# 自动将文件复制到集群的所有机器
#!/bin/bash
HOSTS='bd0201 bd0202 bd0203'
for HOST in ${HOSTS}
do
echo "++正在复制$1到$HOST的$2中..."
scp -rq ${1} ${HOST}:${2}
echo "--发送完成!"
done
1.3 配置SSH免密登录
因为分布式程序集群之间需要进行频繁的RPC操作
所以每次连接 都需要输入密码的话 1.麻烦 2.浪费计算资源
所以需要在集群之间配置免密登陆
- 把老的锁和钥匙都扔了
rm -rf /root/.ssh
- 配钥匙
集群中的所有机器都执行
ssh-keygen -t rsa
回车 回车 回车 …
3. 发钥匙
每台机器都要执行
# 将钥匙复制给bd0201
ssh-copy-id bd0201
# 将钥匙复制给bd0202
ssh-copy-id bd0202
# 将钥匙复制给bd0203
ssh-copy-id bd0204
1.4 安装JDK
- 上传安装包
- 解压,修改名字
- 配置环境变量
操作系统中(window linux)PATH是一个特殊的变量
当我们执行一个命令时,操作系统会在PATH中寻找,如果能找到就会调用找到的第一个文件并执行
# /etc/profile添加如下内容
export JAVA_HOME=/opt/jdk1.8
export PATH=.:$JAVA_HOME/bin:$PATH
# 刷新/etc/profile
source /etc/profile
2. 完全分布式安装Hadoop(HDFS)
- 上传,解压,改名(这里就不细说具体操作了)
- 修改配置文件
一般的:分布式程序安装时需要修改两类配置文件
- env文件
通常是个.sh结尾的脚本
在里面配置一些其他依赖组件的环境变量 - site文件(配置参数)
通常是ymal、xml或者properties类型的文件 - hadoop中的配置文件
组件 | 环境配置 | 参数配置 |
---|---|---|
HDFS | hadoop-env.sh | core-site.xml, hdfs-site.xml |
MapReduce | mapred-env.sh | mapred-site.xml |
Yarn | yarn-env.sh | yarn-site.xml |
集群从节点 | salves | salves |
- hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8
- core-site.xml
<property>
<!-- 配置默认的文件系统(配置NameNode服务启动的主机和端口) -->
<name>fs.defaultFS</name>
<value>hdfs://bd0201:9000/</value>
</property>
<property>
<!-- 配置hdfs文件保存的目录,当前选择放在Hadoop的安装目录下 -->
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.7.7/data</value>
</property>
- hdfs-site.xml
<property>
<!-- 配置固定的节点启动SecondaryNamenode -->
<name>dfs.namenode.secondary.http-address</name>
<value>bd0202:50090</value>
</property>
- slaves
# 将来需要启动从节点(对于HDFS来说就是DataNode)的主机名
bd0201
bd0202
bd0203
- 分发配置文件
将配置好的这一台的文件复制给另外的两台
- 配置环境变量
export HADOOP_HOME=/opt/hadoop-2.7.7
export PATH=.:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
source /etc/profile
- 格式化
hdfs namenode -format
# hadoop也可以用来执行hdfs的一些操作
注意:此命令只在namenode机器上执行
5.启动
# hadoop全部组件的启动和关闭
start-all.sh
start-stop.sh
# 单独启动和关闭hdfs的全部组件
start-dfs.sh
stop-dfs.sh
# 单服务(进程)的启动和关闭
# 命令 启动|关闭 服务名
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
3. HDFS的使用
- 一些基本命令
# 1.上传文件(拷贝操作)
hdfs dfs -put 本地路径 hdfs路经
# 2.下载文件(拷贝操作)
hdfs dfs -get hdfs路经 本地路径
# 3.单独设置副本数
hdfs dfs -setrep 副本数 hdfs路径
# hdfs默认的副本数是3
# 根据我们的需要可以随时动态调整副本数
# 本质就是块的副本复制和删除的操作
# 4.分布式复制,一般用于HDFS集群之间进行数据传输
hdfs dfs -dscp hdfs集群1的路径 hdfs集群2的路径
# dscp会启动一个MapReduce程序,为每一个block单独启动一个线程,进行数据的读写操作