hadoop简介
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。
Hadoop的主要模块
hadoop Common: 包括Hadoop常用的工具类,主要包括系统配置工具Configuration、远程过程调用RPC、序列化机制和Hadoop抽象文件系统FileSystem等。 Hadoop Distributed File System (HDFS): 分布式文件系统,提供对应用程序数据的高吞吐量,高伸缩性,高容错性的访问。 Hadoop YARN: 任务调度和集群资源管理。 Hadoop MapReduce: 基于YARN的大型数据集并行处理系统。是一种计算模型,用以进行大数据量的计算。
一、Hadoop搭建与配置
环境准备:三台纯净的虚拟机,server2负责hadoop主节点配置,server7、server8先放着。
安装包准备:
hadoop安装包(官网可下载) hadoop-3.2.1.tar.gz
jdk tar包 jdk-8u181-linux-x64.tar.gz
在server1中创建hadoop用户,将安装包scp到该用户家目录中
useradd hadoop
cp hadoop-3.2.1.tar.gz jdk-8u181-linux-x64.tar.gz /home/hadoop/
su - hadoop
解压安装包,设软链接方便使用升级和更新版本
tar zxf hadoop-3.2.1.tar.gz
tar zxf jdk-8u181-linux-x64.tar.gz
ln -s hadoop-3.2.1 hadoop
ln -s jdk1.8.0_181/ java
进入hadoop目录,修改配置文件指向JAVA和HADOOP
cd hadoop/etc/hadoop/
vim hadoop-env.sh
export JAVA_HOME=/home/hadoop/java
export HADOOP_HOME=/home/hadoop/hadoop
Standalone Operation(单机模式)
返回解压目录,创建测试文件夹input,并导入数据
cd ../..
mkdir input
cp etc/hadoop/*.xml input/
查看hadoop命令行如何操作
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar
按要求过滤input中的文件,将过滤结果存储到output文件中,过滤条件为抓取dfs开头并中间带任意字母的行
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
查看抓取过滤结果
du -sh input/
cd output/
ls
cat *
Pseudo-Distributed Operation(伪分布式部署)
Hadoop还可以以伪分布式模式在单个节点上运行,其中每个Hadoop守护进程在单独的Java进程中运行。
修改配置文件,配置文件位于解压文件下的etc/hadoop/下
vim etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
vim etc/hadoop/hdfs-site.xml #设置分布式副本数为1,默认为3
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
cat etc/hadoop/workers
给hadoop用户设定密码,配置免密登陆localhost
logout #现在检查您是否可以使用ssh连接到本地主机,而无需密码短语,我们得做免密登陆
passwd hadoop
su -hadoop
ssh-keygen
ssh-copy-id localhost
cd /hadoop/hadoop
ssh localhost #测试 测完回到hadoop用户
exit ##使用exit退出ssh,否则会叠加shell,引起错乱
初始化hadoop
bin/hdfs namenode -format
初始化生成的文件会放到/tmp下
ls /tmp/
开启hadoop(启动NameNode守护程序和DataNode守护程序)
sbin/start-dfs.sh (start-all.sh也可以)
查看进程
ps ax
在root配置jdk环境变量
vim .bash_profile
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/hadoop/java/bin
source .bash_profile
查看已设置的hadoop模块,若命令执行报错,则说明jdk环境变量配置有问题,注意:是在root下配置全局变量。
jps是jdk提供的一个查看当前java进程的小工具
jps在软连接java目录中的/bin
jps
测试访问:firefox:172.25.76.2:9870 #hadoop默认开放端口为9870
出现上述则证明hadoop配置成功
创建hadoop用户分布式系统中的家目录
命令行查看hadoop主页
bin/hdfs dfs --help #查看帮助
cd hadoop
bin/hdfs dfsadmin -report
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/hadoop
创建好后才可使用命令行查看里面的内容,否则会报错
此时家目录为空。
bin/hdfs dfs -ls
将input文件上传到分布式文件系统中
bin/hdfs dfs -put input
再次查看
bin/hdfs dfs -ls
将output上传
bin/hdfs dfs -put output
删除本地文件,hadoop中仍然存在
rm -fr input/ output/
读取input中的内容,计算其单词数量,输出到output1中
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount input output1
查看output1的结果
在这里插入图片描述
命令行查看结果
bin/hdfs dfs -cat output1/*
二、网络文件系统nfs实现hadoop从机同步主机(Fully-Distributed Operation(完全分布式部署))
需要三台虚拟机,server1为Hadoop主机,server7、server8为hadoop从机
首先关闭hadoop再进行配置
./sbin/stop-all.sh
server1 root用户:
首先配置nfs,安装相关配置
yum install -y nfs-utils
ssh server2 yum install -y nfs-utils
ssh server3 yum install -y nfs-utils
在server78 同样创建用户 hadoop
useradd hadoop
server2编写nfs访问控制文件,注意:此处的uid,gid为hadoop用户的uid、gid,且三台虚拟机的hadoop用户id必须保持一致,否则无法进行网络文件共享。
vim /etc/exports
/home/hadoop *(rw,anonuid=1000,anongid=1000)
server2 hadoop用户:
关闭hadoop服务再配置
sbin/stop-dfs.sh
yum install -y nfs-utils
修改配置文件
cd hadoop
vim etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://172.25.76.2:9000</value>
</property>
</configuration>
vim etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value> #值改为2,有两个节点
</property>
</configuration>
vim etc/hadoop/workers
server7
server8 (要有地址解析)
server78 初始化hadoop
bin/hdfs namenode -format
先进行server78挂载任务,匿名用户免密登陆自然会实现
systemctl start nfs
mount 172.25.76.2:/home/hadoop/ /home/hadoop/
hadoop用户操作,检查hadoop配置
su - hadoop
jps
server2 namenode
server78 datanode
测试:firefox:172.25.76.2:9870 查看hadoop数据节点工作信息
关于节点扩容
若有一个虚拟机 server4要加入节点则
yum install -y nfs-utils.x86_64 #安装nfs
useradd hadoop ##创建hadoop用户
id hadoop #确保uid和gid都是1000
mount 172.25.76.2:/home/hadoop/ /home/hadoop/ ##挂载网络文件目录
df ##查看挂载
server2内配置worker文件,加入server4节点
server4内,进入到hadoop软连接目录,执行节点添加命令
bin/hdfs --daemon start datanode
jps ##查询java进程
若没有报错 则可以在jps显示相应的web端,可以去看到server4