Hadoop伪分布安装及简单使用
如何安装Hadoop
参考: http://dblab.xmu.edu.cn/blog/install-hadoop/
设置Hadoop环境变量
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
如果不加最后一条,会出现以下错误
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable](http://www.cnblogs.com/likui360/p/6558749.html)
安装方式
这里采用伪分布安装配置:
核心
1.属于HDFS的节点
名称节点,相当于目录服务器
,应用来取数据的时候,首先访问NameNode
,去获得我要访问的数据到底放在了哪个DataNode
上面.
名称节点包括:
再来看一下FsImage
,它维护的信息包括以下:
注意:
块在哪个节点存储的并不是由FsImage
维护的,而是一个单独的内存区域,而是下面这种方式;
DataNode会向NameNode汇报自己节点保存哪些数据块,作为管家的NameNode会构建一个清单,它自己就知道数据块到底分布到了哪个节点.(并不是由FsImage保存的)
- #####DataNode
2.属于MapReduce的核心组件
JobTracker
负责对整个用户作业进行管理,它把一个用户的大作业拆分成小的作业.分发到不同的机器上去执行TaskTracker
每个机器都部署了TaskTracker
,每一个负责跟踪和执行分配给自己的那一部分作业
HDFS编程实践
参考 http://dblab.xmu.edu.cn/blog/290-2/
我们又两种方式访问HDFS,如下图所示
在安装完Hadoop后,我们可以使用一下命令启动Hadoop
cd /usr/local/hadoop
hdfs namenode -format #格式化hadoop的hdfs文件系统
./sbin/start-dfs.sh #启动hadoop
方式一:利用shell命令
三种不同的命令类型,适用于不同的情景,具体区别见下图
-
ls
列出文件信息,mkdir
新建文件夹 - 将
本地文件
上传到HDFS
hadoop fs -cp 本地文件路径 HDFS路径
web方式(用的比较少)
方式二:利用java API
应用商店安装eclipse
,默认工作空间.
1)创建项目File
- New
-Java Project
,输入项目名称,finish
2)导入jar
包
为了编写一个能够与HDFS交互的Java应用程序,一般需要向Java工程中添加以下JAR包:
(1)”/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-2.7.1.jar和haoop-nfs-2.7.1.jar;
(2)/usr/local/hadoop/share/hadoop/common/lib”目录下的所有JAR包;
(3)“/usr/local/hadoop/share/hadoop/hdfs”目录下的haoop-hdfs-2.7.1.jar和haoop-hdfs-nfs-2.7.1.jar;
(4)“/usr/local/hadoop/share/hadoop/hdfs/lib”目录下的所有JAR包。
/usr/local/hadoop/share/hadoop
右键新建的项目 - 选择properties
- 搜索Java Build Path
- Libraries
-Add External JARS
实例测试
检测分布式文件系统HDFS上到底存不存在一个input.txt
文件?
在这之前,还需要一些工作
第一步:
把core-site.xml
和hdfs-site.xml
(在/usr/local/hadoop/etc/hadoop目录下),复制到当前工程项目下,即eclipse工作目录的bin文件夹
下面
sudo cp core-site.xml hdfs-site.xml /home/user/workspace/hadoop.test/bin/
第二步: 编写代码
package fileTest;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class FileExitTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
String filename = "test";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
if(fs.exists(new Path(filename))){
System.out.println("file exist");
}else{
System.out.print("file is not exist");
}
}catch(Exception e){
e.printStackTrace();
}
}
}
或者采用下面的方法
(此时不需要将core-site.xml和hdfs-site.xml拷贝至项目bin目录下)
package fileTest;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class FileExitTest {
public static void main(String[] args){
try{
String fileName = "test";
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:9000");
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs = FileSystem.get(conf);
if(fs.exists(new Path(fileName))){
System.out.println("文件存在");
}else{
System.out.println("文件不存在");
}
}catch (Exception e){
e.printStackTrace();
}
}
}
应用程序的部署
下面介绍如何把Java应用程序生成JAR包,部署到Hadoop平台上运行。首先,在Hadoop安装目录下新建一个名称为myapp的目录,用来存放我们自己编写的Hadoop应用程序,可以在Linux的终端中执行如下命令:
[email protected]:/usr/local/hadoop$ cd /usr/local/hadoop
[email protected]:/usr/local/hadoop$ mkdir myapp
之后jar文件并生成并保存在了/usr/local/hadoop/myapp目录下.
可以采用以下两种命令来执行
cd /usr/local/hadoop
hadoop jar ./myapp/HDFSExample.jar
或者
java -jar ./myapp/HDFSExample.jar