收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 


嘟嘟是个宝的笔记
状态: 离线
人气:11084
访问用户量:68
笔记经验:
总积分:17329
级别:VIP3
搜索本笔记
ta的交流分类
ta的交流主题贴(1)
ta的所有交流贴(3)
ta的全部笔记
全部笔记(8)
未分类笔记(0)
课程笔记(8)
存档
2017-07(2)
2013-12(1)
2012-12(4)
2012-11(1)

2017-07-12 09:49:34
Hadoop实战-初级部分视频教程-视频教程学习笔记
浏览(536)|评论(123)   交流分类:学习问题讨论|笔记分类: 课程笔记

初始Hadoop 视频教程学习笔记
视频课程地址:Hadoop实战-初级部分视频教程
当前播放的视频地址:初始Hadoop

hadoop是apache基金会下的一个开源软件,
他提供了云平台的基础架构,
他使用户不了解分布式底层细节的情况下,更容易开发车处理大规模数据的软件平台
他包括: hdfs 和 mapreduce



初始Hadoop 笔记
Hadoop的优点
1.可扩展性:
2.经济: 在笔记本上跑
3.可靠: 很高的容错性,错误协调恢复机制
4.高效: 运算速度



初始Hadoop 笔记
Hadoop架构
1.pig有自己的一套元语,自动转为mapreduce;
2.hive 是一个数据仓库,提供类sql,把hadoop里的所有文件数据映射成 表;
3.hbase: 是一个分布式数据库
4.zookeeper: 是一个分布式协调框架
5. mapreduce
6. hdfs


初始Hadoop 笔记
hdfs: 是一个分布式的文件系统。把一个大的文件,每个机器上存一点;
hdfs特点:
1.高容错性
2.可以部署在廉价的硬件上
3.高吞吐量:主要表现在写入速度 和 读出速度,文件分块在网路上并行写入或者读取





初始Hadoop 笔记
mapreduce:是一个分布式计算模型。包括:
1. map: 用于处理数据
2. reduce:用于合并结果
map,reduce自动分配到各台机器上

初始Hadoop 笔记
cloudera:对hadoop打了补丁与测试
官网:http://www.cloudera.com

初始Hadoop 笔记
hadoop目前的应用:
国内有:淘宝,百度,互联网公司,电信行业,电力行业

初始Hadoop 笔记
小结:
1. hadoop是什么
2. hadoop的起源
3. hadoop的优点
4. hadoop在国内的应用



Hadoop Windows下伪分布式的安装 笔记
hdfs: 分布式文件系统
mapreduce: 分布式计算框架


Hadoop Windows下伪分布式的安装 笔记
hadoop提供了云平台的基础架构

Hadoop Windows下伪分布式的安装 笔记
在windows上进行 单节点伪分布式安装:
1.装jdk,配置环境变量
2.装cygwin 设钩win
网址: http://www.cygwin.com/setup.exe
3.装ssh
4.下载hadoop
5.配置hadoo
6.启动



Hadoop Windows下伪分布式的安装 笔记
安装cygwin,select packages:
1. devel Default下的openssl-devl大小 1,401k
2. editor Default下的vim
3. net Default下的openssh


Hadoop Windows下伪分布式的安装 笔记
启动sshd服务
1. 安装sshd
在cygwin中敲:ssh-host-config 根据提示一路输入yes,yes,yes

2. 启动sshd
在cygwin中敲:net start sshd

启动完成后,cmd > services.msc中看到一个叫“CYGWIN sshd”的服务并“已启动”状态


Hadoop Windows下伪分布式的安装 笔记
ssh的安装和配置
实现ssh无密码登录

在cygwin界面里面:
$ssh-keygen直接回车,完成后会在~/.ssh/生成两个文件:id_rsa 和 id_rsa.pub.这两个是成对出现,类似钥匙和锁。

拷贝到每个机器上,例如拷贝到本机器
$cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys

验证:
ssh localhost不需要再输入密码了

Hadoop Windows下伪分布式的安装 笔记
安装hadoop

在cygwin界面里:
1.下载http://labs.mop.com/apache-mirror/hadoop/common/hadoop-1.0.0/
2.解压hadoop
tar xzvf hadoop-1.0.0.tar.gz


Hadoop Windows下伪分布式的安装 笔记
配置hadoop
1.配置 hadoop-env.sh hadoop环境变量配置
2.配置
conf/core-site.xml
conf/hdfs-site.xml
conf/mapred-site.ml

概念
hdfs的节点: namenode,datanode,secondaryNamenode

mapreduce分两节点:
1. jobTracer: 任务管理节点
2. tasktracker: 任务运行节点




Hadoop Windows下伪分布式的安装 笔记
配置hadoop-env.sh
export JAVA_HOME=/cygdrive/c/JDK

配置完测试一下
sh hadoop.sh 没有反应证明可以了。

Hadoop Windows下伪分布式的安装 笔记
改core-site.xml



fs.default.name
hdfs://localhost:9000


fs.default.name的作用:表示我们访问hdfs需要通过localhost:9000端口来访问

Hadoop Windows下伪分布式的安装 笔记
改hdfs-site.xml



dfs.replication
1


dfs.replication的作用:表示数据备份的个数

