收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 


嘟嘟是个宝的笔记
状态: 离线
人气:27111
访问用户量:71
笔记经验:
总积分:17539
级别: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实战-初级部分视频教程-视频教程学习笔记
浏览(4802)|评论(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 笔记
moveFromL