Open keyfall opened 2 years ago
Hadoop是一个有Apache基金会所开发的分布式系统基础架构 主要解决海量数据的存储和海量数据的分析计算问题 广义上讲,Hadoop通常是Hadoop生态圈,由很多协助Hadoop完成任务的软件一起组成的一个总的软件集合 Hadoop创始人是Doug Cutting
1.高可靠性:Hadoop底层维护多个数据副本,每一个服务器都会维护一个,数据副本可以设置数量,最大的数据副本数量是服务器的数量,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失
2.高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点,可以动态增加服务器
3.高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度
4.高容错性:能够自动将失败的任务重新分配 Hadoop1,2,3的区别
Hadoop Distributed File System 简称HDFS,是一个分布式文件系统 组成:
Yet Another Resource Negotiator简称YARN ,另一种资源协调者,是Hadoop的资源管理器。 组成: 1.ResourceManager(RM):整个集群资源(内存,cpu等)的老大 2.NodeManager(NM):单个节点服务器资源老大 3.ApplicationMaster(AM):单个任务运行的老大 4.Container:容器,相当一台独立的服务器,里面封装了任务运行所欲要的资源,如内存,CPU,磁盘,网络等.
MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。 MapReduce是两个阶段,Map和Reduce Map阶段并行处理输入数据 Reduce对Map结果进行汇总
配置基本环境,看尚硅谷大数据技术之模板虚拟机环境准备.docx
ping www.baidu.com
,看是否有网络
安装epel-release,net-tool,vim
yum install -y epel-release net-tools vim
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld.service #永久关闭防火墙
新建用户并且赋予用户和root同等权限,企业一般不会给root,平常可以使用root
卸载原先jdk:
如果你的虚拟机是最小化安装不需要执行这一步。
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
rpm -qa:查询所安装的所有rpm软件包
grep -i:忽略大小写
xargs -n1:表示每次只传递一个参数
rpm -e –nodeps:强制卸载软件
reboot #重启
jdk和hadoop在code中hadoop的资料中,把压缩文件放到/opt/software/中
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
配置环境变量
vim /etc/profile.d/my_env.sh
添加以下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
source /etc/profile
测试jdk和hadoop是否成功
java -version
hadoop version
完整克隆3份服务器,hadoop102,hadoop103,hadoop104
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改ipaddr为对应的ip地址192.168.47.102或192.168.47.103或192.168.47.104
修改主机名称,分别是hadoop102,hadoop103,hadoop104
vim /etc/hostname
修改hosts文件
vim /etc/hosts
添加:
192.168.47.103 hadoop103
192.168.47.104 hadoop104
192.168.47.102 hadoop102
把windows电脑的hosts文件添加上下面的内容
192.168.47.102 hadoop102
192.168.47.103 hadoop103
192.168.47.104 hadoop104
免密登录原理 在hadoop实行操作
cd ~
mkdir .ssh
cd .ssh
ssh-keygen -t rsa
然后三个回车,生成两个文件id_rsa,id_rsa.pub 公钥拷贝到其他服务器
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
在hadoop103和hadoop104进行上面的操作之后,后续的ssh操作就不需要密码登录了
由于脚本使用的是ssh和rsync,需要所有虚拟机先安装rsync
yum -y install rsync
cd ~
mkdir bin
cd bin
vim xsync
xsync放入如下代码
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
chmod +x xsync #增加权限,root用户也需要
xsync /root/bin #测试脚本
以下是非root用户操作
由于内存耗费原因,NameNode,SecondaryNameNode,resourcemanager不能放一台服务器 设置这四个文件core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml,路径在/opt/module/hadoop-3.1.3/etc/hadoop core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
使用xsync分发
xsync /opt/module/hadoop-3.1.3/etc/hadoop
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
添加一下内容:
hadoop102
hadoop103
hadoop104
我这里有一个localhost,我给删除了,也运行起来了,因为我觉得已经有了hadoop102了,localhost不是重复了么
还有4个文件需要修改,work文档里没有,因为我这个是root用户启动的,所以需要在文件中配置root用户,在/opt/module/hadoop-3.1.3目录下 这是在hadoop102 sbin/start-dfs.sh和sbin/stop-dfs.sh
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
下面是在hadoop103上,因为启动yarn sbin/start-yarn.sh和sbin/stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
其实使用xsync让每个服务器都有也行,这主要是在启动的时候需要,没启动有这个设置也没事
现在启动,我是第一次启动,所以报错了,显示已经在节点运行,我觉得是格式化namenode的问题
由于是第一次启动,所以先hadoop102初始化
hdfs namenode -format
hadoop102再启动hdfs
sbin/start-dfs.sh
这时候如果报错了,我这里最后是stop it first,那就运行`sbin/stop-dfs.sh命令,再重新启动
hadoop103运行yarn
sbin/start-yarn.sh
这里如果报错了,那就运行sbin/stop-dfs.sh
,再关闭hdfs的,接着删掉hadoop103和hadoop104的data和logs文件夹,再重新启动hdfs和yarn.应该就好了
hadoop成功界面
http://hadoop102:9870/
yarn成功界面
http://hadoop103:8088/
配置历史服务器
vim mapred-site.xml
增加下面的配置
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml #分发
mapred --daemon start historyserver #启动
这是地址http://hadoop102:19888/jobhistory
配置日志聚集
vim yarn-site.xml
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml #分发配置
在hadoop103
sbin/stop-yarn.sh
在hadoop102的opt/module/hadoop-3.1.3/bin目录下
mapred --daemon stop historyserver
再启动yarn和historyserver
hadoop fs -rm -r /output #删除output文件夹,没有就不用删除了
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output #执行WordCount程序
这样所有日志就可以在历史服务器查看了
由于hdfs,yarn和historyserver都要启动,可以做一个脚本
vim myhadoop.sh #在root用户下的bin目录执行
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
chmod +x myhadoop.sh
以上基础的就完了
大数据概念
大数据基础概念
大数据主要解决海量数据的采集,存储和分析计算问题 数据存储单位:bit,Byte,KB,MB,GB,TB,PB,EB,ZB,YB,BB,NB,DB 大数据一般处理的是TB,PB,EB级别的数据
大数据4V特点
1.Volume(大量) 个人计算机容量位TB量级,大企业的数据量已经接近EB量级
2.Velocity(高速) 处理数据效率应该是高速的,否则双十一就开不了了
3.Variety(多样) 多样性的是数据格式多样,以前大多是数据库/文本为主的结构化数据,现在非结构化数据越来越多,比如网络日志,音频,视频,图片,地理位置信息等,大数据需要解决这些多样性的数据
4.Value(低价值密度) 有很多数据,我们只需要其中的一点内容,这种提纯也是一个大数据的优点