第一讲:大数据基础入门

第一节:为什么要学习大数据
	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
		<!--配置HDFS的冗余度-->
		<property>
		  <name>dfs.replication</name>
		  <value>1</value>
		</property>

		<!--配置是否检查权限-->
		<property>
		  <name>dfs.permissions</name>
		  <value>false</value>
		</property>	

	(2)core-site.xml
		<!--配置HDFS的NameNode-->
		<property>
		  <name>fs.defaultFS</name>
		  <value>hdfs://192.168.88.11:9000</value>
		</property>

		<!--配置DataNode保存数据的位置-->
		<property>
		  <name>hadoop.tmp.dir</name>
		  <value>/root/training/hadoop-2.4.1/tmp</value>
		</property>		
		
		
	(3) mapred-site.xml
		<!--配置MR运行的框架-->
		<property>
		  <name>mapreduce.framework.name</name>
		  <value>yarn</value>
		</property>		
		
	(4) yarn-site.xml
		<!--配置ResourceManager的地址-->
		<property>
		  <name>yarn.resourcemanager.hostname</name>
		  <value>192.168.88.11</value>
		</property>

		<!--配置NodeManager执行任务的方式-->
		<property>
		  <name>yarn.nodemanager.aux-services</name>
		  <value>mapreduce_shuffle</value>
		</property>		
		
	(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<LongWritable, Text, Text, LongWritable> {

	@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<Text, LongWritable, Text, LongWritable>{

	@Override
	protected void reduce(Text k3, Iterable<LongWritable> 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

更多推荐

入门大数据基础知识了解