什么是Hadoop?
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分
Namenode 和 Datanode ?
HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。
准备环境
- Cent OS7
- 配置三台静态虚拟机
- Hadoop、jdk安装包
配置静态IP
查看这篇文章静态ip配置
名称 | ip |
---|---|
hadoop01 | 192.168.149.11 |
hadoop02 | 192.168.149.12 |
hadoop03 | 192.168.149.13 |
2.准备三台虚拟机
1.这里用的是VMware Workstation Pro–》虚拟机–》管理–》克隆
2.下一步,需要注意的是,完整克隆,不是链接克隆
3.设置好名称和路径之后,点击完成即可
4.在克隆之前可以配置好jdk,这里用的xftp进行上传文件,解压 tar -zxvf 包 后面跟解压到的路径
5.配置jdk和Hadoop环境变量 vi ~/.bashrc
#jdk和hadoop环境变量
export JAVA_HOME=/opt/hadopp/hadoop
export JRE_HOME=${JAVA_HOME}/jre
export HADOOP_HOME=/opt/hadoop/hadoop
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
6.生效环境变量 source ./bashrc
hadoop version 查看版本
7.分别在 Hadoop01、Hadoop02、hadoop03修改vi /etc/hostname为master、slave1、slave2,然后分别重启生效 reboot
8.配置Master节点中的 vi /etc/hosts 主机和IP地址的映射
192.168.149.11 master
192.168.149.12 slave1
192.168.149.13 slave2
9.然后远程拷贝到slave1和slave2 命令:scp /etc/hosts slave1:/etc
配置集群/分布式环境
一、 配置hosts文件
二、 建立hadoop运行帐号
三、 配置ssh免密码连入
四、 下载并解压hadoop安装包
五、 配置/etc/hostname文件
六、 配置/etc/hosts文件
七、 配置core-size.xml 文件
八、 配置hdfs-size.xml文件
九、 配置yarn-size.xml 文件
十、 向各节点复制hadoop
十一、 格式化namenode
十二、 启动hadoop
十三、 用jps检验各后台进程是否成功启动
- 修改workers.在cd /opt/hadoop/hadoop/etc/hadoop/ vi workers,把localhost删除,添加节点为数据节点,一个数据节点为一行
slave1
slave2
-
首先手动添加临时文件夹 在/opt/hodoop/hadoop/
-
mkdir tmp
-
修改文件core-size.xml
<configuration>
#配置默认端口号和主机名
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
#配置临时文件
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
- 修改hdfs-size.xml,需要创建临时文件夹cd /opt/hadoop/hadoop mkdir dfs/name 和 mkdir dfs/data
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
#配置冗余数据 两个数据节点存储两份
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
#指定存储hdfs中namenode存储位置
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/hadoop/tmp/dfs/name</value>
</property>
#指定存储hdfs中datanode存储位置
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/hadoop/tmp/dfs/data</value>
</property>
<property>
<name>dfs.permissions</name>
<value>falser</value>
#默认为true,设置为false可以不要检查权限就生成dfs上的文件
<description>false</description>
</property>
</configuration>
- 如果没有这个文件夹 复制原来的一份,修改为mapered-size.xml
cp mapered-size.template mapred-site.xmlxml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>local</description>#指定mapreduce运行在yarn平台,默认为local
</property>
</configuration>
- 修改yarn-size.xml
<configuration>
<!-- Site specific YARN configuration properties -->
#指定resourcemanager运行的hostname
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
#nodemanager服务和获取输入的方式
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 打包远程复制给slave1和slave2
tar -zcf ~/hadoop.master.tar.gz ./hadoop
scp ./hadoop.master.tar.gz slave1:/home/hadoop
scp ./hadoop.master.tar.gz slave2:/home/hadoop
- 在master第一次运行时 格式化节点
hdfs namenode -format
- cd ~ 查看 ls
- 删除原来的hadoop 文件如果存在的话
- 在slace1、slave2分别解压到环境配置的路径 这里是/opt/hadoop
ssh 免密登录
SSH免密登录:是主节点master能够不需要输入密码,直接ssh登录到从节点slave1、slave2上
默认已经安装opssh-server服务,没有安装的自行安装
ssh-keygen -t rsa #有提示直接Enter即可
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#ssh-copy-id 将你的公共密钥填充到一个远程机器上的authorized_keys文件中
ssh-copy-id slave1 #传给slave1
ssh-copy-id slave2 #传给slave2
- 在master 启动start-dfs.sh 和 start-yarn.sh
- master机器
- slave1机器jps查看
- slave2 查看
- 注意!!! - 如果是root用户配置的话,需要有以下修改
- 1、master,slave都需要修改start-dfs.sh,stop-dfs.sh,start-yarn.sh,stop-yarn.sh四个文件
2、如果你的Hadoop是另外启用其它用户来启动,记得将root改为对应用户
在/hadoop/sbin路径下:
将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
还有,start-yarn.sh,stop-yarn.sh顶部也需添加以下:
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
-
关闭防火墙
-
systemctl stop firewalld.service
-
禁止防火墙开机启动
-
systemctl disable firewalld.service
-
关闭防火墙后,用自己浏览器访问hdfs,根据hdfs-size.xml 对应的主机ip和端口号,即可访问。
-
IP地址加上端口9870,即可访问HDFS全部信息。