一、概述
1.1 大数据概念
大数据是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。
1.2 大数据面临的问题
存储
:单机存储有限,需要使用集群(多台机器)存储数据;硬件上必须有足够的存储容量,软件上有对应的容灾机制。
分析
:单机算力有限,也需要使用集群进行计算(需要在合理的时间内将数据变废为宝)
1.3 大数据的特点
4V Volume 数据量大 Velocity 时效性 Variety 多样性 Value 价值大
1)数据量大
B-KB-MB-GB-TB-PB-EB-ZB…
各种个人云存储解决方案:百度网盘、腾讯微云、115、lanzou、诚通、OneDriver、GoogleDriver 等
大数据产生于21世纪的互联网时代,日益进步的科技和日益增长的物质文化需求,导致了数据的大爆炸;
淘宝、支付宝、微信、QQ、抖音这些App是目前国内顶尖的流量,使用人数及其的庞大,每天可以产生极多的数据量。
2)数据时效性
双十一、618
大数据是在短时间内迅速产生(产生的时效性非常高),分析的时效性就必须因场景而异,需要在合理的时间内分析出有价值的数据。
3)数据多样性
(1)数据存储类型多样性
结构化的数据:表格、文本、SQL等
非结构化数据:视频、音频、图片
(2)数据分析类型多样性
地理位置:来自北京、中国、上海
设备信息:来自PC、手机、平板、手表、手环、眼镜
个人喜好:美女、面膜、ctrl、 数码、篮球、足球
社交网络:A可能认识B 、C ,B就可能认识C
电话号码:110,11086
网络身份证:设备MAC+电话+IP+地区
4)数据价值
警察叔叔:只关注的是否哪里违规
AI研究:犯罪预测、下棋、无人驾驶
所以在海量数据中有用的数据最为关键、这是分析数据的第一步,也就是对数据进行降噪处理(数据清洗|数据预处理)
1.4 应用场景
1)个人推荐
根据用户喜好,推荐相关资源
千人一面、千人千面、一人千面
2)风控
大数据实时流处理,根据用户行为模型进行支撑,判断该行为是否正常
3)成本预测
4)气候预测
5)人工智能
1.5 工作方向
1 业务
电商推荐、智能广告系统、专家系统、智能交通、智能医疗
2 工作方向
大数据开发工程师(实时计算、批处理、ETL、数据挖掘)、大数据运维工程师
1.6分布式
为了解决大数据存储和计算的问题,需要使用一定数量的机器,硬件设施必须足够,那软件解决方案怎么办?
如何使用软件去解决存储和分析的问题?
二、Hadoop
Hadoop由 Apache Software Foundation 公司于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发。
2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。
Hadoop 是最受欢迎的在 Internet 上对搜索关键字进行内容分类的工具,但它也可以解决许多要求极大伸缩性的问题。例如,如果您要 grep 一个 10TB 的巨型文件,会出现什么情况?在传统的系统上,这将需要很长的时间。但是 Hadoop 在设计时就考虑到这些问题,采用并行执行机制,因此能大大提高效率。
HDFS
:Hadoop Distributed File System 作为Hadoop 生态体系中数据的存储的软件解决方案
MapReduce
:Hadoop中分布式计算框架(只需要实现少量的代码,就可以开发一个分布式的应用程序),对海量数据并行分析和计算
2.1 Hadoop生态系统
HDFS
:Hadoop Distributed File System 作为Hadoop 生态体系中数据的存储的软件解决方案
MapReduce
:Hadoop中分布式计算框架(只需要实现少量的代码,就可以开发一个分布式的应用程序),对海量数据并行分析和计算
HBase
: 基于HDFS 的列式存储的NoSql
Hive
:是一款SQL解释引擎,能够将SQL语句翻译成MR代码
Flume
:分布式的日志收集系统,用于收集海量日志数据,并将其存储在hdfS中
kafka
:消息对列,实现对分布式应用程序间的解耦和数据缓冲
Zookeeper
:分布式协调服务,用户注册中心、配置中心、集群选举、状态检测、分布式锁
2.2 大数据分析方案
MapReduce
:大数据离线批处理(代表基于磁盘,延迟30分钟+)
Spark
:大数据离线批处理(代表基于内存,速度相对于MR来说快的多)
Strom/Spark Streaming/Kafka Streaming/Flink
:实时流处理框架,达到对记录级别消息的毫秒级处理
三、HDFS
3.1 安装(伪集群)
1)准备虚拟机
更改IP
删除MAC地址
更改主机名 vi /etc/sysconfig/network
2)安装JDK 8
略
3)配置Java环境变量
export JAVA_HOME=/home/java/jdk1.8.0_181
export PATH=$PATH:$JAVA_HOME/bin
4)配置主机名与IP的映射关系
[root@HadoopNode00 ~]# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=HadoopNode00
[root@HadoopNode00 ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.11.20 HadoopNode00
5)关闭防火墙
[root@HadoopNode00 ~]# service iptables stop # 关闭防火墙
[root@HadoopNode00 ~]# chkconfig iptables off # 关闭防火墙开机自动启动
6)ssh免密登陆
SSH是Secure Shell 的缩写,SSH为建立在应用层山的安全协议,专为远程登陆会话和其他网络服务提供安全协议支持。
基于口令的安全验证
:基于用户名和密码 root | 123456
基于密钥的安全验证:需要依靠密钥
[root@HadoopNode00 ~]# ssh-keygen -t rsa # 生成密钥
[root@HadoopNode00 ~]# ssh-copy-id HadoopNOde00
7)解压Hadoop
解压Hadoop到指定目录
[root@HadoopNode00 ~]# mkdir /home/hadoop/
[root@HadoopNode00 ~]# tar -zxvf /home/hadoop/hadoop-2.6.0.tar.gz -C /home/hadoop
8)配置Hadoop环境变量
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
HADOOP_HOME
环境变量别第三方依赖,hbase hive flume在集成HADOOP的时候,是通过HADOOP_HOME找到hadoop的位置
9)配置 etc/hadoop/core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://HadoopNode00:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-2.6.0/hadoop-${user.name}</value>
</property>
10)配置 etc/hadoop/hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
11)格式化namenode
第一次启动hdfs的时候,需要格式化namenode
[root@HadoopNode00 ~]# hdfs namenode -format
[root@HadoopNode00 ~]# tree /home/hadoop/hadoop-2.6.0/hadoop-root
/home/hadoop/hadoop-2.6.0/hadoop-root
└── dfs
└── name
└── current
├── fsimage_0000000000000000000
├── fsimage_0000000000000000000.md5
├── seen_txid
└── VERSION
3 directories, 4 files
12)启动hdfs
start-dfs.sh # 开启HDFS
stop-dfs.sh # 关闭hdfs
进入web界面
http://主机名:50070
windows下 配置域名与ip的映射:C:\Windows\System32\drivers\etc \hosts
3.2 HDFS Shell 相关操作
1)hdfs shell
[root@HadoopNode00 ~]# hadoop fs
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] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] <path> ...]
[-cp [-f] [-p | -p[topax]] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] <path> ...]
[-expunge]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getfacl [-R] <path>]
[-getfattr [-R] {-n name | -d} [-e en] <path>]
[-getmerge [-nl] <src> <localdst>]
[-help [cmd ...]]
[ ..]
[-usage [cmd ...]]
Generic options supported are
-conf <configuration file> specify an application configuration file
-D <property=value> use value for given property
-fs <local|namenode:port> specify a namenode
-jt <local|resourcemanager:port> specify a ResourceManager
-files <comma separated list of files> specify comma separated files to be copied to the map reduce cluster
-libjars <comma separated list of jars> specify comma separated jar files to include in the classpath.
-archives <comma separated list of archives> specify comma separated archives to be unarchived on the compute machines.
The general command line syntax is
bin/hadoop command [genericOptions] [commandOptions]
2)上传文件
# 上传 root目录下的install.log 到hdfs 根目录下
[root@HadoopNode00 ~]# hadoop fs -put /root/install.log /1.txt
3 ) ls文件
# 找到到了刚才上传为文件命名为1.txt
[root@HadoopNode00 ~]# hadoop fs -ls /
Found 1 items
-rw-r--r-- 1 root supergroup 8901 2019-09-17 23:28 /1.txt
4)下载文件
[root@HadoopNode00 ~]# hadoop fs -get /1.txt /root/baizhi.txt
5)删除文件
[root@HadoopNode00 ~]# hadoop fs -rm /2.txt
19/09/17 23:36:05 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /2.txt
6)查看文件
[root@HadoopNode00 ~]# hadoop fs -cat /1.txt
Installing libgcc-4.4.7-23.el6.x86_64
warning: libgcc-4.4.7-23.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Installing setup-2.8.14-23.el6.noarch
7)创建文件夹
[root@HadoopNode00 ~]# hadoop fs -mkdir /baizhi
[root@HadoopNode00 ~]# hadoop fs -ls /
Found 2 items
-rw-r--r-- 1 root supergroup 8901 2019-09-17 23:28 /1.txt
drwxr-xr-x - root supergroup 0 2019-09-17 23:37 /baizhi
8)复制文件
[root@HadoopNode00 ~]# hadoop fs -cp /1.txt /baizhi/
[root@HadoopNode00 ~]# hadoop fs -ls /
Found 2 items
-rw-r--r-- 1 root supergroup 8901 2019-09-17 23:28 /1.txt
drwxr-xr-x - root supergroup 0 2019-09-17 23:38 /baizhi
[root@HadoopNode00 ~]# hadoop fs -ls /baizhi
Found 1 items
-rw-r--r-- 1 root supergroup 8901 2019-09-17 23:38 /baizhi/1.txt
9)开启回收站机制
core-site.xml
<property>
<name>fs.trash.interval</name>
<value>1</value>
</property>
设置一分钟延迟
3.3 Java API 操作HDFS
(1) 依赖
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.6.0</version>
</dependency>
(2)Windows 配置Hadoop环境
- 解压hadoop到指定的目录
- 拷贝hadoop.dll和winutils.exe到hadoop/bin 目录下
- 配置Hadoop环境变量
- 配置主机名和IP的映射关系
(3)权限不足解决方案
org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode="/baizhi":root:supergroup:drwxr-xr-x
1)配置 hdfs-site.xml
将权限检查关闭
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
2)方案2
-DHADOOP_USER_NAME=root
3)方案3
System.setProperty("HADOOP_USER_NAME", "root");
(3)相关操作
package com.baizhi.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.theories.suppliers.TestedOn;
import sun.awt.geom.AreaOp;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class App {
private Configuration configuration;
private FileSystem fileSystem;
@Before
public void getClient() throws Exception {
System.setProperty("HADOOP_USER_NAME", "root");
/*
* 准备配置对象
* */
configuration = new Configuration();
/*
* 添加相应的配置文件*/
configuration.addResource("core-site.xml");
configuration.addResource("hdfs-site.xml");
/*
* 通过FileSystem.newInstance 获得客户端对象*/
fileSystem = FileSystem.newInstance(configuration);
}
@Test
public void testUpload01() throws Exception {
/*
*
* 源文件 | 目标文件
* Path 对象
* */
fileSystem.copyFromLocalFile(new Path("G:\\A.docx"), new Path("/baizhi/2.docx"));
}
@Test
public void testUpload02() throws Exception {
/*
* 准备 本地输入流
* */
FileInputStream inputStream = new FileInputStream("G:\\A.docx");
/*
* 准备 hdfs 输出流
* */
FSDataOutputStream outputStream = fileSystem.create(new Path("/baizhi/3.docx"));
/*
* 使用工具类进行拷贝
* */
IOUtils.copyBytes(inputStream, outputStream, 1024, true);
}
@Test
public void testDownload01() throws Exception {
fileSystem.copyToLocalFile(false, new Path("/1.txt"), new Path("G:\\3.txt"), true);
}
@Test
public void testDownload02() throws Exception {
FileOutputStream outputStream = new FileOutputStream("G:\\4.txt");
FSDataInputStream inputStream = fileSystem.open(new Path("/1.txt"));
IOUtils.copyBytes(inputStream, outputStream, 1024, true);
}
@Test
public void test011() throws IOException {
RemoteIterator<LocatedFileStatus> list = fileSystem.listFiles(new Path("/"), true);
while (list.hasNext()) {
LocatedFileStatus locatedFileStatus = list.next();
Path path = locatedFileStatus.getPath();
System.out.println(path.toString());
}
}
@Test
public void test02() throws Exception{
fileSystem.delete(new Path("/baizhi"),false);
}
@Test
public void test03() throws Exception{
boolean exists = fileSystem.exists(new Path("/1.txt"));
if (exists){
System.out.println("文件存在");
}else {
System.out.println("文件不存在");
}
}
@Test
public void testy04() throws Exception{
fileSystem.mkdirs(new Path("/baizhi1243"));
}
}
转载:https://blog.csdn.net/weixin_44824330/article/details/102213194