Hadoop
一、概述
1.1 大数据概念
大数据是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。——来自研究机构Gartner
1.2 大数据面临问题
存储
:单机存储有限,如何解决海量数据存储?
分析
:如何在合理时间范围内对数据完成成本运算?
1.3 大数据的特点
4V 特性 Volume 数量Velocity多样 Variety 时效 Value价值
1)数据量大
B-KB-MB-GB-TB-PB-EB-ZB…
各种云存储解决方案,百度云、腾讯微云、OneDriver、GoogleDriver等,现有的
大数据产生的数据量根本还是在于人,日益进步的科技,更加美好的物质生活,更加自我的追求,催生出了互联网时代更多数据量的产生。
网购平台,视频网站,健身App,支付金融App,社交App,搜索引擎等能够在人们使用的时候收集大量的数据,日活人数上亿级别的互联网公司能够在一天内轻松获取超过1PB的数据。
2)数据时效性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QQAmFITz-1569943141907)(assets/u=2166141108,24851986&fm=58&bpow=800&bpoh=528.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YeBiOLcX-1569943141908)(assets/u=1433661816,131453648&fm=58&bpow=800&bpoh=600.jpg)]
-
天猫
天猫双十一总成交额在开场后第2分05秒即突破100亿元,刷新去年创下的最快破百亿记录,用时不到1小时17分超过2015年双十一全天成交额,用时不到15小时50分,成交总额超越去年全天成交额。
-
京东
随着618大促的结束,大家也都在关注各个电商平台的销量情况,2018京东618销售额是多少?最新数据公布,京东618累计交易额1592亿元。
大量数据在短时间内迅速产生,即要求收集者在短时间内收集存储数据,且在近期分析出有效数据。
3)数据多样性
(1)数据存储类型多样性
结构化数据:SQL,文本等
非结构化数据:视频,音频,图片
(2)数据分析类型多样性
地理位置:来自北京、上海…
设备信息:PC、手机、手表、手环
个人喜好:美女、面膜、显卡、数码、游戏
社交网络:A可能认识B,C,B可能认识C
电话号码:110,10086,10010
网络身份证:设备Mac+电话+IP
4)数据价值
警察叔叔:只关注是否哪里有违规
AI研究:只关注对AI是否有帮助(阿尔法GO)
所以在海量数据中提取有用的数据最为关键,这就是数据分析第一步要做的事情,数据降噪(数据清洗|数据预处理)
1.4 应用场景
1)个人推荐
根据用户喜好,全平台数据共享推荐
例子:小明在网页上百度了一下跑步机,打开淘宝发现个人推荐已经有跑步机的推荐了,打开京东发现搜索框出现了跑步机三个字,打开抖音刷到广告是京东的跑步机,小米商城推送一条消息,亲,米家走步机了解一下?√,×
2)风控
大数据实时流处理,根据用户行为以及行为模型的支撑,判断该操作是否正常。
支付宝:在有人盗取并修改登录和支付密码,使用陌生的设备登录后,并且进行转账操作,支付宝会禁止操作,并提示风险。
3)成本预测
通过大数据分析,得出近几年商品销售成本以及效益,商家/企业可以根据此项数据进行合理产品策略的转变,来达到企业利润的最大化。
4)气候预测
根据当代收集的数据以及往年采集的数据,预测近几年的气候变化,或者回推古代的气象异常等
5)人工智能
无人汽车:百度、Google、特斯拉
智能助手:小爱、Sire、GoogleAssisant、边小溪、小冰、小娜
1.4 工作方向
1. 业务
电商的推荐系统,智能广告系统,专家系统,智慧城市,智能交通,金融大脑,智慧医疗,灾害预警....
2. 工作方向
大数据运维工程师,大数据开发工程师(实时计算,数据仓库,ETL,基本挖掘),数据分析师(算法)
数据量大/数据时效性|数据处理速度快
/数据多样性(维度)
/数据有价值-降噪
1.5 分布式
为了解决现实问题,存储和分析,大数据的存储和分析都必须在集群,一是为了拥有足够的容量进行存储,二是能够高效率分分析数据。
通常将跨机器
/跨进程
/跨虚拟机
架构成为分布式架构,因为硬件垂直成本较高且不可控,相比垂直垂直提升成本较高且不可控,相比较垂直提升水平扩展成本较低,能够是的投入和产出趋近于线性。
硬件资源有了?软件实现怎么搞?
二、Hadoop
https://blog.youkuaiyun.com/lfq1532632051/article/details/53219558
Hadoop是在2006年雅虎从Nuthc(给予Java爬虫框架)工程中剥离一套分布式的解决方案。该方案参考了Google的GFS
和MapReduce
论文,当时发布的版本称为Hadoop-1.x,并且在2010年雅虎对Hadoop又做了一次升级,该次升级的目的是优化了Hadoop的MapReduce框架,是的Hadoop更加易用,用户只需要少许的配置,就可以使用Hadoop实现海量数据存储和大规模数据集的分析。一个由Apache基金会所开发的分布式系统基本框架。
HDFS
:Hadoop Distribute File System
Map Reduce
:Hadoop中的分布式计算框架,实现对海量数据并行分析和计算
2.1 Hadoop 生态系统
HDFS
:分布式存储系统
MapReduce
:并行计算框架
HBase
:基于HDFS之上一款NoSQL数据库(名副其实海量数据存储解决方案)
Hive
:是一款SQL的解析引擎,可以将SQL翻译成MapReduce任务,将任务提交给MapReduce框架
Flume
:分布式日志收集系统,用于收集海量数据,并且存储到HDFS/HBase
Kafka
:分布式消息系统,实现分布式系统间解耦和海量数据的缓冲
ZooKeeper
:分布式协调服务,用于服务注册中心
/配置中心
/集群选举
/状态检测
/分布式锁
2.2 大数据分析方案
Map Reduce
:代表基于磁盘离线大数据静态批处理框架-延迟较高30分钟+
Saprk
:代表基于内存实时(离线)大数据静态批处理框架-几乎是MapReduce的10-100倍速度
Storm/ Saprk Streaming|Flink|Kafka Stream
:实时的流处理框架,达到对记录级别的数据显示毫秒级处理
三、HDFS
3.1 安装(伪集群)
目前使用伪分布式单机进行测试|学习,
1)安装CentOS 64Bit(需要开启Intel 虚化技术)
2)安装JDK 8
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载Java8 Linux 64位
并解压至指定目录
3)配置环境变量
(1)配置用户变量
vi /root/.bashrc
--------------------------
export JAVA_HOME=/home/java/jdk1.8.0_181 # Java在Linux下的安装路径
export CLASSPATH=.
export PATH=$PATH:$JAVA_HOME/bin # Path记得加上JAVA_HOME
(2)配置主机名和IP映射关系 /etc/hosts
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=CentOS #主机名|域名
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.169.139 CentOS
(3)关闭防火墙
service iptables stop #关闭服务
chkconfig iptables off #关闭开机自起
因为搭建分布式服务之间可能产生相互的调度,为了保证正常的通信,一般需要关闭防火墙
(4)配置主机SSH免密登录认证
SSH是Secure Shell 的缩写,SSH为建立在应用层基础上的安全协议,专为远程登录好会话和其他网络服务提供安全性的协议
基于口令的安全验证
:基于口令用户名
/密码
基于密钥的安全验证
:需要依靠密钥,也就是你必须为你自己创建一对密钥,并把公用密钥放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后 ,先在该服务器上你的主目录下寻找你的公用密钥,然后把它和你发过来的公用密钥进行比较。如果两个密钥一致,服务器就用公用密钥加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密钥解密再把它发送给服务器。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M88TJKXQ-1569943141909)(assets/ssh免密登录.png)]
ssh-keygen -t rsa #生成
ssh-copy-id HadoopNode00 #复制
4)Hadoop HDFS的安装与配置
参考:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html
(1)解压至自定义目录
(2)配置Hadoop的环境变量
vi /root/.bashrc
--------------------------
export JAVA_HOME=/home/java/jdk1.8.0_181/ # Java在Linux下的安装路径
export CLASSPATH=.
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0/
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
HADOOP_HOME
环境变量被第三方产品所依赖例如:hbase
/Hive
/Flume
/Spark
在集成Hadoop的时候,是通过读取HADOOP_HOME环境确定Hadoop位置
(3)配置ect/hadoop/core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://CentOS:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop-2.6.0/hadoop-${user.name}</value>
</property>
(4)配置etc/hadoop/hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
5)启动HDFS
(1)格式化namenode
如果是第一次启动HDFS,需要格式化namenode
hdfs namenode -format #配置环境变量后,任何位置都可找到hdfs命令
格式化成功后,用户可以看到以下目录结构
[root@CentOS ~]# tree /usr/hadoop-2.6.0/hadoop-root/
/usr/hadoop-2.6.0/hadoop-root/
└── dfs
└── name
└── current
├── fsimage_0000000000000000000
├── fsimage_0000000000000000000.md5
├── seen_txid
└── VERSION
(2)启动HDFS服务
start-dfs.sh #直接复制进命令行,回车即可
jps #可以通过jps命令查看系统中Java进程 一般有DataNode NameNode SecondaryNameNode
stop-dfs.sh #停止HDFS的进程
配置WIN下的hosts文件 C:\Windows\System32\drivers\etc
用户可以通过访问浏览器http://虚拟IP或者域名:50070
3.2 HDFS相关的操作
1)HDFS Shell
Usage: hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
[-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] <path> ...]
[-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] [-x] <path> ...]
[-expunge]
[