Hadoop Windows下伪分布式的安装 笔记
配置mapred-site.xml



mapred.job.tracker
localhost:9001



mapred.job.tracker表示我们默认的jobtracker的端口是localhost:9001,我们通过这个端口去看我们的job

Hadoop Windows下伪分布式的安装 笔记
启动hadoop
1.格式化文件系统
hadoop namenode -format
2.启动hadoop
start-all.sh/stop-all.sh
start-dfs.sh/stop-dfs.sh
start-mapred.sh/stop-mapred.sh
3. jps查看启动进程
namenode,datanode,jobtracker,tasktracker


Hadoop Windows下伪分布式的安装 笔记
http://localhost:50070 查看namenode相关

http://localhost:50030 查看jobtracker

Hadoop Linux下伪分布式的安装 笔记
在linux上进行单节点伪分布式安装
1.JDK 、
2.SSH 、
3.SSHD服务 、
4.Hadoop的配置等。

Hadoop Linux下伪分布式的安装 笔记
jdk:
下载jdk-6u27-linux-i586.bin
安装: sh jdk-6u27-linux-i586.bin 其实就是一个解压的过程
配置环境变量:
vi /home/.bashrc
export JAVA_HOME=...
export PATH=/bin:$JAVA_HOME/bin:/usr/bin:$PATH:.
然后. .bashrc使配置生效



Hadoop Linux下伪分布式的安装 笔记
ssh安装和配置(ubuntu系统)
1. sudo apt-get install ssh
2. ssh-keygen
3. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Hadoop Linux下伪分布式的安装 笔记
hadoop安装
1.下载hadoop
http://labs.mop.com/apache-mirror/hadoop/common/hadoop-1.0.1/
2.解压hadoop
tar xzvf hadoop-0.21.0.tar.gz
3.添加hadoop bin到环境变量中



Hadoop Linux下伪分布式的安装 笔记
配置hadoop

hadoop-env.sh中加jdk

export JAVA_HOME=xxxxxx

Hadoop Linux下伪分布式的安装 笔记
sh hadoop-env.sh看看有没有返回,没有证明配置ok

Hadoop Linux下伪分布式的安装 笔记
配置conf/core-site.xml


fs.default.name
hdfs://localhost:9000



Hadoop Linux下伪分布式的安装 笔记
配置conf/hdfs-site.xml


dfs.replication
1


dfs.replication代表复制的文件只要1份儿(错误冗余的功能,一个机器down掉,不会导致数据丢失),因为我们只有一台机器


Hadoop Linux下伪分布式的安装 笔记
配置conf/mapred-site.xml


mapred.job.tracker
hdfs://localhost:9001




Hadoop Linux下伪分布式的安装 笔记
启动hdfs
1. top -fn 1000 logs/xxxcommon.log
2. start-dfs.sh
http://localhost:50070
3. start-mapred.sh
http://localhost:50030

Hadoop Linux下伪分布式的安装 笔记
Hadoop UI
1.job tracker管理界面: 50030
2.hdfs管理界面: 50070
3.hdfs通信端口:9000
4.mapreduce通信端口:9001


Hadoop Linux下伪分布式的安装 笔记
常用的访问界面:
1. hdfs界面
http://hostname:50070
2. mapreduce管理界面
http://hostname:50030

Hadoop Linux下伪分布式的安装 笔记
wordcount演示
1. 创建两个文件input/file1和inputfile2
echo "hello world bye world" >> ~/input/file1
echo "hello hadoop bye hadoopbye " >> ~/input/file2

2.在hdfs上新建一个目录:input
hadoop fs -mkdir /tmp/input

