Hadoop学习笔记
来源:互联网 发布:淘宝网查看我的购物车 编辑:程序博客网 时间:2024/06/11 00:28
Hadoop版本:Hadoop-1.1.1,2012年12月1日发布。
Hadoop主要包含两个子项目:一个是MapReduce框架,用于提供MapReduce计算;另一个是分布式文件系统HDFS,为MapReduce计算提供分布式文件存储。MapReduce框架和HDFS是两个独立的子项目,MapReduce框架不是只能使用HDFS支撑MapReduce计算,而HDFS也可以在其他应用场合提供分布式文件存储服务。
1 HDFS
HDFS是Master/Slave结构的分布式系统,主要包含一个NameNode(Master)和至少一个DataNode(Slave)。通常在网络中的一台主机上运行一个NameNode或DataNode。1.1 配置NameNode
a. 指定Java主目录。在$HADOOP_HOME/conf/hadoop-env.sh文件中指定Java主目录。export JAVA_HOME=/usr/local/jdk6。
b. 指定服务要绑定的IP和TCP端口。在$HADOOP_HOME/conf/core-site.xml文件中指定服务要绑定的IP和TCP端口。
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.10:9000</value>
</property>
</configuration>
c. 指定本地存储目录。在$HADOOP_HOME/conf/hdfs-site.xml文件中指定NameNode存放数据的本地目录。
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/data/hdfs/name</value>
</property>
</configuration>
d. 指定缺省副本数。在$HADOOP_HOME/conf/hdfs-site.xml文件中指定数据块的缺省副本数。缺省副本数不能大于后面启动的DataNode的数量。
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
e. 指定DataNode。在$HADOOP_HOME/conf/slaves文件中添加计划运行DataNode的主机的名称或者IP,以便在NameNode启动后远程登录到相应的主机启动各个DataNode。
192.168.1.20
192.168.1.21
192.168.1.22
f. 指定SecondaryNameNode。在一个HDFS集群中可按需启动一个SecondaryNameNode,用于备份NameNode的数据和执行检查点操作。在$HADOOP_HOME/conf/masters文件中添加计划运行SecondaryNameNode的主机的名称或者IP,以便在NameNode启动后远程登录到相应的主机启动SecondaryNameNode。若不需要SecondaryNameNode,则清空$HADOOP_HOME/conf/masters文件。
192.168.1.11
1.2 配置DataNode
a. 指定Java主目录。在$HADOOP_HOME/conf/hadoop-env.sh文件中指定Java主目录。export JAVA_HOME=/usr/local/jdk6。
b. 指定NameNode的访问地址。在$HADOOP_HOME/conf/core-site.xml文件中指定NameNode的访问地址。
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.10:9000</value>
</property>
</configuration>
c. 指定本地存储目录。在$HADOOP_HOME/conf/hdfs-site.xml文件中指定DataNode存放数据的本地目录。
<configuration>
<property>
<name>dfs.data.dir</name>
<value>/data/hdfs/data0</value>
</property>
</configuration>
1.3 配置SecondaryNameNode
参考DataNode的各个配置项进行。1.4 启动HDFS
首先确保计划运行NameNode的主机能够SSH远程登录(证书方式)到计划运行DataNode和SecondaryNameNode的各台主机,且各台主机上的$HADOOP_HOME一致。在计划运行NameNode的主机上,执行$HADOOP_HOME/bin/start-dfs.sh脚本启动HDFS(同目录下的stop-dfs.sh脚本用于停止HDFS)。缺省可以从 http://<NameNode的主机名称或IP>:50070 查看HDFS的运行状态。
1.5 使用HDFS Java API
通过 org.apache.hadoop.fs.FileSystem 类访问HDFS,对HDFS的所有操作都通过在该类的一个实例上调用相应的相应方法进行。通过静态方法 FileSystem.get( ... ) 获取FileSystem实例。该静态方法包含一个类型为 org.apache.hadoop.conf.Configuration 的参数,该参数包含了应用程序指定的一些配置项。为获取能够访问HDFS的FileSystem实例,需要在提供给 FileSystem.get( ... ) 方法的Configuration对象中至少指定NameNode的地址。// 开始 Configuration config = new Configuration(); config.set("fs.default.name", "hdfs://192.168.1.10:9000"); FileSystem fs = FileSystem.get(config); // // 使用fs操作HDFS上的目录和文件 // 新建:createNewFile、mkdirs // 删除:delete // 打开新文件写:create // 打开已有文件追加:append (当前版本的HDFS不支持) // 打开已有文件读:open // 读取目录下的子目录和文件列表:listStatus // 判断类型:isFile、isDirectory // fs.close(); // 结束为正确运行程序,需要在Java程序的类路径中包含Hadoop的归档文件$HADOOP_HOME/hadoop-core-*.jar和 $HADOOP_HOME/lib目录中的几个第三方依赖包:commons-logging-*.jar、commons-lang-*.jar、commons-configuration-*.jar、log4j-*.jar。
2 MapReduce框架
MapReduce框架也是Master/Slave结构的分布式系统,主要包含一个JobTracker(Master)和至少一个TaskTracker(Slave)。通常在网络中的一台主机上运行一个JobTracker或TaskTracker。2.1 配置JobTracker
a. 指定Java主目录。在$HADOOP_HOME/conf/hadoop-env.sh文件中指定Java主目录。export JAVA_HOME=/usr/local/jdk6。
b. 指定服务要绑定的IP和TCP端口。在$HADOOP_HOME/conf/mapred-site.xml文件中指定服务要绑定的IP和TCP端口。
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.1.30:9001</value>
</property>
</configuration>
c. 指定缺省使用的分布式文件系统。在$HADOOP_HOME/conf/core-site.xml文件中指定缺省使用的分布式文件系统,可以为HDFS、S3等。
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.10:9000</value>
</property>
</configuration>
d. 指定TaskTracker。在$HADOOP_HOME/conf/slaves文件中添加计划运行TaskTracker的主机的名称或者IP,以便在JobTracker启动后远程登录到相应的主机启动各个TaskTracker。
192.168.1.40
192.168.1.41
192.168.1.42
192.168.1.43
2.2 配置TaskTracker
a. 指定Java主目录。在$HADOOP_HOME/conf/hadoop-env.sh文件中指定Java主目录。export JAVA_HOME=/usr/local/jdk6。
b. 指定JobTracker的访问地址。在$HADOOP_HOME/conf/mapred-site.xml文件中指定JobTracker的访问地址。
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.1.30:9001</value>
</property>
</configuration>
c. 指定本地存储目录。在$HADOOP_HOME/conf/mapred-site.xml文件中指定TaskTracker存放临时数据的本地目录。
<configuration>
<property>
<name>mapred.local.dir</name>
<value>/data/mapred/tasktracker0</value>
</property>
</configuration>
2.3 启动MapReduce框架
首先确保计划运行JobTracker的主机能够SSH远程登录(证书方式)到计划运行TaskTracker的各台主机,且各台主机上的$HADOOP_HOME一致。在计划运行JobTracker的主机上,执行$HADOOP_HOME/bin/start-mapred.sh脚本启动MapReduce框架(同目录下的stop-mapred.sh脚本用于停止MapReduce框架)。缺省可以从 http://<JobTracker的主机名称或IP>:50030 查看MapReduce框架的运行状态。
2.4 向MapReduce框架提交Job
首先需要明确,Job是在MapReduce框架中执行的,而向MapReduce框架提交Job的程序是在客户端运行的。第一步,构建Job的jar文件。这一步的主要工作是为Job编写几个MapReduce接口的实现类,根据具体需要可能包括以下几个接口的实现类。将各个实现类及其用到的各种辅助类的字节码文件打包生成jar文件,以备后面使用。
org.apache.hadoop.mapred.Mapper 对应MapReduce计算中的Map过程
org.apache.hadoop.mapred.Reducer 对应MapReduce计算中的Reduce过程
org.apache.hadoop.mapred.InputFormat 用于自定义原始数据的获取方式
org.apache.hadoop.mapred.OutputFormat 用于自定义计算结果的输出方式
第二步,编写提交Job的程序。提交Job的程序首先为Job配置各种参数,然后将Job的参数和上一步为Job生成的jar文件提交给MapReduce框架执行。org.apache.hadoop.mapred.JobConf 类的实例用于封装Job的各种参数。而 org.apache.hadoop.mapred.JobClient 类用于向MapReduce框架提交Job。
// 开始 org.apache.hadoop.conf.Configuration config = new org.apache.hadoop.conf.Configuration(); config.set("mapred.job.tracker", "192.168.1.30:9001"); // 指定JobTracker的访问地址 config.set("fs.default.name", "hdfs://192.168.1.10:9000"); // 指定缺省使用的分布式文件系统 JobConf job = new JobConf(config); // job.setJobName("Job-0"); // 指定Job的名称 job.setJarByClass(<jar文件中任意一个类的名称>.class); // 间接指定Job的jar文件 job.setOutputKeyClass(<输出Key的类型的名称>.class); // 指定输出Key的类型 job.setOutputValueClass(<输出Value的类型的名称>.class); // 指定输出Value的类型 // 指定Map过程输出Key的类型 job.setMapOutputKeyClass(<Map过程输出Key的类型的名称>.class); // 指定Map过程输出Value的类型 job.setMapOutputValueClass(<Map过程输出Value的类型的名称>.class); job.setMapperClass(<Mapper实现类的名称>.class); // 指定Mapper job.setReducerClass(<Reducer实现类的名称>.class); // 指定Reducer job.setInputFormat(<InputFormat实现类的名称>.class); // 指定InputFormat job.setOutputFormat(<OutputFormat实现类的名称>.class); // 指定OutputFormat // JobClient.runJob(job); // 提交Job // 结束为正确运行提交程序,需要在程序的类路径中包含Job的jar文件、Hadoop的归档文件$HADOOP_HOME/hadoop-core-*.jar和 $HADOOP_HOME/lib目录中的几个第三方依赖包:commons-logging-*.jar、commons-lang-*.jar、commons-configuration-*.jar、log4j-*.jar、jackson-core-asl-*.jar、jackson-mapper-asl-*.jar。
- Hadoop学习笔记-Hadoop初识
- hadoop学习笔记-hadoop起源
- hadoop学习笔记 Hadoop进程
- 【hadoop】hadoop学习笔记-回收站
- hadoop学习笔记hadoop学习笔记
- [转]Hadoop学习笔记
- Hadoop学习笔记
- [转]Hadoop学习笔记
- [转]Hadoop学习笔记
- [转]Hadoop学习笔记
- Hadoop学习笔记
- hadoop学习笔记
- Hadoop学习笔记汇总
- hadoop学习笔记
- hadoop学习笔记
- Hadoop 学习笔记
- Hadoop学习笔记
- Hadoop学习笔记
- 【Android】拷贝文件到另一个目录下
- STM32之 启动文件详细解析(V3.5.0)
- 路由器的密码和ios恢复
- win8开发(17)——自己也来做一做弹出对话框
- Prevent Putty session from going inactive
- Hadoop学习笔记
- 黑马程序员_交通灯管理系统
- hibernate4之原理浅析
- iOS 5 取景器和实时滤镜的制作
- Makefile中添加宏定义
- CtrlList判断点击的是否为CheckBox
- 即时通讯开发的现状与选择
- 完全卸载oracle11g数据库
- This application requires a java runtime Environment 1.3.0 droiddraw