学习要求:不针对0基础
linux基础;
java基础;
数据库基础;
最近开始学习大数据:整体感觉不算难,也挺有意思的,但是踩坑很痛苦。
1.大数据介绍:
数据:一切皆数据
结构:结构化,非结构化
4V特点:
1.volume数据量大
2.velocity数据增长速度快
3.variety数据种类多(图片,视频,文字,数值)
4.value数据价值密度小,综合价值大
数据来源:
1)公司自己的业务数据;
2)第三方
3)爬虫
数据处理:
1)缺失数据处理:
考虑是否影响整体业务数据,不影响删除。如果和钱相关不能轻易删除。
2)敏感字段,进行脱敏处理,加密算法 md5
数据价值:
人物画像
根据用户做一个全方位分析画像,属性 人脉 消费水平 性格 消费偏向
了解几个概念:
集群:
多个服务器共同协作完成同一个人物;每个机器叫做节点,共同组成的群体叫做集群。
集群中的节点通过局域网连接或其他方式。
分布式:
分而治之,一个任务分成多个子任务
原来一个人干的事情,现在大家分工劳动。
分布式文件系统 分布式数据库 分布式计算系统
负载均衡:nginx
每个节点分布的人基本均衡,合理利用集群效率;
和机器的硬件配置相匹配;
2.HADOOP介绍:
来源背景:
gfs–hdfs
mapreduce–mapreduce
bigtable–hbase
hadoop是什么?
一个分布式开源框架;
在应用层提供高可用;
将硬件问题当成常态,不会影响整体进程;
hadoop的模块:
common:提供下面三个模块的工具类,rpc框架
hdfs:hadoop distributed file system 分布式存储 海量数据存储
主从架构:master-salves
主: java 进程 namenode 一个
从: datanode
助理进程: secondarynamenode 分担备份namenode
yarn:集群资源调度框架,类似于windows系统
负责集群的资源管理,也是主从架构
主:resourcemanager 从:nodemanager
mapreduce:
有计算任务才会有相应进程;
####hadoop的搭建:
搭建准备:所有文件要放在用户目录下 否则没有权限
1)ip配置 (见我的博客)vim /etc/sysconfig/network-scripts/ifcfg-eth0
2)主机名 vi /etc/sysconfig/network
3)主机映射 vi /etc/hosts
4)关闭防火墙和sellinux(用户级别不高用不到)
service iptables stop ;vi /etc/selinux/config
service iptables stop
5)将系统启动级别设为3(我装的系统默认是3)
vi /etc/inittab
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this) 关机
# 1 - Single user mode 单用户模式
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking) 多用户模式
# 3 - Full multiuser mode 多用户模式
# 4 - unused
# 5 - X11 图形化界面
# 6 - reboot (Do NOT set initdefault to this) 重启
6)创建普通用户,并添加sudoers权限(修改系统文件)分布式各节点账户密码要相同
useradd hadoop;passwd hadoop
su - hadoop #切换用户
vi /etc/sudoers [hadoop ALL=(ALL) ALL]
7)创建免密登录
ssh-keygen
cd .ssh/ ; ls #一个公钥 一个密钥
ssh-copy-id node1 #给node1发送公钥,ssh node1 验证
8)安装卸载jdk #很重要 且需要注意系统位数 和java位数
卸载:
rpm -qa|grep jdk
rpm -e 对应jdk --nodeps
9)时间同步
不能联网: date -s 手动指定时间
公网时间服务器:sudo ntpdate ntp1.aliyun.com
搭建方式:
1)伪分布式搭建;所有版本下载链接:https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
不选太陈旧版本也不选太新版本;
安装:【切换普通用户】
上传安装包
解压
配置环境变量
修改配置文件 cd $HADOOP_HOME/etc/hadoop
1)hadooop-env.sh
JAVA_HOME=
2)core-site.xml #主节点配置,参考配置链接https://hadoop.apache.org/docs/r2.7.7/hadoop-project-dist/hadoop-common/SingleCluster.html
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node-1:9000</value>
<!-- jdbc:mysql://localhost:3306 -->
</property>
</configuration>
3) hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
4) yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
5)cp mapred-site.xml.template mapred-site.xml #与yarn相互指定
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
6) slaves #配置sencondarynamenode
7) 格式化 #注意:普通用户无法访问root文件夹
hadoop namenode -format
8)启动
start-all.sh ;start-hdfs.sh ;start-yarn.sh
9)验证jps 6个进程
4066 NodeManager
3496 NameNode
3800 SecondaryNameNode
3961 ResourceManager
3627 DataNode
4142 Jps
页面访问
hdfs:192.168.1.188:50070
yarn:192.168.1.188:8088
2)完成分布式搭建;
和伪分布式一致;
各节点的普通用户账户密码一致;
先在一个节点执行所有修改,再远程发送到其他节点
1)配置文件:
集群规划:
hdfs yarn
node-1 namenode datanode nodemanager
node-2 secondarynamenode datanode nodemanager
node-3 datanode resourcemanager nodemanager
修改配置文件 cd $HADOOP_HOME/etc/hadoop
1)hadooop-env.sh
JAVA_HOME=
2)core-site.xml #主节点配置,参考配置链接https://hadoop.apache.org/docs/r2.7.7/hadoop-project-dist/hadoop-common/SingleCluster.html
<!--指定主节点-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
<!-- jdbc:mysql://localhost:3306 -->
</property>
<!--临时目录/文件存储目录,默认在tmp,
一定配置在有权限的目录下,该用户在home目录下游权限-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoopdata</value>
</property>
3) hdfs-site.xml
<!-- namenode,datanode 的数据目录-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/data/hadoopdata/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/data/hadoopdata/data</value>
</property>
<!-- 数据存储份数 的数据目录-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 助理节点-->
<property>
<name>dfs.secondary.http.address</name>
<value>node2:50090</value>
</property>
4) yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node3</value>
</property>
<!-- yarn集群为mapreduce 程序提供shuffle服务
允许mr执行在yarn上-->
<property>
<name>yarn.nodemanager.aux-service</name>
<value>mapreduce_shuffle</value>
</property>
5)cp mapred-site.xml.template mapred-site.xml #与yarn相互指定
vi mapred-site.xml
<--!允许mr跑在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
6) slaves #从节点的信息
node1
node2
node3
2远程发送;
scp -r /hadoop
普通用户执行系统命令用sudo[如/etc/下;]ll 看文件权限
普通用户
scp -r hadoop-2.7.2 node2:/home/hadoop/
scp -r hadoop-2.7.2 node3:/home/hadoop/
scp -r ~/.bashrc node2:~/.bashrc
scp -r ~/.bashrc node3:~/.bashrc
3格式化 必须在namenode节点执行
4启动 start-dfs.sh #任意节点执行
start-yarn.sh #在yarn的主节点执行
5验证:
node1:50070 #hdfs
node3:8088 #资源调度
###################################安装问题
安装问题:
1)http无法访问8088 50070[DFS文件系统成功格式化,节点启动了,jps也有显示]
netstat -apn | grep 50070
答案是防火墙没关 进入管理员状态
service iptables start
service iptables stop
service iptables status
2)主机找不到
vim /etc/sysconfig/network-scripts/ifcfg-eth0
vi /etc/sysconfig/network
重启集群
3)格式化错误:
配置文件写错了;
4)某些进程启动不了
措施1:关闭,重新启动集群;
措施2:看那个进程没有启动
单独启动hdfs进程:
hadoop-daemon.sh start datanode #单独启动hadoop datanode进程
单独启动yarn进程:
hadoop-daemon.sh start nodemanager
安装注意事项:
1)成功的格式化只有一次;
格式化过程:
创建namenode存储数据的相关目录
生成新的版本信息
想要格式化需要:
1)删除namenode目录 rm -rf /home/hadoop/data/hadoopdata/name
2)删除datanode目录 再进行格式化 rm -rf /home/hadoop/data/hadoopdata/data
否则datanode启动不了,因为会生成不同的集群id
或者rm -rm /home/hadoop/data
2)环境变量的配置
jdk
hadoop
修改[环境变量]有三个:
1)etc/profile 系统环境变量;
2)~/.bashrc 用户环境变量;
3)~/.bash_profile 用户环境变量;
etc/profile>.bashrc> .bash_profile
3)集群一定需要时间同步
节点时间要保持一致;
集群中的各节点需要通信,datanode 和 namenode 之间通信依靠心跳,
心跳差超过630s就会认为该节点死了;
4)集群安装模式:
1)单机模式:直接解压,没人用
2)伪分布式:所有jar程序在一个机器上运行;
3)完全分布式:
用户使用感知不到多节点;
主从架构;hdfs yarn主各只有一个
namenode 存储元数据,管理数据的数据
datanode负责数据存储,先经过namenode;
主节点挂了 集群就挂了,开发环境不适用,测试学习使用。
secondarynamenode只是一个助理 只能分担压力和备份,不能代替
4)高可用:最广泛的搭建方式
集群可以持续对外提供服务; 可以做到24小时不间断;
依赖zookeeper 搭建放在zookeeper之后
集群架构:双主多从
有两个namenode 另一个处于热备份状态。死的namenode死了又活了 就变成standby
缺陷:主节点的能力只有一个节点;如果集群中的节点过多,会导致主节点崩掉;
5)联邦机制:
有多个活跃的主节点;共同使用所有datanode;
每个namenode只负责集群中一部分的node;
联邦+高可用:最高端的集群模式;