第一讲:大数据基础入门
第一节:为什么要学习大数据
1、目的:很好工作
2、对比:Java开发和大数据开发
第二节:什么是大数据?
举例:
1、商品推荐: 问题:(1)大量的订单如何存储? (2)大量的订单如何计算?
2、天气预报: 问题:(1)大量的天气数据如何存储?(2)大量的天气数据如何计算?
什么是大数据,本质?
(1)数据的存储:分布式文件系统(分布式存储)
(2)数据的计算:分布式计算
第三节:Java和大数据是什么关系?
1、Hadoop:基于Java语言开发
2、Spark: 基于Scala语言,Scala基于Java语言
第四节:学习大数据需要的基础和路线
1、学习大数据需要的基础:Java基础(JavaSE)---> 类、继承、I/O、反射、泛型*****
Linux基础(Linux的操作) ---> 创建文件、目录、vi编辑器***
2、学习路线:
(1)Java基础和Linux基础
(2)Hadoop的学习:体系结构、原理、编程
(*)第一阶段:HDFS、MapReduce、HBase(NoSQL数据库)
(*)第二阶段:数据分析引擎 ---> Hive、Pig
数据采集引擎 ---> Sqoop、Flume
(*)第三阶段:HUE:Web管理工具
ZooKeeper:实现Hadoop的HA
Oozie: 工作流引擎
(3)Spark的学习
(*)第一个阶段:Scala编程语言
(*)第二个阶段:Spark Core-----> 基于内存,数据的计算
(*)第三个阶段:Spark SQL -----> 类似Oracle中的SQL语句
(*)第四个阶段:Spark Streaming ---> 进行实时计算(流式计算):比如:自来水厂
(4)Apache Storm:类似Spark Streaming ---> 进行实时计算(流式计算):比如:自来水厂
(*)NoSQL:Redis基于内存的数据库
第二课:Hadoop的背景起源一: GFS: Google File System
一、什么是大数据,本质?
(1)数据的存储:分布式文件系统(分布式存储)-----> HDFS: Hadoop Distributed File System
(2)数据的计算:分布式计算
二、如何解决大数据的存储?----> 分布式文件系统(HDFS,来源于GFS)
举例:网盘
(1) GFS: 没有硬盘的,数据只能存在内存中
(2) Hadoop的安装模式
(*)本地模式 :1台
(*)伪分布模式:1台
(*)全分布模式:3台
第三课:Hadoop的背景起源二:MapReduce
一、什么是大数据,本质?
(1)数据的存储:分布式文件系统(分布式存储)-----> HDFS: Hadoop Distributed File System
(2)数据的计算:分布式计算
二、如何解决大数据的计算?分布式计算
(1)什么是PageRank(MapReduce的问题的来源)
(*) 搜索排名
(2)MapReduce(Java语言实现)基础编程模型: 把一个大任务拆分成小任务,再进行汇总
(*) 更简单一点例子
第四课:Hadoop的背景起源三 : BigTable ----> 大表 ----> NoSQL数据库:HBase
第一节:关系型数据库(Oracle、MySQL、SQL Server)的特点
1、什么是关系型数据库?基于关系模型(基于二维表)所提出的一种数据库
2、ER(Entity-Relationalship)模型:通过增加外键来减少数据的冗余
3、举例:学生-系
第二节:什么是BigTable?: 把所有的数据保存到一张表中,采用冗余 ---> 好处:提高效率
1、因为有了bigtable的思想:NoSQL:HBase数据库
2、HBase基于Hadoop的HDFS的
3、描述HBase的表结构
第五课:搭建Hadoop的环境
准备实验的环境:
1、安装Linux、JDK
2、配置主机名、免密码登录
3、约定:安装目录:/root/training
安装:
1、解压 : tar -zxvf hadoop-2.4.1.tar.gz -C /root/training/
2、设置环境变量: vi ~/.bash_profile
HADOOP_HOME=/root/training/hadoop-2.4.1
export HADOOP_HOME
PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export PATH
生效环境变量: source ~/.bash_profile
第一节:Hadoop的目录结构
第二节:Hadoop的本地模式
1、特点:不具备HDFS,只能测试MapReduce程序
2、修改hadoop-env.sh
修改第27行:export JAVA_HOME=/root/training/jdk1.7.0_75
3、演示Demo: $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar
命令:hadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount /root/data/input/data.txt /root/data/output/wc
日志:17/08/04 23:28:38 INFO mapreduce.Job: map 100% reduce 100%
注意:MR有一个默认的排序规则
第三节:Hadoop的伪分布模式
1、特点:具备Hadoop的所有功能,在单机上模拟一个分布式的环境
(1)HDFS:主:NameNode,数据节点:DataNode
(2)Yarn:容器,运行MapReduce程序
主节点:ResourceManager
从节点:NodeManager
2、步骤:
(1)hdfs-site.xml
dfs.replication
1
dfs.permissions
false
(2)core-site.xml
fs.defaultFS
hdfs://192.168.88.11:9000
hadoop.tmp.dir
/root/training/hadoop-2.4.1/tmp
(3) mapred-site.xml
mapreduce.framework.name
yarn
(4) yarn-site.xml
yarn.resourcemanager.hostname
192.168.88.11
yarn.nodemanager.aux-services
mapreduce_shuffle
(5) 格式化NameNode
hdfs namenode -format
日志:Storage directory /root/training/hadoop-2.4.1/tmp/dfs/name has been successfully formatted.
(6) 启动:start-all.sh
(*) HDFS: 存储数据
(*) Yarn:执行计算
(7) 访问:(*)命令行
(*)Java API
(*)Web Console:
HDFS:http://192.168.88.11:50070
Yarn:http://192.168.88.11:8088
第六讲:HDFS的基本操作
第一节:HDFS的相关命令
-mkdir 在HDFS创建目录 hdfs dfs -mkdir /data
-ls 查看当前目录 hdfs dfs -ls /
-ls -R 查看目录与子目录
-put 上传一个文件 hdfs dfs -put data.txt /data/input
-moveFromLocal 上传一个文件,会删除本地文件:ctrl + X
-copyFromLocal 上传一个文件,与put一样
-copyToLocal 下载文件 hdfs dfs -copyToLocal /data/input/data.txt
-get 下载文件 hdfs dfs -get /data/input/data.txt
-rm 删除文件 hdfs dfs -rm /data/input/data.txt
-getmerge 将目录所有的文件先合并,再下载
-cp 拷贝: hdfs dfs -cp /data/input/data.txt /data/input/data01.txt
-mv 移动: hdfs dfs -mv /data/input/data.txt /data/input/data02.txt
-count 统计目录下的文件个数
-text、-cat 查看文件的内容 hdfs dfs -cat /data/input/data.txt
-balancer 平衡操作
第二节:HDFS的Java API
(*)在HDFS上创建一个目录:
依赖的jar包:
/root/training/hadoop-2.4.1/share/hadoop/common/lib
/root/training/hadoop-2.4.1/share/hadoop/common/
/root/training/hadoop-2.4.1/share/hadoop/hdfs/lib
/root/training/hadoop-2.4.1/share/hadoop/hdfs/
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class TestMain {
public static void main(String[] args) throws Exception {
// 使用HDFS的API创建目录
//设置NameNode地址
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://192.168.88.11:9000");
//得到HDFS的文件系统
FileSystem fs = FileSystem.get(conf);
fs.mkdirs(new Path("/folder1"));
}
}
第七讲:MapReduce入门
第一节:回顾:MapReduce的编程模型
第二节:WordCount的流程分析
1、伪分布环境运行WordCount
hadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount /data/input/data.txt /data/output/wc
日志:
17/08/05 01:12:24 INFO mapreduce.Job: map 0% reduce 0%
17/08/05 01:12:30 INFO mapreduce.Job: map 100% reduce 0%
17/08/05 01:12:35 INFO mapreduce.Job: map 100% reduce 100%
2、分析的数据流动的过程(重要): 运行原理和机制
第八课:开发WordCount程序
依赖jar:
/root/training/hadoop-2.4.1/share/hadoop/common/lib
/root/training/hadoop-2.4.1/share/hadoop/common/
/root/training/hadoop-2.4.1/share/hadoop/mapreduce/lib
/root/training/hadoop-2.4.1/share/hadoop/mapreduce/
package demo;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCountMain {
public static void main(String[] args) throws Exception {
//创建一个job = map + reduce
Configuration conf = new Configuration();
//创建一个Job
Job job = Job.getInstance(conf);
//指定任务的入口
job.setJarByClass(WordCountMain.class);
//指定job的mapper
job.setMapperClass(WordCountMapper.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);
//指定job的reducer
job.setReducerClass(WordCountReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
//指定任务的输入和输出
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
//提交任务
job.waitForCompletion(true);
}
}
package demo;
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class WordCountMapper extends Mapper {
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
/*
* key: 输入的key
* value: 数据 I love Beijing
* context: Map上下文
*/
String data= value.toString();
//分词
String[] words = data.split(" ");
//输出每个单词
for(String w:words){
context.write(new Text(w), new LongWritable(1));
}
}
}
package demo;
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class WordCountReducer extends Reducer{
@Override
protected void reduce(Text k3, Iterable v3,Context context) throws IOException, InterruptedException {
//v3: 是一个集合,每个元素就是v2
long total = 0;
for(LongWritable l:v3){
total = total + l.get();
}
//输出
context.write(k3, new LongWritable(total));
}
}
第九课:Spark基础
第一节:什么是Spark?Spark的特点和结构
1、什么是Spark?
Spark是一个针对大规模数据处理的快速通用引擎。
类似MapReduce,都进行数据的处理
2、Spark的特点:
(1)基于Scala语言、Spark基于内存的计算
(2)快:基于内存
(3)易用:支持Scala、Java、Python
(4)通用:Spark Core、Spark SQL、Spark Streaming
MLlib、Graphx
(5)兼容性:完全兼容Hadoop
3、Spark体系结构:主从结构
(1)主节点:Master
(2)从节点:Worker
第二节:搭建Spark的伪分布模式环境
1、解压:tar -zxvf spark-2.1.0-bin-hadoop2.4.tgz -C ~/training/
2、配置参数文件: conf/spark-env.sh
export JAVA_HOME=/root/training/jdk1.7.0_75
export SPARK_MASTER_HOST=bigdata11
export SPARK_MASTER_PORT=7077
conf/slaves ----> 从节点的主机信息
bigdata11
3、启动Spark伪分布环境
sbin/start-all.sh
Spark Web Console: http://192.168.88.11:8080