Hadoop简介
1.1 Hadoop架构
- Hadoop由三个模块组成:分布式存储HDFS、分布式计算MapReduce、资源调度引擎Yarn
1.2 Hadoop历史
- Hadoop作者Doug Cutting
- Apache Lucene是一个文本搜索系统库
- Apache Nutch作为前者的一部分,主要包括web爬虫、全文检索;2003年“谷歌分布式文件系统GFS”论文,2004年开源版本NDFS
- 2004年“谷歌MapReduce”论文,2005年Nutch开源版MapReduce
说明:
1、VmWare版本:
VmWare10版本
2、linux版本
linux统一使用centos,centos统一使用centos7.6 64位版本
种子文件下载地址:http://mirrors.aliyun.com/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.torrent
3、先配置好一台虚拟机的环境及其hadoop配置,再克隆到其他机器
目录
一、安装
1.1、安装VMware
1.2、安装Centos7
二、配置Linux
1、重命名主机
2、配置网络:
3、SecureCRTP(或Xshell)链接linux并配置
4、关闭linux自带防火墙
5、建立ip映射
6、添加普通用户hadoop
7、定义统一目录
二、配置hadoop
1、上传hadoop、jak安装包,进行解压
2、配置hadoop环境变量
3、配置hadoop-env.sh
4、配置core-site.xml
5、配置hdfs-site.xml
6、配置mapred-site.xml
7、配置yarn-site.xml
8、编辑slaves
9、创建文件存放目录
三、克隆配置
1、克隆其他两台虚拟机node02、node03
2、克隆虚拟机配置
3、三台虚拟机免密登录
四、运行hadoop
1、格式化hadoop
2、启动集群
3、测试hadoop
4、停止集群
一、安装
1.1、安装VMware
直接使用安装包一直下一步安装即可,且安装包当中附带破解秘钥,进行破解即可使用
1.2、安装Centos7
稍后安装系统——编辑虚拟机设置——内存、处理器、CD/DVD
English——时间——磁盘分区(点进去默认)——Begin——ROOTPASSWORD
二、配置Linux
1、重命名主机
hostnamectl set-hostname node01
logout 注销
重新登陆
2、配置网络:
(1)
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改 BOOTPROTO=static
修改 ONBOOT=yes
添加:
IPADDR=192.168.52.110
NETMASK=255.255.255.0
GATEWAY=192.168.52.2
DNS1=8.8.8.8
esc——shift+:——wq! 保存并退出vi
(2)配置VMware网络:编辑 - 虚拟网络编辑器 -
【NAT设置】按钮
(3)重启网络服务
service network restart 重启网络服务
ping baidu.com 测试
3、SecureCRTP(或Xshell)链接linux并配置
在SecureCRTP(或Xshell)上进行后续配置,可以复制粘贴,Linux原生shell不能粘贴
4、关闭linux自带防火墙
(1)systemctl stop firewalld
(2)systemctl disable firewalld
(3)关闭selinux
先安装vim: yum -y install vim
vim /etc/selinux/config
修改:SELINUX = disabled
5、建立ip映射
Vim /etc/hosts
192.168.52.100 node01
192.168.52.110 node02
192.168.52.120 node03
6、添加普通用户hadoop
添加普通用户hadoop,并给以sudo权限,用于以后所有的大数据软件的安装
useradd hadoop
passwd hadoop
visudo
添加一句:hadoop ALL=(ALL) ALL
7、定义统一目录
定义三台linux服务器软件压缩包存放目录,以及解压后安装目录,三台机器执行以下命令,创建两个文件夹,一个用于存放软件压缩包目录,一个用于存放解压后目录
root用户下
mkdir -p /kkb/soft # 软件压缩包存放目录
mkdir -p /kkb/install # 软件解压后存放目录
chown -R hadoop:hadoop /kkb # 将文件夹权限更改为hadoop用户
二、配置hadoop
1、上传hadoop、jak安装包,进行解压
#解压安装包到/kkb/install目录下
[root@node01 ~]# tar -xzvf hadoop-2.6.0-cdh5.14.2.tar.gz -C /kkb/install
[root@node01 ~]# tar -xzvf jdk-8u141-linux-x64.tar.gz -C /kkb/install
2、配置hadoop环境变量
1.配置环境变量
#1.在linux系统全局配置文件的末尾进行hadoop和java的环境变量配置
[root@node1 ~]# vi /etc/profile
[root@node01 ~]# vi /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}
"/etc/profile" 85L, 2028C
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
unset i
unset -f pathmunge
JAVA_HOME=/kkb/install/jdk1.8.0_141
HADOOP_HOME=/kkb/install/hadoop-2.6.0-cdh5.14.2
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME
export HADOOP_HOME
export PATH
2.验证环境变量
#1.使环境变量生效
[root@node1 ~]# source /etc/profile
#2.显示hadoop的版本信息
[root@node1 ~]# hadoop version
#3.显示出hadoop版本信息表示安装和环境变量成功.
Hadoop 3.1.2
Source code repository https://github.com/apache/hadoop.git -r 1019dde65bcf12e05ef48ac71e84550d589e5d9a
Compiled by sunilg on 2019-01-29T01:39Z
Compiled with protoc 2.5.0
From source with checksum 64b8bdd4ca6e77cce75a93eb09ab2a9
This command was run using /opt/bigdata/hadoop-3.1.2/share/hadoop/common/hadoop-common-3.1.2.jar
3、配置hadoop-env.sh
这个文件只需要配置JAVA_HOME的值即可,在文件中找到export JAVA_HOME字眼的位置,删除最前面的#
[root@node1 ~]#cd /kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop
[root@node1 hadoop]# pwd
/opt/bigdata/hadoop-3.1.2/etc/hadoop
[root@node1 hadoop]# vi hadoop-env.sh
export JAVA_HOME=/kkb/install/jdk1.8.0_141
4、配置core-site.xml
切换到/kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop目录下
[root@node1 ~]# cd /kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop
[root@node1 hadoop]# vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node01:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/tempDatas</value>
</property>
<!-- 缓冲区大小,实际工作中根据服务器性能动态调整 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>10080</value>
<description>检查点被删除后的分钟数。 如果为零,垃圾桶功能将被禁用。
该选项可以在服务器和客户端上配置。 如果垃圾箱被禁用服务器端,则检查客户端配置。
如果在服务器端启用垃圾箱,则会使用服务器上配置的值,并忽略客户端配置值。</description>
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>0</value>
<description>垃圾检查点之间的分钟数。 应该小于或等于fs.trash.interval。
如果为零,则将该值设置为fs.trash.interval的值。 每次检查指针运行时,
它都会从当前创建一个新的检查点,并删除比fs.trash.interval更早创建的检查点。</description>
</property>
</configuration>
5、配置hdfs-site.xml
配置/kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop目录下的hdfs-site.xml
<configuration>
<!-- NameNode存储元数据信息的路径,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割 -->
<!-- 集群动态上下线
<property>
<name>dfs.hosts</name>
<value>/kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop/accept_host</value>
</property>
<property>
<name>dfs.hosts.exclude</name>
<value>/kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop/deny_host</value>
</property>
-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node01:50090</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>node01:50070</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/namenodeDatas</value>
</property>
<!-- 定义dataNode数据存储的节点位置,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/datanodeDatas</value>
</property>
<property>
<name>dfs.namenode.edits.dir</name>
<value>file:///kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/nn/edits</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/snn/name</value>
</property>
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file:///kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/nn/snn/edits</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
</configuration>
6、配置mapred-site.xml
#默认没有mapred-site.xml文件,这里需要从模板中复制一份出来进行修改配置
[root@node01 hadoop]# cp mapred-site.xml.template mapred-site.xml
配置/kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop目录下的mapred-site.xml
<!--指定运行mapreduce的环境是yarn -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node01:19888</value>
</property>
</configuration>
7、配置yarn-site.xml
配置/kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop目录下的yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://node01:19888/jobhistory/logs</value>
</property>
<!--多长时间聚合删除一次日志 此处-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>2592000</value><!--30 day-->
</property>
<!--时间在几秒钟内保留用户日志。只适用于如果日志聚合是禁用的-->
<property>
<name>yarn.nodemanager.log.retain-seconds</name>
<value>604800</value><!--7 day-->
</property>
<!--指定文件压缩类型用于压缩汇总日志-->
<property>
<name>yarn.nodemanager.log-aggregation.compression-type</name>
<value>gz</value>
</property>
<!-- nodemanager本地文件存储目录-->
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/yarn/local</value>
</property>
<!-- resourceManager 保存最大的任务完成个数 -->
<property>
<name>yarn.resourcemanager.max-completed-applications</name>
<value>1000</value>
</property>
</configuration>
8、编辑slaves
此文件用于配置集群有多少个数据节点,我们把node2,node3作为数据节点,node1作为集群管理节点.
配置/kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop目录下的slaves
[root@node1 hadoop]# vi slaves
#将localhost这一行删除掉
node01
node02
node03
~
9、创建文件存放目录
node01机器上面创建以下目录
[root@node01 ~]# mkdir -p /kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/tempDatas
mkdir -p /kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/namenodeDatas
[root@node01 ~]# mkdir -p /kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/namenodeDatas
[root@node01 ~]# mkdir -p /kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/datanodeDatas
[root@node01 ~]# mkdir -p /kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/nn/edits
[root@node01 ~]# mkdir -p /kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/snn/name
[root@node01 ~]# mkdir -p /kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/nn/snn/edits
#1.修改目录所属用户和组为hadoop:hadoop
[root@node01 ~]# chown -R hadoop:hadoop /kkb
#2.修改目录所属用户和组的权限值为755
[root@node01 ~]# chmod -R 755 /kkb#3.关机
[root@node01 ~]# init 0
三、克隆配置
1、克隆其他两台虚拟机node02、node03
node01——右键——下一步...——创建链接克隆——名称(node02)、位置——完成
——
2、克隆虚拟机配置
1、修改主机名 :hostnamectl set-hostname node02
2、配置Linux网络(IP修改为110、120):vi /etc/sysconfig/network-scripts/ifcfg-ens33
3、链接Xshell
3、三台虚拟机免密登录
1、三台虚拟机,切换到Hadoop用户
[root@node01 ~]# su - hadoop #<--(三台都执行)
2、三台虚拟机,生成公钥
[hadoop@node1 ~]# ssh-keygen -t rsa #<--回车,(三台都执行)
3、三台虚拟机,拷贝公钥到node01服务器上
[hadoop@node1 ~]# ssh-copy-id node01 #<--回车\、yes、密码hadoop,(三台都执行)
4、node01的hadoop用户下,将authorized_keys拷贝到node02、node93服务器上
[hadoop@node1 ~]# cd /home/hadoop/.ssh/
[hadoop@node1 ~]# scp authorized_keys node02:$PWD
[hadoop@node1 ~]# scp authorized_keys node03:$PWD
5、测试
[hadoop@node1 ~]# ssh node02
[hadoop@node2 ~]#
[hadoop@node2 ~]# logout
[hadoop@node1 ~]#
[hadoop@node1 ~]# hostname
node01
四、运行hadoop
1、格式化hadoop
切换hadoop,注意,只能在node01上,只有格式化一次,否则会数据丢失
[root@node01 ~]$ su - hadoop
[hadoop@node01 hadoop]$ hdfs namenode -format
2、启动集群
[hadoop@node01 ~]$ start-all.sh
在浏览器地址栏中输入http://192.168.52.100:50070/dfshealth.html#tab-overview查看namenode的web界面.
3、测试hadoop
1、使用hdfs dfs -ls / 命令浏览hdfs文件系统,集群刚开始搭建好,由于没有任何目录所以什么都不显示.
[hadoop@node01 ~]$ hdfs dfs -ls /
2、创建测试目录
[hadoop@node01 ~]$ hdfs dfs -mkdir /test
3、在此使用hdfs dfs -ls 发现我们刚才创建的test目录
[hadoop@node01 ~]$ hdfs dfs -ls /test
19/08/23 05:22:25 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
drwxr-xr-x - hadoop supergroup 0 2019-08-23 05:21 /test/
[hadoop@node01 ~]$
4、使用touch命令在linux本地目录创建一个words文件
[hadoop@node01 ~]$ touch words
5、文件中输入如下内容
[hadoop@node01 ~]$ vi words
i love you
are you ok
6、将创建的本地words文件上传到hdfs的test目录下
[hadoop@node01 ~]$ hdfs dfs -put words /test
7、查看上传的文件是否成功
[hadoop@node01 ~]$ hdfs dfs -ls -r /test
Found 1 items
-rw-r--r-- 3 hadoop supergroup 23 2019-06-30 17:28 /test/words
8、MR词频统计
#/test/words 是hdfs上的文件存储路径 ,/test/output是mapreduce程序的输出路径,这个输出路径是不能已经存在的路径,mapreduce程序运行的过程中会自动创建输出路径,数据路径存在的话会报错
[hadoop@node01 ~]$ hadoop jar /kkb/install/hadoop-2.6.0-cdh5.14.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar wordcount /test/words /test/output
wordcount程序能够正常的运行成功,输入结果,意味着我们的大数据环境正确的安装和配置成功。
4.停止集群
[hadoop@node1 ~]$ stop-all.sh