3.将file1 file2上传到input目录下
hadoop fs -put input/* /tmp/input

4.检查hdfs上有没有file1 file2
hdfs fs -ls /tmp/input

5.执行worrcount
hadoop jar hadoop-examples-1.0.0.jar wordcount /tmp/input /tmp/output

6.运行完成,查看结果
hadoop fs -cat /output/part-r-00000

Hadoop Shell 笔记
Hadoop的bin下所有脚本介绍
1.hadoop
hadoop shell
2.hadoop-config.sh
对一些变量赋值

3.hadoop-daemon.sh
针对单个节点的操作
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode

4.
5.


Hadoop Shell 笔记
hadoop daemonsh start jobtracker
hadoop daemonsh start tasktracker



Hadoop Shell 笔记
hadoop-daemon.sh stop命令
hadoop-daemon.sh stop datanode
hadoop-daemon.sh stop namenode
hadoop-daemon.sh stop tasktracker
hadoop-daemon.sh stop jobtracker

4. hadoop-daemons.sh
会调用slaves.sh启动所有的机器上的
5. start-all.sh
6. start-balancer.sh
做负载均衡的,可以把数据多的节点上的数据拿到别的机器上,比较占带宽
7. start-dfs.sh
8. start-jobhistoryserver.sh
9. start-mapred.sh
10.stop-all.sh
11.stop-balancer.sh
12.stop-dfs.sh
13.stop-jobhistoryserver.sh
14.stop-mapred.sh

Hadoop Shell 笔记
hadoop Shell命令 基本操作演示

1.hadoop namenode -format
这个命令不要随便使,格式化硬盘一样,清理脏数据

2.
hadoop secondarynamenode
hadoop namenode
hadoop datanode

3.
hadoop dfsadmin 是dfs管理的客户端
hadoop mradmin

4.hadoop fsck 磁盘整理检测命令
hadoop fsck /

5.hadoop fs
hadoop fs /

6.hadoop pipes 运行c++代码写的job

7.hadoop version 版本
8.hadoop distcp 集群之间文件的拷贝,这个命令需要开着mapreduce进程才能使用

hadoop fs ls /
hadoop fs -put file1 /tmp/test
hadoop fs -put file2 /tmp/test
hadoop fs -ls file2 /tmp/test
hadoop distcp "hdfs://localhost:9000/tmp/test" "hdfs://localhost:9000/tmp/test2"

注意:
这里必须使用绝对路径
test2要是没有,mapreduce会自动创建

9. hadoop archive 打包成.har结尾的
10. hadoop classpath 打印出hadoop依赖的所有jar包
11. hadoop daemonlog 获取/设置日志级别
hadoop daemonlog -getlevel 127.0.0.1:50070 namenode








Hadoop分布式文件系统 笔记
hdfs是什么?
hadf是一个分布式文件系统。
特点:
1. 高容错性
2. 部署在低成本的硬件上
3. 高吞吐量对数据访问
4. 适合大数据集的应用程序


Hadoop分布式文件系统 笔记
hdfs架构设计
namenode ,datanodes

Hadoop分布式文件系统 笔记
hdfs设计目标
1.假设几点失效是常态
1. 目标任何一个节点失效都不影响hdfs的使用
2. hdfs可以自动完成 副本的复制
2.简单一致性模型,假设write-once-read-many模式
hdfs架构的很简单
3.流式数据访问
学java的都知道
4.不支持文件的并发写入
加锁的代价大
5..不支持文件修改
文件的修改是效率非常低的事情
6. 轻便地访问 不同的软硬件平台
就是 跨平台

Hadoop分布式文件系统 笔记
hdfs不适合做什么?
1.存储小文件
占内存
2.大量随机读
磁盘io是一个瓶颈,而且分散在多个机器上,找很麻烦
3.需要对文件修改

Hadoop分布式文件系统 笔记
hdfs的一些角色:
1. namenode名字节点
存元数据:元数据 保存在 内存中 与 磁盘上
存文件: block和dataNode之间的映射关系
2. datanode
存文件内容:文件内容保存在磁盘上,
维护block id到datanode本地文件的映射关系
3. secondaryNameNode
将namenode 的fsimage与edit log从namenode 复制到临时目录
将fsimage 同 edit log 合并 并 产生新的fsimage
将产生的新的fsimage上传给nameNode
清除nameNode中的edit log


Hadoop分布式文件系统 笔记
block块:

block: hdfs默认的最基本的存储单位默认大小是64M.


Hadoop分布式文件系统 笔记
hdfs命令行接口:
1. start-hdfs.sh
2. http://localhost:50070
3. hadoop fs -ls /
hadoop fs -ls /tmp
4. hadoop fs -lsr / 递归全显示出来
5. hadoop fs -du /tmp 各文件大小
6. hadoop fs -dus /tmp 文件总大小
7. hadoop fs -count /tmp 文件个数




Hadoop分布式文件系统 笔记
hdfs命令行接口 - 文件操作的命令
hadoop fs -help mv
1. hadoop fs -mv
2. hadoop fs -cp
3. -rm
-rmr



Hadoop分布式文件系统 笔记
与本地文件系统打交道
1. hadoop fs -put file1 dirA
hadoop fs -put dir1/* dirA
2. hadoop fs -get
hadoop fs -getmerge
3. hadoop fs -setrep
设置备份个数

Hadoop分布式文件系统 笔记
hadoop dfsadmin命令

-report
hadf磁盘使用情况

-safemode enter|leave|get|wait
进入离开安全模式

-savenamespace
强制写入磁盘

-setSpaceQuota 数字 文件夹
-clrSpaceQuota 文件夹
命名空间的配额

Hadoop分布式文件系统 笔记
目前hadoop支持的文件系统
1.kfs
一个c++编写的文件系统 叫 cloudstoe 类似hdfs
2. s3(本地)
Amazon S3支持的文件系统
3.s3(基于块)
Amazon S3支持的文件系统,以块格式来存储文件
4.har
一个构建于其他文件系统来存档的文件系统



HDFS开发 笔记
概览
1.搭建hdfs的开发环境
2.Configuration
3.Filesystem api
4.FileUtilAPI



HDFS开发 笔记
搭建开发环境
1.导入hadoop的jar
2.建立resources文件夹,放入配置文件



HDFS开发 笔记

虚机中打开eclipse
1.新建一个java工程: MyHDFS
2.导jar:
3.建resource文件夹: new > source文件夹,拷入 core-site.xml




fs.default.name
hdfs://localhost或者远端的:9000



HDFS开发 笔记
注意点:创建resource目录的时候,一定要选source folder而不是folder

HDFS开发 笔记
configuration
1.import org.apache.hadoop.conf.Configuration;
2.main方法:
1. Configuration conf = new Configuration();
2. syso(conf.get("fs.default.name"));



HDFS开发 笔记
自定义的配置文件
configuration
1.import org.apache.hadoop.conf.Configuration;
2.main方法:
1. Configuration conf = new Configuration();
2. syso(conf.get("fs.default.name"));
*3. conf.addResource("myconf.xml");
*4. syso(conf.get("xxxx"));

conf.get
conf.getInt


HDFS开发 笔记
自定义的配置文件
configuration 一般只需要拿一遍
1.import org.apache.hadoop.conf.Configuration;
2.private static Configuration conf = null;
3. static{
conf = new Configuration();
conf.addResource("myconf.xml");
}
2.main方法:
1 . syso(conf.get("fs.default.name"));
2. syso(conf.get("xxxx"));

conf.get
conf.getInt


HDFS的API-1 笔记
FileSystem
该类为HDFS文件系统的抽象类,通过她可以在java端操作HDFS.

HDFS的API-1 笔记
基本操作
1. 创建文件

1.
import org.apache.hadoop.conf.Configuration;
private static Configuration conf = null;
static{
conf = new Configuration();
conf.addResource("myconf.xml");
}
*2.main方法:
FileSystem fs = null;
FSDataOutputStream fsos = null;

Path path2 = new Path("/testfirst/test/test1.txt"); //会递归的创建
fs = Filesystem.get(conf);
fsos= fs.create(path2);
fsos.close();
fs.close();



HDFS的API-1 笔记
基本操作
2. 往文件里写点东西

1.
import org.apache.hadoop.conf.Configuration;
private static Configuration conf = null;
static{
conf = new Configuration();
conf.addResource("myconf.xml");
}
*2.main方法:
FileSystem fs = null;
FSDataOutputStream fsos = null;

Path path2 = new Path("/testfirst/test/test1.txt"); //会递归的创建,默认会覆盖文件
fs = Filesystem.get(conf);
fsos= fs.create(path2);
fsos.writeBytes("strContent");
fsos.close();
fs.close();


HDFS的API-1 笔记
基本操作
2. 往文件里写点东西 - 设置备份块数

1.
import org.apache.hadoop.conf.Configuration;
private static Configuration conf = null;
static{
conf = new Configuration();
conf.addResource("myconf.xml");
}
*2.main方法:
FileSystem fs = null;
FSDataOutputStream fsos = null;

Path path2 = new Path("/testfirst/test/test1.txt");
fs = Filesystem.get(conf);
fsos= fs.create(path2,1);//默认备份3份,这里改为1
fsos.writeBytes("strContent");
fsos.close();
fs.close();


HDFS的API-1 笔记
基本操作
2. 往文件里写点东西 - 如果文件已存在会发生什么?
看overwrie参数 :
true: 默认,覆盖文件
false: 文件已存在会抛出异常

1.
import org.apache.hadoop.conf.Configuration;
private static Configuration conf = null;
static{
conf = new Configuration();
conf.addResource("myconf.xml");
}
*2.main方法:
FileSystem fs = null;
FSDataOutputStream fsos = null;

Path path2 = new Path("/testfirst/test/test1.txt"); //会递归的创建,默认会覆盖文件
fs = Filesystem.get(conf);
fsos= fs.create(path2, false); //overwrite改为false时候,文件已存在会抛异常
fsos.writeBytes("strContent");
fsos.close();
fs.close();


HDFS的API-1 笔记
基本操作
3. 创建文件夹

1.
import org.apache.hadoop.conf.Configuration;
private static Configuration conf = null;
static{
conf = new Configuration();
conf.addResource("myconf.xml");
}
*2.main方法:
FileSystem fs = null;
FSDataOutputStream fsos = null;

Path path2 = new Path("/testfirst/dir2/dir3"); //会递归的创建文件夹,不需要关心文件夹已存在
fs = Filesystem.get(conf);
boolean b = fs.mkdir(path2);

fs.close();


HDFS的API-2 笔记
删除文件

//1. get file system instance
//2. delete file or folder by path
fileSystem fs = null;
try{
fs = FileSystem.get(conf);
boolean flag = fs.delete(new Path("文件或者文件夹路径名称"), false); //false表示不递归删除
}
catch..
finally{
fs.colse();

HDFS的API-2 笔记
写入文件
hdfs只支持在文件末尾追加文件,不支持随意在文件内修改,所以api中叫append

//1. get filesystem instance
//2. 使用append方法打开文件,
//3. 配置文件中添加dfs.support.append属性设置,使支持append

dfs.support.append
true

//4. append方法会返回一个FSDataOutputStream流
//5. 使用write方法写入文件


HDFS的API-2 笔记
写入文件
hdfs只支持在文件末尾追加文件,不支持随意在文件内修改,所以api中叫append

//1. get filesystem instance
FileSystem fs = null;
fs = FileSystem.get(conf);
//2. 使用append方法打开文件,
FSOutputStream os = fs.append(new Path("/test/testreadfile.txt"));
//3. 配置文件中添加dfs.support.append属性设置,使支持append

dfs.support.append
true

//4. append方法会返回一个FSDataOutputStream流
//5. 使用write方法写入文件
os.write("my strContent");
//6. close
os.close
fs.close

HDFS的API-2 笔记
读文件
1.get fs instance
FileSystem fs = null;
fs = FileSystem.get(conf);
2.call fs's open()
FSDataIutputStream fsDis= fs.open(new Path("/test/testreadfile.txt"));
3.FSDataIutputStream .read()
Text line = new Text();
LineReader lr = new LineReader(fsdIs);
while(lr.readLine(line) > 0){
syso(line);
}
4. close
fsDis.close
fs.close





HDFS的API-2 笔记
修改文件名
Path old = new Path("/路径/文件或者文件夹名oldFileName");
Path new = new Path("/路径/文件或者文件夹名newFileName");
boolean b = fs.rename(old, new);

HDFS的API-3 笔记
移动与复制文件/文件夹


HDFS的API-3 笔记
copyFromLocal
//1. get fs
fs = FileSystem.get(conf);
//2. call copy from local
fs.copyFromLocalFile(new Path("/home/xx/xx.txt"),new Path("/yy/"));
或者
fs.copyFromLocalFile(new Path("/home/xx/xx.txt"),new Path("/yy/xx2.txt"));

HDFS的API-3 笔记
copyFromLocal - 删除本地文件
//1. get fs
fs = FileSystem.get(conf);
//2. call copy from local
fs.copyFromLocalFile(true, new Path("/home/xx/xx.txt"),new Path("/yy/xx2.txt")); // true 表示删除本地文件


HDFS的API-3 笔记
copyFromLocal - 是否覆盖hdfs上的文件
//1. get fs
fs = FileSystem.get(conf);
//2. call copy from local
fs.copyFromLocalFile(false,true, new Path("/home/xx/xx.txt"),new Path("/yy/xx2.txt")); // false 表示不删除本地文件,第二个true表示覆盖hdfs上的文件


HDFS的API-3 笔记
copyFromLocal - 拷贝多个文件到hdfs上
//1. get fs
fs = FileSystem.get(conf);
//2. call copy from local
fs.copyFromLocalFile(false,true, 数组{new Path("/home/xx/xx.txt"),new Path("/home/xx/xx2.txt")},new Path("/yy/xx/"));

HDFS的API-3 笔记
copyToLocal - 拷贝到本地磁盘上
//1. get fs
fs = FileSystem.get(conf);
//2. call copy to local
fs.copyToLocalFile(new Path("/xx/xx.txt"),new Path("/home/yy/"));

HDFS的API-3 笔记
copyToLocal - 拷贝到本地磁盘上,并删除源文件
默认是不删除源文件,并且覆盖目标文件

//1. get fs
fs = FileSystem.get(conf);
//2. call copy to local
fs.copyToLocalFile(true, new Path("/xx/xx.txt"),new Path("/home/yy/"));

HDFS的API-3 笔记
moveFromLocal / moveToLocal

//1.get filesystem instance
//2.call moveFromeLocalFile

fs = FileSystem.get(conf);
fs.moveFromLocalFile(new Path("/home/test/localfile.txt"),new Path("/copy目录"));

HDFS的API-3 笔记
moveFromLocal 挪多个文件

//1.get filesystem instance
//2.call moveFromeLocalFile

fs = FileSystem.get(conf);
fs.moveFromLocalFile(数组{new Path("/home/test/localfile.txt"), 数组{new Path("/home/test/localfile2.txt")},new Path("/copy目录"));

HDFS的API-3 笔记
moveToLocalFile(new Paht("/xx/xx.txt"),new Path("/home/yy/"));

HDFS的API-4 笔记
1. 获取文件系统状态
2. 获取文件属性

HDFS的API-4 笔记
1. 获取文件系统相关信息
FileSystem fs = FileSystem.get(conf);
fs.getDefaultBlockSize();// 看看文件系统默认块大小
fs.getUri();//其实就是 fs.default.name属性
fs.getDefaultReplication(); //备份数
fs.getWorkingDirectory(); // 工作目录
fs.getHomeDirectory(); // 家目录


HDFS的API-4 笔记
2. 获取文件相关信息
FileSystem fs = FileSystem.get(conf);

Path path = new Path("xxx");
for(FileStatus fileStatus : fs.listStatus(path)){
syso(fileStatus.getPath().toString());
syso(fileStatus.getOwner()));
syso(fileStatus.getBlockSize()));
syso(fileStatus.getLen()));
}

finally{
fs.colose()
}

HDFS的API-4 笔记
3. 获取Path属性
Path path = new Path("xxx");
path.depth()
path.getName()
path.getParent()
path.toString()
path.toUri() //转成Uri类


FileUtil API详解 笔记
FileUtil API
1.移动和复制文件、文件夹
2.合并文件
3.完全删除

import org.apache.hadoop.fs.FileUtil


FileUtil API详解 笔记
FileSystem fs = null;
fileUtil fu = new FileUtil();
fs = FileSystem.get(conf); //catch io exp
File f = new File("xx");
fu.copy(f, fs, new Path("/dest"), false, conf);//false表示不删除本地的文件


FileUtil API详解 笔记
默认不会覆盖,已存在会抛异常



FileUtil API详解 笔记
拷贝到本地系统

FileSystem fs = null;
fileUtil fu = new FileUtil();
fs = FileSystem.get(conf); //catch io exp
File f = new File("xx");
fu.copy(fs, new Path("/test/xx.txt"), f, false, conf);//false表示是否删除源文件


FileUtil API详解 笔记
从一个文件系统 拷贝到 另一个文件系统

FileSystem fs = null;
fileUtil fu = new FileUtil();
fs = FileSystem.get(conf); //catch io exp
fu.copy(fs, new Path("/test/xx.txt"),fs, new Path("/test1"), false, conf);//false表示是否删除源文件,注意目标文件夹必须要预先建立!!!


FileUtil API详解 笔记
合并后,拷贝到 另一个文件系统

FileSystem fs = null;
fileUtil fu = new FileUtil();
fs = FileSystem.get(conf); //catch io exp
fu.copyMerge(fs, new Path("/test"),fs, new Path("/test1"), false, conf);//false表示是否删除源文件,注意目标文件夹必须要预先建立!!!

/test1/目录下将会有一个test的文件,内容为原先/tet目录下所有文件的内容


FileUtil API详解 笔记
删除本地文件、文件夹

FileUtil.fullyDelete(new File("/home/test/文件夹"));

MapReduce的概念,架构执行流程 笔记
1.什么是mapreduce?

2.mapreduce的架构设计

3.配置开发环境

3.词频统计

MapReduce的概念,架构执行流程 笔记
1.什么是mapreduce?

hadoop mapreduce是一个简单的框架,聚合和规约两个部分,map进行处理,reduce进行合并,少写代码,提高实现业务的功能,不用关心容错处理。

一框西红柿,一筐鸡蛋 ->1千人清洗 ->1千人分解:切块,蛋液-》炒

归并: 归约 -》 合并

MapReduce的概念,架构执行流程 笔记
2.mapreduce架构?

物理架构
map集群,reduce集群,中控服务器,结果计算的机器

mapreduce执行流程
两个中间过程:
split分片: 讲 input file 分块,按split后的分块数启动相同个数的map
shffle洗牌:讲map结果发送到reduce上



MapReduce的概念,架构执行流程 笔记
术语
job作业: 用户提交的一个请求
jobTracker: 用户提交作业的服务器,同时,他还负责各个作业任务的分批额,管理所有 任务服务器

taskTracker: 任劳任怨的工蜂,负责执行 具体的任务
task: 每一个作业job都需要拆分开了,交由多个服务器来完成,拆分出来的执行单位,就称为 任务。

MapReduce的概念,架构执行流程 笔记
作业提交流程

1. client program -> submit job -> job tracker

2. job tracker 与 task tracker 沟通: Provide task to task tracker, co-ordinate map & reduce phase, Provide job progress info

map phase:
task tracker: DFS -> inputformat ->map()->RAM combine()partion() -> region1,region2

reduce phase:
task tracker: read sort reduce() outputformat -> DFS



MapReduce的概念,架构执行流程 笔记
配置开发环境
1.tool,toolRunner介绍
2.配置文件管理
3.eclipse开发环境搭建



MapReduce的概念,架构执行流程 笔记
1. 用tool来实现打印所有配置的所有属性
2. 介绍ToolRunner

MapReduce的概念,架构执行流程 笔记
打印出所有配置信息

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.util.Tool;

public class TestTool extends Configuration impliments Tool {

private static Configiguration conf = null;

static {
conf = new Configuration();
conf.addResource("myconf.xml");
}

@Override
public int run(String[] args0) throws Exception {
for(Entry e: conf){
syso(e.getKey() + e.getValue());
}
return 0;
}

public static void main(){
int exitCode = ToolRunner.run(new TestTool(), args);
System.exit(exitCode);
}
}

MapReduce的概念,架构执行流程 笔记
配置文件管理
1.可以在运行job时使用-conf指定要使用的配置文件,在几套配置文件中来回的切换,这样可以合理管理测试环境,生产环境所需的配置文件
示例:
hadoop-local.xml
hadoop-localhost.xml
2.hadoop fs -conf 文件名 常看相应的配置




MapReduce的概念,架构执行流程 笔记
演示动态切换配置文件
1.在hadoop-1.0.0/conf目录下拷贝一份core-site.xml为hadoop-local.xml,并修改为:


fs.default.name
file:///


mapred.job.tracker
local


2. 切换 hadoop fs -conf hadoop-local.xml -ls
3. 切换 hadoop fs -conf core-size.xml -ls


MapReduce的概念,架构执行流程 笔记

1.再添加一个配置文件mapred.xml,从hadoop中拷贝过来


MapReduce的概念,架构执行流程 笔记
了解如何搭建MapReduce的Eclipse的开发环境?
1.从hadoop中拷贝一个mapred.xml过来即可


MapReduce的概念,架构执行流程 笔记
磁盘统计
1.方法1,传统方法,for循环
2.方法2,多线程处理
3.方法3,把方法1的代码放到多台机器上,把论文分成n份,每台机器跑一个作业
部署麻烦:
需要人工把论文集分成N份,或者写一个程序
需要人工把程序拷贝到各台机器上,或者写一个程序
需要人工的把n个结果进行整合,或者写一个程序
4.方法4,让mapReduce来帮帮我们把!

MapReduce的概念,架构执行流程 笔记
map函数: 接受一组键值对,返回一组键值对
reduce函数: 接受一个键,以及相关的一组值,将这组值进行合并,产生一组规模更小的值(通常只有一个或零个值)


MapReduce的概念,架构执行流程 笔记
小结
1.什么事mapreduce?
一个框架,基于mapreduce思想
2.mapreduce架构设计?
job tracker + task tracker
3.运行事例代码: 词频统计
4.写一个wordCount的伪代码

MapReduce程序及API 笔记
什么是mapreduce?
1.是一个简单易用的开发框架,
2.通过map部分处理数据
3.reduce部分合并数据
4.使用他编写出来的应用程序能够运行在上千个商用机器组成的大型集群上
5.使用他编写出来的应用程序能够 以一种可靠容错的方式并行处理 上T级别的数据集


MapReduce程序及API 笔记
本节课程主要讲述:
1:Word Count程序讲解
Word Count程序逻辑讲解及编写。做第一个MapReduce程序。
2:Mapper API 介绍
了解了Mapper API的情况,及新老API的对比。
3:Reducer API 介绍
了解了Reducer API的情况,及新老API的对比。
4:Job 运行模式
介绍了Job的运行模式,如伪分布式,本地等。及如何配置。
5:伪分布式运行Word Count
伪分布式下实际运行Word Count,查看结果。感受MapReduce的能力。
6. 怎样将一些思想 转化为 mapreduce程序?

MapReduce程序及API 笔记
数据流
hello world bye hadoop ->map-> {hello,1}{world 1}{bye 1}{hadoop 1}
=>reduce=>
hello world bye world->map->{hello,1}{world 1}{bye 1}{world 1}





MapReduce程序及API 笔记
编写一个MapReduce程序的步骤
1.编写一个Mapper类
2.编写一个Reducer类
3.编写一个Driver类(即Job),来将Mapper与Reducer类进行组合



MapReduce程序及API 笔记
public class WordMapper extends MapReduceBase implements Mapper {
private final static IntWritable one = new IntWrittable(1);
private Text word = new Text();

@Override
public void map(LongWritable key, Text value, OutputCollctor out, Reporter reporter) throws IOException {
string line = value.toString();
for(String word : s.split("\\W+")){
output.collect(new Text(word), new IntWritable(1));
}
}

MapReduce程序及API 笔记
public class WordReducer extends MapReduceBase implements Reducer {

@Override
public void reduce(Text key, Iterator values, OutputCollctor output, Reporter reporter) throws IOException {
int sum = 0;
while (values.hasNext()){
sum+=values.next().get() + sum;
}
output.collect(key, new IntWritable(sum));

}

MapReduce程序及API 笔记
public class WordCount extend Configured implements Tool {

@Override
public int run(String[] args) throws Exception{
if(args.length != 2){
syso("Usage: WordCount ");
System.exit(-1);
}

JobConf jd = new JobConf(getConf(), WordCount.class);
jc.setJobName("wordcount");

jc.setOutputKeyClass(Text.class);
jc.setOutputValueClass(LongWritable.class);

jc.setMapperClass(WordMapper.class);
jc.setReducerClass(WordReducer.class);

FileInputFormat.setInputPaths(jc, new Path(args[0]));
FileOutputFormat.setOutputPath(jc, new Path(args[1]));
JobClient.runJob(jc);
return 0;
}
}

MapReduce程序及API 笔记
Driver Class
1.设置wordCount名称
2.设置输入 输出类型
3.设置Mapper 与 Reducer
4.设置输入 输出路径


MapReduce程序及API 笔记
写Mapper部分
1.
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;

2.继承 MapReduceBase 实现 Mapper
3. 实现 map方法
outputCollecter.collect(key, value);


MapReduce程序及API 笔记
写Reducer部分
1.
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Reducer;

2.继承 MapReduceBase 实现 Reducer
3. 定义 IntWritable value = new IntWritable();
4. 实现 reduce方法
int sum = 0;
while(arg1.hasNext()){
sum += arg1.next().get();
}
outputCollecter.collect(key, value.set(sum));




MapReduce程序及API 笔记
编写Driver
1.
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.util.Tool;

2. 继承Configured实现Tool
public class WordCount extends Configured implements Toop {

3.覆盖run方法
@Override
public int run(String[] args) throws Exception {
if(args.length != 2){...}

1. 给jobConf设名字,
2. 设输入输出class
3. 设置Mapper Reducer class
4. 设置输入输出路径

4. main方法
int exitcode = ToolRunner.run(new
WordCount(), args);
System.exit(exitCode);





MapReduce程序及API 笔记
Mapper API 介绍
1.旧版v0.20: Mapper是一个 接口
org.apache.hadoop.mapred下面
Mapper
2.新版v0.23:Mapper是一个 类
org.apache.hadoop.mapreduce下面


MapReduce程序及API 笔记
Reducer API 介绍
1.旧版v0.20: Reducer 是一个 接口
org.apache.hadoop.mapred下面
Reducer
2.新版v0.23:Reducer 是一个 类
org.apache.hadoop.mapreduce下面
Reducer


MapReduce程序及API 笔记
老版的JobConf
新版里面是Job
job.waitForComplete(..

MapReduce程序及API 笔记
Job 运行模式
1.local模式:
2.pseudo-distributed mode: 伪分布式
3.fully-distributed mode:真正的分布式

对应 conf/core-site.xml中fs.default.name的值
1.file:///
2.hdfs://localhost:9000
3.hdfs://namenode

对应 conf/mapred-red.xml中的mapred.job.tracker的值
1.local
2.localhost:9001
3.jobtracker:9001
hdfs client使用这个属性来决定namenode的位置,这样hdfs client就可以连接到该namenode




MapReduce程序及API 笔记
怎么在 伪分布式运行Word Count
1.打包
eclipse上选中项目右击-》Export...-》jar包->ok
2.启动
hadoop jar xxx.jar命令
hadoop jar word.jar inputfile output
注意output如果已经存在,需要先手动命令删除掉,否则会报异常
3.查看结果
hadoop fs -cat output/r...
查看日志
hadoop fs -cat output/_log/history/...


MapReduce的工作流 笔记
如何将需求转化为MapReduce程序
复杂的需求:
1.在word count程序中,求出单词出现频率的总和
2.单词中包含大写字母H的则转换为小写
3.在word count程序中,求出单词出现频率的总和与单词的个数



MapReduce的工作流 笔记
假设有job1,job2,需要运行
1. 如果作业是线性的
JobClient.runjob(conf1);
JobClient.runjob(conf2);

2.如果作业是环形的
可以通过Hadoop自带的JobControl来运行

MapReduce的工作流 笔记
统计总个数

1.mapper
kOut.set("countAll");
vOut = vIn.toString().split("\\W+");
outputCollect.collect(kOut, vOut);

2.reducer
int sum = 0;
while(vIn.hasNext()){
sum+=vIn.next().get();
}
key.set("result");
value.set(sum);
outputCollect.collect(key, value)


MapReduce的工作流 笔记

1.求总个数
map提供 totalWordCount : 每行的个数和sum
redunce中 将sum们相加
2.求单词个数
map提供 differentWordCount : 用特殊分隔符!~!`!将行号和单词拼接起来的“行号!~!`!单词"
redunce中 拿到每个“行号!~!`!单词"切割后,将单词作为key放到一个自定义的map中,然后求map的size
精品视频课程推荐

深入浅出学Shrio视频教程
内容概述:Shiro是目前最热门、最易用、功能超强大的Java权限管理框架,强烈推荐,每个项目都必备的权限管理技术!通过本课程,你将从零开始直到彻底掌握Shiro的相关开发知识,达到可以进行实际项目开发的能力。包括:权限管理基础、Shiro入门、配置、身份认证、授权、Realms、Session管理、和Spring的集成、Web、Cache等众多开发细节技术 技术要点:源码级分析Shiro的授权过程、自定义开发Realm、多个Realms的开发配置、自定义开发AuthenticationStrategy、自定义开发自定义SessionDAO、和Struts2+Spring3的集成(包括修正struts2的bug)、Shiro和SpringMVC+Spring3的集成、包装使用其他的Cache框架、缓存数据同步更新的解决方案等等实际开发中常用的内容

ssh+jbpm项目(某集团OA)视频教程
达到能综合使用Struts2+Spring3+Hibernate3+Jbpm4来进行实际项目开发的能力。 包括:ssh和jbpm的整合;数据字典;通用DAO(Spring+Hibernate+泛型+反射+SpEL+模板方法模式);自动生成UUID的加强版;分层开发、SSH联合的基本开发;翻页的taglib;示范真实值和表现值,数据参照的实现;文件上传下载;主子表操;登录验证码;登录控制的拦截器

Hadoop实战-中高级部分视频教程
Hadoop中高级精品课程,帮助学员快速掌握Hadoop HDFS的原理;MapReduce的原理;MapReduce高级编程;Hadoop的IO机制,如序列化、压缩;Hadoop的RPC,RESTFul API等高级特性;彻底理解Hadoop,成为一名合格的云计算开发者。并掌握一些云端基本的运维知识,从而实现开发和运维兼修的高级人才。

深入浅出学Zookeeper
内容概述:本课程深入浅出的讲解Hadoop 体系下的分布式协调组件-Zookeeper,向大家介绍了Zookeeper的原理与使用,深入浅出,结合生动实例,具有很高的实战意味 技术要点:Zookeepr 原理,Zookeeper 架构,Zookeeper 简单使用,Zookeeper Watch等

深入浅出学Spring Web MVC视频教程
系统、完整的学习Spring Web MVC开发的知识。包括:Spring Web MVC入门;理解DispatcherServlet;注解式控制器开发详解;数据类型转换;数据格式化;数据验证; 拦截器;对Ajax的支持;文件上传下载;表单标签等内容;最后以一个综合的CRUD带翻页的应用示例来综合所学的知识

浏览(536)|评论(123)   交流分类:学习问题讨论|笔记分类: 课程笔记

评论(123)
请登录后评论 登录

关于我们 | 联系我们 | 用户协议 | 私塾在线服务协议 | 版权声明 | 隐私保护

版权所有 Copyright(C)2009-2012 私塾在线学习网